使用百度地图定位功能重要的几个类:
LocationClient:定位的主力
LocationClientOption:设置定位参数包括:定位模式(单次定位,定时定位),返回坐标类型,是否打开GPS等等
LocationData:定位信息,包括:accuracy 定位精度、direction 定位时的gps角度、latitude 维度、longitude 经度、satellitesNum 卫星数目、speed gps定位时的速度
BDLocationListener:监听定位,LocationClient.setListener(BDLocationListener)。BDLocationListener接口有2个方法需要实现:接收异步返回的定位结果和接收异步返回的POI查询结果,参数均是BDLocation类型参数。
BDLocation:触发BDLocationListener时得到的参数。
MyLocationOverlay:显示用户当前位置的Overlay,通过覆盖方法dispatchTap()处理当前位置的点击事件。MyLocationOverlay不绑定位置数据来源,可通过 setData(LocationData)方法设置位置信息,通过setMarker(marker)更新位置图标(marker为null则使用默认图标)。
步骤:
定位init:
mLocClient = new LocationClient( this ); locData = new LocationData(); mLocClient.registerLocationListener( myListener );//myListener为后面步骤完成监听的MyLocationListenner类 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);//打开gps option.setCoorType("bd09ll"); //设置坐标类型 option.setScanSpan(5000); mLocClient.setLocOption(option); mLocClient.start();
//定位图层初始化
myLocationOverlay = new LocationOverlay(mMapView);
//设置定位数据
myLocationOverlay.setData(locData);//也可调用myLocationOverlay.getMyLocation()获取当前图层的坐标信息
//添加定位图层
mMapView.getOverlays().add(myLocationOverlay);
//开启定位图层接受方向数据功能,当定位数据中有方向时,定位图标会旋转至该方向 or disableCampass()
myLocationOverlay.enableCompass();
//修改定位数据后刷新图层生效
mMapView.refresh();
mLocClient.requestLocation();
myLocationOverlay.setMarker(marker); //修改图层,需要刷新MapView生效 mMapView.refresh();
public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null || isLocationClientStop) return ; locData.latitude = location.getLatitude(); locData.longitude = location.getLongitude(); //如果不显示定位精度圈,将accuracy赋值为0即可 locData.accuracy = location.getRadius(); locData.direction = location.getDerect(); //更新定位数据 myLocationOverlay.setData(locData); //更新图层数据执行刷新后生效 mMapView.refresh(); } public void onReceivePoi(BDLocation poiLocation) { if (poiLocation == null){ return ; } } }
//继承MyLocationOverlay重写dispatchTap实现点击处理 public class LocationOverlay extends MyLocationOverlay{ public LocationOverlay(MapView mapView) { super(mapView); // TODO Auto-generated constructor stub } @Override protected boolean dispatchTap() { // TODO Auto-generated method stub //处理点击事件 return true; } }