AndroidStudio 中使用 百度地图 <三> 百度地图的定位的集成和使用,个人摘要

http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/v5-0


0:首先先集成百度地图的定位到AndroidStudio 中,

添加service    <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">        </service>
添加相应的权限
key 就不用重复写了.
记住了,一定要导入SDK,SDK的下载地址为:http://lbsyun.baidu.com/sdk/download?selected=location


1:开始使用定位:                                                                

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    mLocationClient = new LocationClient(getApplicationContext());
    mLocationClient.registerLocationListener(this);
    ....
}

回调方法是:

 public void onReceiveLocation(BDLocation bdLocation) {    
                                                           
 }                                                         

然后在这个回调方法里面有一个参数时BDLocation,,可以通过这个BDLocation 来获取经纬度 和 定位的类型,获取当前的位置,然后,获取国家街道,市,区,街道,街道号getAddrStr()其实都是通过参数bdLocation


   int locType = bdLocation.getLocType();
        //可以通过BDLocation.TypeXxxxXxxx来判断类型代表的内容
        double latitute =bdLocation.getLatitude();
        double longtitute=bdLocation.getLongitude(

@Override
public void onReceiveLocation(BDLocation bdLocation) {
    //TODO: 利用BDLoacation.getLocType()来判断成功和失败,以及定位类型
    int locType = bdLocation.getLocType();
    //可以通过BDLocation.TypeXxxxXxxx来判断类型代表的内容
    switch (locType) {
        case BDLocation.TypeNetWorkLocation:
        case BDLocation.TypeCacheLocation:
        case BDLocation.TypeGpsLocation:
            double latitute = bdLocation.getLatitude();
            double longtitute = bdLocation.getLongitude();
            bdLocation.getCountry();//国家
            bdLocation.getProvince();//            bdLocation.getCity();//            bdLocation.getDistrict();//            bdLocation.getStreet();//街道
            bdLocation.getStreetNumber();//街道号
            bdLocation.getAddrStr();


            Log.d("Location", "" + latitute + " " + longtitute);
            updateCurrentLocationMarker(bdLocation);
            break;
        default:
            //定位失败
            break;
    }
}
 
//---------------------------------------
//定位结果回调
private Marker currentLocationMarker;
private void updateCurrentLocationMarker(BDLocation location){


    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());


    //更新当前位置的图标:
    if(currentLocationMarker==null) {
        MarkerOptions options = new MarkerOptions();
        options.position(latLng);
        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher);
        options.icon(icon);
        //map.addOverlay(options);
        currentLocationMarker=(Marker)map.addOverlay(options);
    }else{
        currentLocationMarker.setPosition(latLng);
    }


    //动态的切换当前的地图位置以定位的坐标为中心点;
    //需要动态的更新地图状态,
    MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);//设置中心点
    map.setMapStatus(mapStatusUpdate);
}


2: 

添加一个按钮来启动定位,然后启动之后会回调上面的方法:
  LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);
        option.setCoorType("bd09ll");//注意后面的是字母l,而不是1
        option.setScanSpan(5000);
        option.setIsNeedAddress(true);
        option.setOpenGps(true);
        //推荐使用的,但是没有意义,百度定位用于统计客户端信息的,可能以后会给开发者查看报表
        option.setProdName("xueziqiang");
        mLocationClient.setLocOption(option);
        //获取定位地址(一次or循环)
        mLocationClient.start();//start开始定位,如果setScanSpan()大于1000会重复定位,除非stop
        //如果想单独一次,请求一次定位就行了
        mLocationClient.requestLocation();


//默认的情况下,百度定位返回的坐标系百度地图使用的时候会有偏差。
        //使用bd09ll 代表百度地图自身使用的经纬度latitue longtitue,我们就是使用这个bd09ll
        //使用“gcj02” 代表“国家测绘局”使用的坐标系数据。
        //使用“bd09”墨卡托投影
        //如果使用百度定位,然后定位的信息显示在高德地图上,那么需要使用gcj02.
        //-----------------
        option.setCoorType("bd09ll");//注意后面的是字母l,而不是1

具体如下:

添加

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="btnCheckLocation"
    android:text="定位当前位置"/>

    public void btnCheckLocation(View view) {
        //准备参数
        LocationClientOption option = new LocationClientOption();
        //设置定位的模式,最要在于定位的精度,高精度,低功耗,仅设备


//        LocationClientOption.LocationMode.Hight_Accuracy;
//        LocationClientOption.LocationMode.Battery_Saving;
//        LocationClientOption.LocationMode.Device_Sensors;
        option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);


        //默认的情况下,百度定位返回的坐标系百度地图使用的时候会有偏差。
        //使用bd09ll 代表百度地图自身使用的经纬度latitue longtitue,我们就是使用这个bd09ll
        //使用“gcj02” 代表国家测绘局使用的坐标系数据。
        //使用“bd09”墨卡托投影
        //如果使用百度定位,然后定位的信息显示在高德地图上,那么需要使用gcj02.
        //-----------------
        option.setCoorType("bd09ll");//注意后面的是字母l,而不是1
        //设置定位的扫描间隔,如果小于1000,代表执行一次;对于只执行一次的而言,不设置更好
        //如果大于1000,代表每间隔多少毫米,进行一次定位刷新,
        option.setScanSpan(5000);


        //设置是否返回当前的街道名称地址
        option.setIsNeedAddress(true);
        //是否打开Gps
        option.setOpenGps(true);


        //推荐使用的,但是没有意义,百度定位用于统计客户端信息的,可能以后会给开发者查看报表
        option.setProdName("xueziqiang");


        //LocationClient 来设置参数,
        mLocationClient.setLocOption(option);


        //获取定位地址(一次or循环)
        mLocationClient.start();//start开始定位,如果setScanSpan()大于1000会重复定位,除非stop


        //如果想单独一次,请求一次定位就行了
        mLocationClient.requestLocation();

    }

3:

记住了一定要在onDestroy 里面执行下面的,不然会一直定位的
在Destory 里面:
mLocationClient.unRegisterLocationListener(this);

mLocationClient.stop();


@Override
protected void onDestroy() {
    super.onDestroy();
    //activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
    mMapView.onDestroy();
    mLocationClient.unRegisterLocationListener(this);
    mLocationClient.stop();
}





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值