您的位置:首页 > 移动开发 > Android开发

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

2016-03-13 11:15 477 查看
http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/v5-00:首先先集成百度地图的定位到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=location1:开始使用定位:
@Override
protected void onCreate(Bundle savedInstanceState) {
....
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(this);
....
}
回调方法是:public void onReceiveLocation(BDLocation bdLocation) {}然后在这个回调方法里面有一个参数时BDLocation,,可以通过这个BDLocation 来获取经纬度 和 定位的类型,获取当前的位置,然后,获取国家街道,市,区,街道,街道号getAddrStr()其实都是通过参数bdLocationint 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,而不是1option.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具体如下:添加
<Buttonandroid: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);//是否打开Gpsoption.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();
@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();mLocationClient.unRegisterLocationListener(this);mLocationClient.stop();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: