Android百度地图使用之定位

基安卓于百度地图的定位使用


地图在开发中使用的频率相当的高,我个人推荐高德地图,因为其定位误差比百度要小的多,无奈公司让用百度地图,既如此我就来说说地图的基本功能–定位。

第一步,你去官网下载百度地图的SDK,去控制台申请一个AK,在dos窗口中获取sha1码。

第二步,初始化地图引擎

Android百度地图使用之定位_第1张图片    

第三步,初始化BaiDuMap对象。

/**
 * 地图初始化
 */
private void initMap() {
    //获取地图控件引用
    mMapView = (MapView) findViewById(R.id.bmapView);
    mBaiduMap = mMapView.getMap();
    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
    //开启交通图
    mBaiduMap.setTrafficEnabled(true);

    mCurrentMode = LocationMode.NORMAL;

    // 开启定位图层
    mBaiduMap.setMyLocationEnabled(true);

    //自定义定位图标
    mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
    MyLocationConfiguration configuration =new MyLocationConfiguration(mCurrentMode,true,mCurrentMarker);
    //设置定位图层配置信息,只有先允许定位图层后设置定位图层配置信息才会生效,参见 setMyLocationEnabled(boolean)  
    mBaiduMap.setMyLocationConfigeration(configuration);
    // 定位初始化
    mLocClient = new LocationClient(this);
    mLocClient.registerLocationListener(myListener);
    LocationClientOption option = new LocationClientOption();
    option.setOpenGps(true); // 打开gps
    option.setCoorType("bd09ll"); // 设置坐标类型
    option.setScanSpan(1000);
    option.setAddrType("all"); //加上这个配置后才可以取到详细地址信息
    mLocClient.setLocOption(option);
    mLocClient.start();//开始定位

}    第四步,定位回调    
public class MyLocationListener implements BDLocationListener {

    @Override
    public void onReceiveLocation(BDLocation location) {

// mLatResult = location.getLatitude();
// mLngResult = location.getLongitude();
// location.getLocType();
// mPoiResult = location.getAddrStr();
Log.d(“结果”, “onReceiveLocation: ” +”经度”+ location.getLatitude()+”维度”+location.getLongitude());

        if (location == null || mMapView == null) {
            Toast.makeText(LocationActivity.this, "定位失败", Toast.LENGTH_SHORT).show();
            return;
        }

        MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())
                // 此处设置开发者获取到的方向信息,顺时针0-360  
                .direction(5)//设定图标方向 
                .latitude(location.getLatitude()) //百度纬度坐标
                .longitude(location.getLongitude())//百度经度坐标
                .build();

        //设置定位数据, 只有先允许定位图层后设置数据才会生效
        mBaiduMap.setMyLocationData(locData);


        //配置定位图层显示方式,三个参数的构造器  
       /* 

      * 1.定位图层显示模式 
      * 2.是否允许显示方向信息 
      * 3.用户自定义定位图标 
      * 
      * */

        if (isFirstLoc) {
            isFirstLoc = false;
            LatLng ll = new LatLng(location.getLatitude(),
                    location.getLongitude());
            MapStatus.Builder builder = new MapStatus.Builder();
            builder.target(ll).zoom(18.0f);

            mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
        }
    }

    public void onReceivePoi(BDLocation poiLocation) {
    }
}        

@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
}

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

@Override
protected void onPause() {
    super.onPause();


//在ac了
ivity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}                                                                                                               

你可能感兴趣的:(Android开发,百度地图-定位)