百度地图定位功能的实现5.3版本

  最近,由于项目中用到百度地图的定位功能,所以就研究了下。最初的打算是用studio来实现,奈何百度申请密钥时需要用到一个SHA1值,在Eclipse中非常容易就找到了,但studio中死活找不到,知道怎么找的小伙伴希望在留言中告诉我。

  源码地址:https://github.com/JustDoI/BaiDuLocation-master

location.png

  闲话不多说,看代码:

  1、初次启动定位

          @Override
           protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
                    // 注意该方法要再setContentView方法之前实现
                    SDKInitializer.initialize(getApplicationContext());
                    setContentView(R.layout.activity_main);
                    mMapView = (MapView) findViewById(R.id.bmapView);
                    mBaiduMap = mMapView.getMap();
                    MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
                    mBaiduMap.setMapStatus(msu);
                    initLocation();
                    LatLng ll = new LatLng(mCurrentLantitude, mCurrentLongitude);
                    MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
                    mBaiduMap.animateMapStatus(u);
           }
        /**
          * @Title: initLocation
          * @Description: 初始化定位相关代码
          * @return: void
        */
         private void initLocation() {
               // 定位初始化
               mLocationClient = new LocationClient(this);
               mMyLocationListener = new MyLocationListener();
               mLocationClient.registerLocationListener(mMyLocationListener);
               // 设置定位的相关配置
              LocationClientOption option = new LocationClientOption();
              option.setOpenGps(true);// 打开gps
              option.setCoorType("bd09ll"); // 设置坐标类型
              option.setAddrType("all");
              option.setScanSpan(1000);
              mLocationClient.setLocOption(option);
        }

  首先是一些初始化的操作,这些东西在百度官方的API 中都可以找到,其中

          MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
          mBaiduMap.setMapStatus(msu);

  这段代码是设置地图的比例尺。

  2、定位的监听器MyLocationListener:

  主要代码:

           if (isFristLocation) {
                  isFristLocation = false;
                  LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
                  MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
                  mBaiduMap.animateMapStatus(u);
              }

  这段代码是将位置信息显示在地图上,会有一个标志点显示在地图上。也可以显示自定义的图标,代码如下:

             BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked);
             MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker);
             mBaiduMap.setMyLocationConfigeration(config);

  定位是比较耗电的,所以我们在onStart()中启动,在onStop()中关闭。

           @Override
           protected void onStart() {
                // 开启图层定位
                // 这段代码非常重要
                mBaiduMap.setMyLocationEnabled(true);
                if (!mLocationClient.isStarted())
                mLocationClient.start();
                mLocationClient.requestLocation();
                super.onStart();
            }
           @Override
            protected void onStop() {
                   // 关闭图层定位
                  mBaiduMap.setMyLocationEnabled(false);
                  mLocationClient.stop();
                  super.onStop();
              }

  代码比较简单,相信大家都能看懂。还有千万别忘了加mBaiduMap.setMyLocationEnabled(true)这段代码,刚做的时候就是没加,结果地图都显示不出来了,更别提定位了。