安卓开发记录(5)---百度地图,点击定位按钮,屏幕返回至当前定位中心点

先看效果:

定位偏离:
安卓开发记录(5)---百度地图,点击定位按钮,屏幕返回至当前定位中心点_第1张图片
点击右下边重新定位按钮:
安卓开发记录(5)---百度地图,点击定位按钮,屏幕返回至当前定位中心点_第2张图片

定位成功;

首先根据下面这个监听函数知道,我们定位的变化都会由下面这个函数处

public class MyLocationListener implements BDLocationListener{...}

所以我们要在这个监听函数里面,把里面的坐标拿出来。就是下面的"location",我这里赋值给新变量"getlocation"(BDLocation类型)

public void onReceiveLocation(BDLocation location)

在监听函数里面拿到location后,我们在定位按钮的点击事件中写入如下函数。

    /**
     * 鼠标点击事件----右下角“定位”点击事件(点击后,可重新定位)
     */
    public void btn_restarlocation(View v){
        latLng=new LatLng(getlocation.getLatitude(), getlocation.getLongitude());
        MapStatus.Builder builder = new MapStatus.Builder();
        builder.target(latLng).zoom(18.0f);
        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
    }

综上,可以轻松实现点击定位按钮,屏幕返回至当前定位中心点。下面是无脑贴代码步骤

1.定义全局BDLocation变量 getlocation;

//用来在BDLocationListener中获取到当前定位坐标信息
 BDLocation getlocation;

2.去BDLocationListener中拿到里面的location(为了方便大家知道在哪加,我把监听函数全部复制上来了,其实就加一个赋值语句就行了,在第二段代码提示了)

 /**
     * 定位SDK监听函数
     */
    public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            // MapView 销毁后不在处理新接收的位置
            if (location == null || mMapView == null) {
                return;
            }
            mCurrentLat = location.getLatitude();
            mCurrentLon = location.getLongitude();
            mCurrentAccracy = location.getRadius();
            myLocationData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())// 设置定位数据的精度信息,单位:米
                    .direction(mCurrentDirection)// 此处设置开发者获取到的方向信息,顺时针0-360
                    .latitude(location.getLatitude())
                    .longitude(location.getLongitude())
                    .build();
            mBaiduMap.setMyLocationData(myLocationData);
            if (isFirstLoc) {
                isFirstLoc = false;
                latLng=new LatLng(location.getLatitude(), location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(latLng).zoom(18.0f);
                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

            }
            //在这里获取定位信息,在点击事件btn_restarlocation中点击按钮,返回至定位点处
            getlocation=location;
//            Log.e("Tag","纬度:"+location.getLatitude());
//            Log.e("Tag","\n 经线:"+location.getLongitude());
//            Log.e("Tag","\n 国家:"+location.getCountry());
//            Log.e("Tag","\n 省:"+location.getProvince());
//            Log.e("Tag","\n 市:"+location.getCity());
//            Log.e("Tag","\n 区:"+location.getDistrict());
//            Log.e("Tag","\n 街道:"+location.getStreet());
            if (location.getLocType() == BDLocation.TypeGpsLocation) {
               // Log.e("Tag","GPS");
            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
               // Log.e("Tag","网络");
            } else if (location.getLocType() == BDLocation.TypeOffLineLocation){
                Log.e("Tag","离线定位成功,离线定位结果也是有效的");
            } else if (location.getLocType() == BDLocation.TypeServerError){
                Log.e("Tag","服务端网络定位失败,错误代码:"+location.getLocType());
            } else if (location.getLocType() == BDLocation.TypeNetWorkException){
                Log.e("Tag","网络不通导致定位失败,请检查网络是否通畅");
            } else if (location.getLocType() == BDLocation.TypeCriteriaException){
                Log.e("Tag","无法获取有效定位依据导致定位失败");
            } else {
                Log.e("Tag","未知原因,请向百度地图SDK论坛求助,location.getLocType()错误代码:"+location.getLocType());
            }
        }
    }

最重要的就是下面这个赋值

 			//在这里获取定位信息
            getlocation=location;

3.定义鼠标点击事件,点击按钮后屏幕返回至当前定位中心点

    /**
     * 鼠标点击事件----右下角“定位”点击事件(点击后,可重新定位)
     */
    public void btn_restarlocation(View v){
        latLng=new LatLng(getlocation.getLatitude(), getlocation.getLongitude());
        MapStatus.Builder builder = new MapStatus.Builder();
        builder.target(latLng).zoom(18.0f);
        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
    }

你可能感兴趣的:(安卓开发)