百度地图学习总结(3)—定位

上一篇讲了基本的地图接入

1.承上启下

上节说了helloMap,那么这节就来讨论下定位吧。

先上效果图:

然后不想听我叨叨的朋友可以直接去看代码:
http://download.csdn.net/download/user11223344abc/10039742

2.好了,来大概讲讲代码的逻辑吧

  • 初始化定死位置到成都

setMapCorePoint(30.663791, 104.07281);//成都

  • 这里我写了一个方法,地图中心点设置
    /**
     * 地图中心点设置
     */
    private LatLng setMapCorePoint(double vd, double jd) {

//        //设定中心点坐标   latlng(经度,纬度)
        LatLng cenpt = new LatLng(vd, jd);

        //定义地图状态
        MapStatus mMapStatus = new MapStatus.Builder()
                .target(cenpt)
                .zoom(14)
                .build();

        //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
        final MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);


        //改变地图状态位置
//        mBaiduMap.setMapStatus(mMapStatusUpdate);
        mBaiduMap.animateMapStatus(mMapStatusUpdate);


        return cenpt;
    }
  • 设置了中心点之后呢,我再ui上画了一个按钮,一点,便对我目前位置进行定位,具体逻辑如下:
 /***
         * 初始化定位sdk,
         */
        mLocationService = new LocationService(getApplicationContext());
        //获取mLocationService实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取mLocationService实例的
        mLocationService.registerListener(mListener = new BDLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation bdLocation) {
                Log.e("shitmap", "定位成功");

                if (mMapMoveFlag) {
                    final double longitude = bdLocation.getLongitude();//精度
                    final double latitude = bdLocation.getLatitude();//纬度

                    Log.e("shitmap", "    longitude 精度 == " + longitude + "   latitude  纬度  == " + latitude);
                    LatLng pointer = setMapCorePoint(latitude, longitude);
                    addPointerMarker(pointer);
                    mMapMoveFlag = false;
                }
            }
        });
  • 从上面代码可以看到,mLocationService,这个Service是sdk内的,需要在清单文件中声明:
    <application>
        <!--定位服务-->
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2" >
                </action>
            </intent-filter>
        </service>

    </application>
  • 从上面代码可以看到,这个定位说白了,就是在回调内进行操作,BDLocationListener

BDLocation拿到经纬度,这个经纬度就是定位到我的位置的经纬度,然后再去调用我上面写的设置地图中心点的方法,这样,定位就成了。

  • 定位完事儿之后,发现地图上并没有变出一个icon来表示我们目前的位置,于是就出现了这么一个方法。添加一个marker来对我们定位到的位置进行一个标识,传入的经纬度,就是marker的经纬度,这里我们传入的是我当前定位到经纬度,所以理所当然的在我定位的位置上会覆盖一个marker。
    private void addPointerMarker(LatLng pointer){
//        定位完成最后,盖上一个icon,标识出定位的点
        //定义Maker坐标点
        //构建Marker图标
        BitmapDescriptor bitmap = BitmapDescriptorFactory
                .fromResource(R.mipmap.ic_launcher);
        //构建MarkerOption,用于在地图上添加Marker
        OverlayOptions option = new MarkerOptions()
                .position(pointer)
                .icon(bitmap);
        //在地图上添加Marker,并显示
        mBaiduMap.addOverlay(option);
    }
  • 一点补充:关于标识,mMapMoveFlag
    因为定位回调会一直自嗨,所以在界面没有onStop时的时候,需要一个标识位来防止定位内的业务逻辑多次的重复执行。
    /***
     * Stop location service
     */
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        mLocationService.unregisterListener(mListener); //注销掉监听
        mLocationService.stop(); //停止定位服务
        super.onStop();
    }

接下来我们会讨论如何添加覆盖物

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值