使用百度地图定位功能重要的几个类:
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;
}
}