百度地图3.7.1获取当前的位置,并自定义自身位置的图标

和定位的位置相关的有两个大类

//位置
LocationClient
//位置接口
BDLocationListener

很明显这个接口是用来监听位置的,和touch监听什么的都一样。动作都发生在监听里面。之前我们要对LocationClient进行一些设置.然后在监听里设置当前的位置数据。并判断是不是第一进入,如果是第一次进入直接显示我们的当前位置。

public class MainActivity extends Activity {
    private MapView map;
    private BaiduMap mBaidu;
    //位置
    private LocationClient mLocationClient;
    //位置接口
    private BDLocationListener myListener;
    //判断是不是第一次进入
    private boolean isFirst = true;
    //记录经纬度
    private double jing = 0;
    private double wei = 0;
    
    //自定义我的位置圆点
    private BitmapDescriptor mIconLocation;
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //去除标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //初始化百度地图
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);

        initView();
        initLocation();
    }
    
    private void initView() {
        map = (MapView) findViewById(R.id.map);
        //把视图对象转成BaiduMap
        mBaidu = map.getMap();
        // 设置地图初始的位置
//         MapStatusUpdate msu = MapStatusUpdateFactory.zoomBy(50.0f);
//         mBaidu.setMapStatus(msu);

    }
private void initLocation() {
        mLocationClient = new LocationClient(getApplicationContext());
        myListener = new MyLocationListener();
        //注册监听
        mLocationClient.registerLocationListener(myListener);
        //设置LocationClient
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
        int span = 1000;
        option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
        option.setOpenGps(true);// 可选,默认false,设置是否使用gps
        option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
        option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
        option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
        option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要
        option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

        mLocationClient.setLocOption(option);
        //初始化图标
        mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked);
        
    }
    
}

接口监听

    public class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            //设置我当前位置的数据
            MyLocationData data = new MyLocationData.Builder()//
                    .accuracy(location.getRadius())//
                    .direction(currentX)//
                    .latitude(location.getLatitude())//
                    .longitude(location.getLongitude())//
                    .build();
            mBaidu.setMyLocationData(data);
            //设置自定义的图片
            MyLocationConfiguration config = new MyLocationConfiguration(com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING
                    , true,mIconLocation);
            mBaidu.setMyLocationConfigeration(config);
            
            //如果是第一次进入,会显示当前位置
            if (isFirst) {
                jing = location.getLatitude();
                wei = location.getLongitude();
                LatLng la = new LatLng(jing,
                        wei);
                MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(la);
                mBaidu.animateMapStatus(msu);
                isFirst = false;
    //当前位置的名称            Toast.makeText(MainActivity.this,location.getAddrStr(),0).show();
            }

        }

    }

并且在activity的生命周期里进行联动

@Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        // 开启定位能功能
        mBaidu.setMyLocationEnabled(true);
        if (!mLocationClient.isStarted())
            //开启定位
            mLocationClient.start();
        
        
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        // 停止定位功能
        mBaidu.setMyLocationEnabled(false);
        //停止定位
        mLocationClient.stop();
        
    }

这样做的好处就是这个页面关闭就可以停止定位。

已定义原点的步骤也很简单,首先要声明

//自定义我的位置圆点
private BitmapDescriptor mIconLocation;

然后进行设置图片的操作

//初始化图标
mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked);

最后在监听里就可以设置图标了

//设置自定义的图片
MyLocationConfiguration config = new MyLocationConfiguration(com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING
, true,mIconLocation);
mBaidu.setMyLocationConfigeration(config);

这样就可以设置一个自己想要的图标了

 

posted @ 2016-03-22 14:17  aaddrrooiidd  阅读(3355)  评论(0编辑  收藏  举报