三 Android 程序开发——百度地图的使用 地图定位(定位+跟随+距离测量( 二 )


mLocationClient.stop();
6.如果在使用的过程还需要调用 定位,则需要以下代码(不需要则忽略)
mLocationClient.requestLocation();
7.最重要的来了,当你注册定位服务的时候会调用一个接口,会返回一个函数,里面的东西才是最想要用的(经纬度、地区、方向 。。。。。。。。。)
//位置信息监听@Overridepublic void onReceiveLocation(BDLocation bdLocation) {// 定位接口可能返回错误码,要根据结果错误码,来判断是否是正确的地址;int locType = bdLocation.getLocType();switch (locType) {case BDLocation.TypeCacheLocation:case BDLocation.TypeOffLineLocation:case BDLocation.TypeGpsLocation:case BDLocation.TypeNetWorkLocation:radius = bdLocation.getRadius();user_latitude = bdLocation.getLatitude();user_longitude = bdLocation.getLongitude();mCurrentX = bdLocation.getDirection();break;default:String s = bdLocation.getLocTypeDescription();break;}}

三  Android 程序开发——百度地图的使用 地图定位(定位+跟随+距离测量

文章插图

三  Android 程序开发——百度地图的使用 地图定位(定位+跟随+距离测量

文章插图

三  Android 程序开发——百度地图的使用 地图定位(定位+跟随+距离测量

文章插图
8.ok当前位置的信息获取完毕,当你已经获取到经纬度以后,,,,接下来就是定位当前位置
//定位到用户当前位置private void showUserLocation() {LatLng latLng = new LatLng(user_latitude, user_longitude);MapStatusUpdate msu= MapStatusUpdateFactory.newLatLng(latLng);map.animateMapStatus(msu);}
9.也可以在定位的时候放大指定的倍数
//定位到用户当前位置private void showUserLocation() {LatLng latLng = new LatLng(user_latitude, user_longitude);MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(18.0f);// 设置地图放大比例map.setMapStatus(msu);msu = MapStatusUpdateFactory.newLatLng(latLng);map.animateMapStatus(msu);}
第二种,博客里面都是这一套,用户自己斟酌使用
1.定位服务实例化 +注册监听接口 + 定位初始化,以及参数设置 + 开始定位
//实例化定位服务,LocationClient类必须在主线程中声明mLocClient = new LocationClient(getApplicationContext());mLocClient.registerLocationListener(new BDLocationListenerImpl());//注册定位监听接口/** * LocationClientOption 该类用来设置定位SDK的定位方式 。*/LocationClientOption option = new LocationClientOption();option.setOpenGps(true); //打开GPRSoption.setAddrType("all");//返回的定位结果包含地址信息option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02option.setPriority(LocationClientOption.GpsFirst); // 设置GPS优先option.setScanSpan(5000); //设置发起定位请求的间隔时间为5000msoption.disableCache(false);//禁止启用缓存定位//option.setPoiNumber(5);//最多返回POI个数//option.setPoiDistance(1000); //poi查询距离//option.setPoiExtraInfo(true);//是否需要POI的电话和地址等详细信息mLocClient.setLocOption(option);//设置定位参数mLocClient.start();// 调用此方法开始定位
2.一套定位返回接口,里面包含各种信息
/** * 定位接口,需要实现两个方法 * @author xiaanming * */public class BDLocationListenerImpl implements BDLocationListener {/** * 接收异步返回的定位结果,参数是BDLocation类型参数 */@Overridepublic void onReceiveLocation(BDLocation location) {if (location == null) {return;}StringBuffer sb = new StringBuffer(256);sb.append("time : ");sb.append(location.getTime());sb.append("\nerror code : ");sb.append(location.getLocType());sb.append("\nlatitude : ");sb.append(location.getLatitude());sb.append("\nlontitude : ");sb.append(location.getLongitude());sb.append("\nradius : ");sb.append(location.getRadius());if (location.getLocType() == BDLocation.TypeGpsLocation){sb.append("\nspeed : ");sb.append(location.getSpeed());sb.append("\nsatellite : ");sb.append(location.getSatelliteNumber());} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){sb.append("\naddr : ");sb.append(location.getAddrStr());}Log.e("log", sb.toString());MainActivity.this.location = location;mLocData.latitude = location.getLatitude();mLocData.longitude = location.getLongitude();//如果不显示定位精度圈,将accuracy赋值为0即可mLocData.accuracy = location.getRadius();mLocData.direction = location.getDerect();//将定位数据设置到定位图层里myLocationOverlay.setData(mLocData);//更新图层数据执行刷新后生效mMapView.refresh();if(isFirstLoc || isRequest){//将给定的位置点以动画形式移动至地图中心mMapController.animateTo(new GeoPoint((int) (location.getLatitude() * 1e6), (int) (location.getLongitude() * 1e6)));showPopupOverlay(location);isRequest = false;}isFirstLoc = false;}/** * 接收异步返回的POI查询结果,参数是BDLocation类型参数 */@Overridepublic void onReceivePoi(BDLocation poiLocation) {}}