android百度地图:地图定位

使用百度地图定位功能重要的几个类:

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;
  		}
  		
  	}


你可能感兴趣的:(android,api,百度地图)