BaiduMap SDK-多地图展示

目录

1.布局xml文件

2. 代码编写

2.1 定义4个LatLng变量

2.2 获取所有View

2.3 设置地图中心点和事件

2.3.1 设置地图中心点和事件

2.3.2 设置地图旋转角度(显示指南针)

2.3.3 地图事件

2.4 执行结果对比


一个界面展示可以多个地图,每个地图可以展示不同的信息,更具有个性化,满足对地图不同需求;

就是先在布局上添加几个父容器,每个容器设置class="com.baidu.mapapi.map.SupportMapFragment",

表示是一个MapView;

1.布局xml文件

定义4个MapView容器;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@android:color/black">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="5dp"
        android:layout_weight="1"   
       android:background="@android:color/black"
        android:orientation="horizontal" >

        <fragment
            android:id="@+id/map1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            class="com.baidu.mapapi.map.SupportMapFragment" />

        <fragment
            android:id="@+id/map2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            class="com.baidu.mapapi.map.SupportMapFragment" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="5dp"
        android:layout_weight="1"
        android:orientation="horizontal" >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
        <fragment
            android:id="@+id/map3"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            class="com.baidu.mapapi.map.SupportMapFragment" >
        </fragment>
            <CheckBox android:id="@+id/cb_compass"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="显示指南针"
                android:checked="true"
                android:layout_alignParentRight="true"/>
        </RelativeLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
        <fragment
            android:id="@+id/map4"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            class="com.baidu.mapapi.map.SupportMapFragment" />
                <CheckBox android:id="@+id/cb_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="显示标注" android:checked="true"
                    android:layout_alignParentRight="true"/>
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>

2. 代码编写

2.1 定义4个LatLng变量

4个LatLng变量主要用来设置每个地图的中心点;

   private static final LatLng GEO_BEIJING = new LatLng(39.945, 116.404);
    private static final LatLng GEO_SHANGHAI = new LatLng(31.227, 121.481);
    private static final LatLng GEO_GUANGZHOU = new LatLng(23.155, 113.264);
    private static final LatLng GEO_SHENGZHENG = new LatLng(22.560, 114.064);

2.2 获取所有View

SupportMapFragment mapView1, mapView2, mapView3, mapView4;

    private  CheckBox cb_compass,cb_label;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_multi_map_view);

        mapView1 = (SupportMapFragment) (getSupportFragmentManager()
                .findFragmentById(R.id.map1));
        mapView2 = (SupportMapFragment) (getSupportFragmentManager()
                .findFragmentById(R.id.map2));
        mapView3 = (SupportMapFragment) (getSupportFragmentManager()
                .findFragmentById(R.id.map3));
        mapView4 = (SupportMapFragment) (getSupportFragmentManager()
                .findFragmentById(R.id.map4));
        cb_compass = (CheckBox) findViewById(R.id.cb_compass);
        cb_label = (CheckBox) findViewById(R.id.cb_label);
        initMap();
    }

2.3 设置地图中心点和事件

2.3.1 设置地图中心点和事件

/**
     * 初始化Map,设置不同城市为地图中心点,设置Logo不同位置
     */
    private void initMap() {
        /*北京为地图中心,logo在左上角*/
        MapStatusUpdate u1 = MapStatusUpdateFactory.newLatLng(GEO_BEIJING);
        mapView1.getBaiduMap().setMapStatus(u1);
        mapView1.getMapView().setLogoPosition(LogoPosition.logoPostionleftTop);

        /*上海为地图中心,logo在右上角*/
        MapStatusUpdate u2 = MapStatusUpdateFactory.newLatLng(GEO_SHANGHAI);
        mapView2.getBaiduMap().setMapStatus(u2);
        mapView2.getMapView().setLogoPosition(LogoPosition.logoPostionRightTop);

        /*广州为地图中心,logo在左下角*/
        MapStatusUpdate u3 = MapStatusUpdateFactory.newLatLng(GEO_GUANGZHOU);
        mapView3.getBaiduMap().setMapStatus(u3);
        mapView3.getMapView().setLogoPosition(LogoPosition.logoPostionCenterBottom);
        //显示左上角指南针
        initMpaStatus(mapView3.getBaiduMap());
        mapView3.getBaiduMap().getUiSettings().setCompassEnabled(true);
        //是否显示指南针
        cb_compass.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                mapView3.getMapView().getMap().getUiSettings().setCompassEnabled(b);
            }
        });

        /*深圳为地图中心,logo在右下角*/
        MapStatusUpdate u4 = MapStatusUpdateFactory.newLatLng(GEO_SHENGZHENG);
        mapView4.getBaiduMap().setMapStatus(u4);
        mapView4.getMapView().setLogoPosition(LogoPosition.logoPostionRightBottom);
        //是否显示标注
        cb_label.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                mapView4.getMapView().getMap().showMapPoi(b);
            }
        });
    }

2.3.2 设置地图旋转角度(显示指南针)

地图左上角的指南针图标,只有地图进行旋转才会出现,为了在地图显示就出现指南针图标,可以通过代码旋转一定角度

就可以了;

  private void initMpaStatus(BaiduMap baiduMap) {
        float rotate = -12.0f;
        MapStatus mapStatus = new MapStatus.Builder(baiduMap.getMapStatus()).rotate(rotate).build();
        MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);
        baiduMap.setMapStatus(mapStatusUpdate);
    }

2.3.3 地图事件

为了体现各个地图的不同,用来处理不同场景,特意第3个地图添加是否显示指南针,第4个地图添加是否显示标注;

cb_compass.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
               //是否显示左上角的指南针               
               mapView3.getMapView().getMap().getUiSettings().setCompassEnabled(b);
            }
        });
  
cb_label.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
               //是否显示地图标注
                mapView4.getMapView().getMap().showMapPoi(b);
            }
        });

2.4 执行结果对比

执行显示罗盘和标注                                              执行不显示罗盘和标注

          

把网上电子地图的图片下载到本地. 因为网上电子图片是分缩放级别的,可以直接将所有级别或才定制级别的图片下载下来,会放到相应的文件夹里面.可供使用百度地图引擎的程序直接使用. 不好意思,定这么高的分,如果您分不够,可以给我发邮件,我把程序发给您. 双面GetBaiduMapPic\bin\Debug\GetBaiduMapPic.exe来运行程序, 第一步:填写好经度开始,经度结束。 第二步:填写好纬度开始,纬度结束。 第三步:选择缩放级别开始,也就是从第几级的缩放开始下载。 第四步:选择绽放级别结束,也就是到第几级的缩放结束下载。百度的地图缩放是0-13个级别,我们可以从中选择。只要开始不要大于结束即可。 第五步:点击“开始生成URL”按钮。此时在下面左边的列表里面会显示出生成要下载的图片地址列表。 第六步:点击“选择存储位置”按钮,找到一个位置,用来存放配置文件及要下载的图片的位置。不要忘记文件名处要填写一个名字,自己随意起就好了。填好后点击保存。 第七步:点击“导出XML”按钮,这样便会将刚刚显示的要下载的文件列表保存到了XML文件中。 第八步:点击“开始获取”按钮,便会将百度的电子地图图片下载到本地了。就是您刚才放置XML文件位置。 如果有失败的地址,则点击“失败地址导出XML”,便可以将地址导出。以便重新进行读取下载。 在使用中如果遇到问题可以致 Email:[email protected] 声明:本程序只用作技术研究,软件使用自愿,若引起百度等网站纠纷与本人无关,请自行决定是否使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值