Android studio3.0对于百度地图api开发(2)——百度地图定位指定地点以及地图类型的变换

      承接上一篇文章写的,https://blog.csdn.net/qq_41562408/article/details/82794772已经实现了百度地图的工具准备以及基本的地图显示,不过就一个地图应用来说,只是单纯的显示一种地图类型以及只是能够定位到天安门其他地方只能通过手动滑动显示是很烦的。这篇文章就是针对这些问题而写。老样子,我习惯关闭防火墙以及杀毒软件。打开Androidstudio,接着上文的项目继续进行:(在开始之前,就上次的项目有一点瑕疵就是对于广播监听部位,在函数protected void onDestroy() {中应该加上一句unregisterReceiver(receiver);)用于关闭广播,虽不影响运行,但是广播不能开着不关吧!所以对于protected void onDestroy()来说,完整代码为:

@Override
protected void onDestroy() {
    super.onDestroy();
    //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
    mapView.onDestroy();
    unregisterReceiver(receiver);
}
 

接着开发,功能列表:修改定位,改变地图显示类型

1、对于修改地图定位,百度地图定位原理主要是依据纬经度(对没有说错纬度在前面这里与习惯有点相反) 进行位置确定,所以就目前来说,我们能够通过纬经度的输入进行位置的转换,这也是后台位置确定的一个方法。而位置纬经度的确定可通过http://api.map.baidu.com/lbsapi/getpoint/index.html坐标拾取器来进行获取,在这里我就选择我学校旁边的自然公园,其纬经度为(39.547512,116.654764)核心代码为:

MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.newLatLng(target);
baiduMap.setMapStatus(mapStatusUpdate);

(1)设置变量:

protected LatLng target=new LatLng(39.547512,116.654764);

(2)与onCreate方法后面添加其核心代码。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mapView = (MapView) findViewById(R.id.bmapView);
    baiduMap=mapView.getMap();//获取地图控制器
    registerSDKCheckReceiver();
    // 3.  设置地图中心点为target
    MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.newLatLng(target);
    baiduMap.setMapStatus(mapStatusUpdate);
    //4.   设置地图缩放为15
    mapStatusUpdate= MapStatusUpdateFactory.zoomTo(15);
    baiduMap.setMapStatus(mapStatusUpdate);
}

运行结果如下图所示 

如此按照纬经度定位便完工。(可以多设定地点纬经度,通过点击不同的button跳转至不同地点)

2、接下来便是不同地图类型的转换,百度地图API提供了普通地图、卫星地图、空白地图、实时路况图、百度城市热力图;他们的意思就是字面意思,读者如果想知道详细意思可查看http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/maptype

(1)由于类型选择较多,笔者决定使用RadioGroup控件选择不同地图类型转换。代码如下:

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:id="@+id/leixin">
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="普通"
        android:id="@+id/putong"/>
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="卫星"
        android:id="@+id/weixin"/>
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="空白"
        android:id="@+id/kongbai"/>
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="实况"
        android:id="@+id/shikuan" />
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="热力图"
        android:id="@+id/reli"/>
</RadioGroup>

(2)于MainActivity中进行变量绑定,代码如下:

private RadioGroup leixing;
leixing=(RadioGroup)findViewById(R.id.leixin);
leixing.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
        switch (i){
            case R.id.putong:baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);baiduMap.setTrafficEnabled(false);baiduMap.setBaiduHeatMapEnabled(false);break;
            case R.id.weixin:baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);baiduMap.setTrafficEnabled(false);baiduMap.setBaiduHeatMapEnabled(false);break;
            case R.id.kongbai:baiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);baiduMap.setTrafficEnabled(false);baiduMap.setBaiduHeatMapEnabled(false);break;
            case R.id.shikuan:baiduMap.setTrafficEnabled(true);baiduMap.setBaiduHeatMapEnabled(false);break;
            case R.id.reli:baiduMap.setBaiduHeatMapEnabled(true);baiduMap.setTrafficEnabled(false);break;
        }
    }
});

所以oncreat方法代码为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mapView = (MapView) findViewById(R.id.bmapView);
    leixing=(RadioGroup)findViewById(R.id.leixin);
    baiduMap=mapView.getMap();//获取地图控制器
    registerSDKCheckReceiver();
    // 3.  设置地图中心点为target
    MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.newLatLng(target);
    baiduMap.setMapStatus(mapStatusUpdate);
    //4.   设置地图缩放为15
    mapStatusUpdate= MapStatusUpdateFactory.zoomTo(15);
    baiduMap.setMapStatus(mapStatusUpdate);
    leixing.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {
            switch (i){
                case R.id.putong:baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);baiduMap.setTrafficEnabled(false);baiduMap.setBaiduHeatMapEnabled(false);break;
                case R.id.weixin:baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);baiduMap.setTrafficEnabled(false);baiduMap.setBaiduHeatMapEnabled(false);break;
                case R.id.kongbai:baiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);baiduMap.setTrafficEnabled(false);baiduMap.setBaiduHeatMapEnabled(false);break;
                case R.id.shikuan:baiduMap.setTrafficEnabled(true);baiduMap.setBaiduHeatMapEnabled(false);break;
                case R.id.reli:baiduMap.setBaiduHeatMapEnabled(true);baiduMap.setTrafficEnabled(false);break;
            }
        }
    });
}


运行效果如图所示,至此按纬经度进行地图定位以及地图类型转换已经解决。中秋佳节将至,我们学校放三天假,可以好好干自己喜欢的事情了,我的第一件事就是早上睡到9点起床。(#^.^#)。幸福来得很简单。

下一篇文章在此主要解决百度地图的定位当前位置以及覆盖物的添加。希望各位道友不奢赐教。。谢谢,中秋快乐!!!!

猜你喜欢

转载自blog.csdn.net/qq_41562408/article/details/82802082