android百度地图使用(二)
2016-12-12 16:18
120 查看
这篇博客我会详细介绍百度地图定位的使用,很多人在使用百度地图定位的时候会出现各种各样的问题,例如无法定位,定位总是和实际距离偏差很大等。那么如何避免这些问题的出现,或者说如何优化呢?带着问题看我这篇博客,多多少少会对你有些启示的。
使用百度定位需要一个定位包,在上一篇博客中已经做过介绍如何导入,要是不了解可以看这篇博客android百度地图使用一这里不再赘述。在使用百度定位的时候,首先我们要对百度定位有一个基本了解,请看下图:
在这里我们得到这么几点信息:百度地图gps定位精度最高,影响因素主要是手机硬件,其次是wifi定位,最后是基站定位。关于gps定位还要说一点的是,这个还取决与手机搜到的卫星数,低于3颗无法完成定位,这也是有的人在使用百度定位的时候无法定位的原因之一。百度地图每次定位耗费流量0.3k/次,这里要注意了,定位的时候不光是耗费流量,而且还很耗费电量,因为百度是在后台开启的服务,这就导致了app性能很差。
在开始使用百度定位的时候要了解一下几个类:
**1. LocationClient 定位服务客户端,负责开启和结束服务等,只能在主线程中调用。子线程调用无效
2. LocationClientOption,百度定位客户端参数设置
3. BDLocationListener,定位回到监听
4. BDLocation,定位回调的信息,包括经纬度等**
根据上面各个类的作用,我们就可以总结出百度定位的使用步骤了。
第一步:配置客户端
百度支持三种类行的坐标bd09ll(百度坐标)、84坐标(大地坐标)、gcj02(火星坐标)在坐标时不要使用84或者火星坐标,这也是定位不准确的原因之一。
MyLocationData这个类可以设置我们定位图层的信息,但是有的人会说,我明明设置了定位图层信息,但是地图上并没有显示,这是因为你忘记了最重要的一步,开启定位图层。 mBaiduMap.setMyLocationEnabled(true);
在定位回调的时候,有时候会因为定位失败而定到非洲去啦,这个怎么办呢?好在百度定位提供了一个判断定位是否在国内的方法。所以只需要在定位回调加上如下代码即可避免这个问题。
因为定位是非常耗电的,所以在若app不需要时时获取位置信息,可以在定一次定位成功的时候调用LocationClient的stop方法来停止定位。在页面销毁的时候,我们还要关闭定位图层。所以在activity的ondestory()方法里要加上如下代码:
以上就是百度地图定位的使用了,最后说一点,之前有一个朋友想使用百度定位图层的那个图标,但是不想开启定位,这个怎么办呢?很简单MyLocationData这个类也可以单独拿出来使用,只需要将经纬度设置好就行了。
使用百度定位需要一个定位包,在上一篇博客中已经做过介绍如何导入,要是不了解可以看这篇博客android百度地图使用一这里不再赘述。在使用百度定位的时候,首先我们要对百度定位有一个基本了解,请看下图:
在这里我们得到这么几点信息:百度地图gps定位精度最高,影响因素主要是手机硬件,其次是wifi定位,最后是基站定位。关于gps定位还要说一点的是,这个还取决与手机搜到的卫星数,低于3颗无法完成定位,这也是有的人在使用百度定位的时候无法定位的原因之一。百度地图每次定位耗费流量0.3k/次,这里要注意了,定位的时候不光是耗费流量,而且还很耗费电量,因为百度是在后台开启的服务,这就导致了app性能很差。
在开始使用百度定位的时候要了解一下几个类:
**1. LocationClient 定位服务客户端,负责开启和结束服务等,只能在主线程中调用。子线程调用无效
2. LocationClientOption,百度定位客户端参数设置
3. BDLocationListener,定位回到监听
4. BDLocation,定位回调的信息,包括经纬度等**
根据上面各个类的作用,我们就可以总结出百度定位的使用步骤了。
第一步:配置客户端
public void initLocation(){ //初始化客户端 mLocClient = new LocationClient(this.getApplication()); //注册监听回调 mLocClient.registerLocationListener(this); //配置客户端参数 LocationClientOption option = new LocationClientOption(); //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); option.setOpenGps(true);//打开gps option.setAddrType("all"); option.setCoorType("bd09ll");//设置坐标类型 option.setScanSpan(1000); option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死 option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 //易引发异常 mLocClient.setLocOption(option); mLocClient.start(); }
百度支持三种类行的坐标bd09ll(百度坐标)、84坐标(大地坐标)、gcj02(火星坐标)在坐标时不要使用84或者火星坐标,这也是定位不准确的原因之一。
@Override public void onReceiveLocation(BDLocation bdLocation) { MyLocationData data = new MyLocationData.Builder() .accuracy(bdLocation.getRadius()) //此处设置开发者获取到的方向信息,顺时针0-360 .direction(bdLocation.getDirection()).latitude( bdLocation.getLatitude()) .longitude(bdLocation.getLongitude()).build(); mBaiduMap.setMyLocationData(data); }
MyLocationData这个类可以设置我们定位图层的信息,但是有的人会说,我明明设置了定位图层信息,但是地图上并没有显示,这是因为你忘记了最重要的一步,开启定位图层。 mBaiduMap.setMyLocationEnabled(true);
在定位回调的时候,有时候会因为定位失败而定到非洲去啦,这个怎么办呢?好在百度定位提供了一个判断定位是否在国内的方法。所以只需要在定位回调加上如下代码即可避免这个问题。
if (location == null && location.getLocationWhere() != BDLocation.LOCATION_WHERE_IN_CN) { return; }
因为定位是非常耗电的,所以在若app不需要时时获取位置信息,可以在定一次定位成功的时候调用LocationClient的stop方法来停止定位。在页面销毁的时候,我们还要关闭定位图层。所以在activity的ondestory()方法里要加上如下代码:
@Override protected void onDestroy() { super.onDestroy(); // unregisterReceiver(receiver); mLocClient.stop(); mLocClient = null; mBaiduMap.setMyLocationEnabled(false); map.onDestroy(); }
以上就是百度地图定位的使用了,最后说一点,之前有一个朋友想使用百度定位图层的那个图标,但是不想开启定位,这个怎么办呢?很简单MyLocationData这个类也可以单独拿出来使用,只需要将经纬度设置好就行了。
相关文章推荐
- Android如何使用百度地图
- android中关于百度地图的使用
- Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
- Android 关于百度地图Android SDK几处修正使用说明(非官方) 推荐
- 百度地图在android的使用
- android中关于百度地图的使用
- android 百度地图使用tabhost 无法定位,解决办法
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android百度地图使用
- Android百度地图使用
- Android上面的百度地图使用步骤
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
- android中关于百度地图的使用
- 百度地图4之MyLocationOverlay的使用(Android)
- android使用百度地图在切换界面的时候地图左下角Logo变成白色方块
- android开发中百度地图的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用