百度地图开发的学习(二)——地图定位
2016-04-11 00:58
351 查看
定位是地图开发的必经重要的环节,我也在不断学习中,就自己了解写一下这些。
2.在百度的配置方法中导入完库文件后,还要进行声明libs源文件
如果是将jar包和so文件全部放入libs文件中,就需要这样的声明了,本人也试过,但是格式有点偏差,build.gradle会报错,改成下面这样就可以了。
3.添加service
location的服务是作为service来开启的,需要添加进AndroidMainfest.xml。
4.添加权限
之前学习一中已经把后续的所需权限包含进来,所以可以参考之前的,这里就不附上了。
它的有两个构造函数,都需要传入全局的context,建议用getApplicationContext传入
这两个构造函数区别:是否在创建过程中之前是否定义了配置定位参数的locationClientOption。如果采用第一个构造方法,那么在后面也需要使用setLocOption来补充。
常用方法如下:
一般在构造完和设置参数后吗,就可以调用start方法,启动定位服务。
常用的方法:
常用的设置有定位模式、定位坐标系、扫描时间间隔、返回地址结果、是否打开GPS、定位模式。
定位模式(默认高精度):
(1)高精度定位模式(Hight_Accuracy):同时使用网络定位和GPS定位,优先返回最高精度的定位结果。
(2) 低功耗定位模式(Battery_Saving):不使用GPS,只使用网络定位(WiFi和基站)。
(3)仅用设备定位模式(Device_Sensors): 不适用网络定位,只使用GPS进行定位。但是此模式下不支持室内环境的定位。
定位坐标系(建议采用bd09ll,百度地图用自己坐标比较准。。。):
(1)返回国测局经纬度坐标系:gcj02
(2)返回百度墨卡托坐标系 :bd09
(3)返回百度经纬度坐标系 :bd09ll
关于坐标系的一些了解我也会在下一篇blog里面说到。。。
扫描时间间隔(单位:ms):设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效
返回定位结果:设置是否需要地址信息,默认无地址
是否打开GPS:定位一般都需要开启
常获取的信息:经纬度、精度范围、行进的方向
这些方法常用的就是精度、经纬度、方向,对应数据获取可以BDLocation的方法获取。
显示方式(LocationMode):
有了上面几个基本的类就能简单的使用定位服务啦。
还有什么类需要查找的也可以到官网去搜索
http://wiki.lbsyun.baidu.com/cms/androidloc/doc/v6_0_3/doc/index.html
核心的代码附上:
一、配置
1.百度的定位是有自己jar包和so文件的,所以记得将它们配置到对应的文件夹中并加载进工程里。具加载方法在学习一里面就有了,这里就不细讲了。2.在百度的配置方法中导入完库文件后,还要进行声明libs源文件
如果是将jar包和so文件全部放入libs文件中,就需要这样的声明了,本人也试过,但是格式有点偏差,build.gradle会报错,改成下面这样就可以了。
sourceSets { main { jniLibs.srcDir 'libs' }
3.添加service
location的服务是作为service来开启的,需要添加进AndroidMainfest.xml。
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service>
4.添加权限
之前学习一中已经把后续的所需权限包含进来,所以可以参考之前的,这里就不附上了。
二、熟悉主要的使用的定位的类
1.LocationClient
这是一个定位服务的类,相当于定义一个有定位服务的客户端,而且只能在主线程中启动它的有两个构造函数,都需要传入全局的context,建议用getApplicationContext传入
这两个构造函数区别:是否在创建过程中之前是否定义了配置定位参数的locationClientOption。如果采用第一个构造方法,那么在后面也需要使用setLocOption来补充。
常用方法如下:
void | setLocOption(LocationClientOption locOption) | 设置 LocationClientOption |
void | start() | 启动定位sdk |
void | stop() | 停止定位sdk |
void | registerLocationListener(BDLocationListener listener) | 注册定位监听函数 |
void | registerNotify(BDNotifyListener mNotify) | 注册位置提醒监听 |
void | requestNotifyLocation() | NA |
void | removeNotifyEvent(BDNotifyListener mNotify) | 取消注册的位置提醒监听 |
int | requestOfflineLocation() | 离线定位请求,异步返回,结果在locationListener中获取. |
2.LocationClientOption
能够配置定位SDK各种参数常用的方法:
void | setCoorType(java.lang.String coorType) | 获得当前设置的坐标类型 |
void | SetIgnoreCacheException(boolean cacheException) | 设置是否进行异常捕捉 true:不捕捉异常;false:捕捉异常,默认为false |
void | setIgnoreKillProcess(boolean killProcess) | 设置是否退出定位进程 true:不退出进程; false:退出进程,默认为true |
void | setIsNeedAddress(boolean isNeed) | 设置是否需要地址信息,默认为无地址 |
void | setIsNeedLocationPoiList(boolean isNeedLocationPoiList) | 设置是否需要返回位置POI信息,可以在BDLocation.getPoiList()中得到数据 |
void | setLocationMode(LocationClientOption.LocationMode mode) | 设置定位模式 |
void | setNeedDeviceDirect (boolean isNeedDeviceDirect) | 在网络定位时,是否需要设备方向 true:需要 ; false:不需要。 |
void | setOpenGps(boolean openGps) | 设置是否打开gps进行定位 |
void | setProdName(java.lang.String prodName) | 设置Prod字段值 |
void | setScanSpan(int scanSpan) | 设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效 |
定位模式(默认高精度):
(1)高精度定位模式(Hight_Accuracy):同时使用网络定位和GPS定位,优先返回最高精度的定位结果。
(2) 低功耗定位模式(Battery_Saving):不使用GPS,只使用网络定位(WiFi和基站)。
(3)仅用设备定位模式(Device_Sensors): 不适用网络定位,只使用GPS进行定位。但是此模式下不支持室内环境的定位。
定位坐标系(建议采用bd09ll,百度地图用自己坐标比较准。。。):
(1)返回国测局经纬度坐标系:gcj02
(2)返回百度墨卡托坐标系 :bd09
(3)返回百度经纬度坐标系 :bd09ll
关于坐标系的一些了解我也会在下一篇blog里面说到。。。
扫描时间间隔(单位:ms):设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效
返回定位结果:设置是否需要地址信息,默认无地址
是否打开GPS:定位一般都需要开启
3. BDLocationListener 定位请求回调接口
在设置完定位参数过后,需要设置监听事件,主要是重写onReceiveLocation(BDLocation location)函数,实现对于location结果的处理。
4.BDLocation 内部封装了经纬度、半径等属性。
常用的方法:java.lang.String | getAddrStr() | 获取详细地址信息 |
double | getAltitude() | 获取高度信息,目前只有是GPS定位结果时才有效,单位米(还没有实现) |
java.lang.String | getCity() | 获取城市 |
java.lang.String | getCountry() | 获取国家 |
double | getLatitude() | 获取纬度坐标 |
double | getLongitude() | 获取经度坐标 |
java.lang.String | getProvince() | 获取省份 |
float | getSpeed() | 获取速度,仅gps定位结果时有速度信息,单位公里/小时,默认值0.0f |
java.lang.String | getStreet() | 获取街道信息 |
java.lang.String | getTime() | server返回的当前定位时间 |
float | [/b][b]getRadius() | 获取定位精度,默认值0.0f |
float | [/b][/b][b][b]getDirection() | gps定位结果时,行进的方向,单位度 |
5.MyLocationData 定位数据包
之前的类完成地图的定位和监听响应,如果要在地图中显示出来,就需要构造定位数据包,来显示当前定位位置。MyLocationData.Builder | accuracy(float accuracy) | 设置定位数据的精度信息,单位:米 |
MyLocationData | build() | 构建生成定位数据对象 |
MyLocationData.Builder | direction(float direction) | 设置定位数据的方向信息 |
MyLocationData.Builder | latitude(double lat) | 设置定位数据的纬度 |
MyLocationData.Builder | longitude(double lng) | 设置定位数据的经度 |
MyLocationData.Builder | satellitesNum(int num) | 设置定位数据的卫星数目 |
MyLocationData.Builder | speed(float speed) | 设置定位数据的速度 |
6.MyLocationConfiguration 配置定位图层
构造函数MyLocationConfiguration(MyLocationConfiguration.LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker)
显示方式(LocationMode):
有了上面几个基本的类就能简单的使用定位服务啦。
还有什么类需要查找的也可以到官网去搜索
http://wiki.lbsyun.baidu.com/cms/androidloc/doc/v6_0_3/doc/index.html
核心的代码附上:
mLocClient = new LocationClient(this);//定义定位客户端 mLocClient.registerLocationListener(myListener);//设置监听事件 LocationClientOption option = new LocationClientOption();//设置参数 option.setOpenGps(true); // 打开gps option.setCoorType("bd09ll"); // 设置坐标类型 option.setScanSpan(1000);//设施扫描间隔时间 mLocClient.setLocOption(option);//将参数添加进客户端 mLocClient.start();//开启客户端
public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // map view 销毁后不在处理新接收的位置 if (location == null || mMapView == null) { return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) .direction(100) .latitude(location.getLatitude()) .longitude(location.getLongitude()) .build(); mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); //mToast = Toast.makeText(LocationDemo.this, "第一次位置:"+ll.latitude +"|"+ ll.longitude, Toast.LENGTH_SHORT); //mToast.show(); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } }
相关文章推荐
- simplexml 对xml的增删改操作
- Fatal error: Call to undefined function imagettftext()解决办法
- krpano 教程 - 鼠标视角控制说明
- HTML5学习笔记三 HTML元素、属性、标题、段落简介
- 有return的情况下try catch finally的执行顺序
- RUBY Error: Please update your PATH to include build tools or download the DevKit
- 【4】mysql 表的DDL
- Swift黑科技:还在争论MVC和MVVM?博主独创幽灵架构MV!
- 面向对象
- VMware 出现Binary translation is incompatible with long mode on this platform
- 4.10编程笔记
- List的遍历方式
- C# 图片 位深度处理
- android 电话状态监听(来电和去电)实现代码
- JavaScript——写代码时突然想出的小案例,用以理解作用域
- windows跟linux文件共享
- OpenStack Mitaka Dashboard
- IOS中的几种动画的实现方式
- RabbitMQ安装
- HTML:一张思维导图搞懂HTML