百度地图开发的学习(二)——地图定位,百度地图
定位是地图开发的必经重要的环节,我也在不断学习中,就自己了解写一下这些。
一、配置
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中获取. |
一般在构造完和设置参数后吗,就可以调用start方法,启动定位服务。
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)时,定时定位无效 |
常用的设置有定位模式、定位坐标系、扫描时间间隔、返回地址结果、是否打开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:定位一般都需要开启
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返回的当前定位时间 |
|
|
获取定位精度,默认值0.0f |
|
|
gps定位结果时,行进的方向,单位度 |
常获取的信息:经纬度、精度范围、行进的方向
5.MyLocationData 定位数据包
之前的类完成地图的定位和监听响应,如果要在地图中显示出来,就需要构造定位数据包,来显示当前定位位置。
MyLocationData.Builder |
accuracy(float accuracy) |
设置
您可能想查找下面的文章:文章分类最近更新的内容 |