Android百度地图(一):百度地图定位sdk 类方法参数、定位原理详细介绍

***转载、引用请标明出处***http://www.jianshu.com/p/29ccac3e1e42本文出自[zhh_happig的简书博客](http://www.jianshu.com/u/d82bd37b1d29),谢谢[Android百度地图(二):百度地图sdk显示位置点、图层绘制](http://www.jianshu.com/p/fdd1ba783495)[Android百度地...
摘要由CSDN通过智能技术生成
***转载、引用请标明出处***
http://www.jianshu.com/p/29ccac3e1e42
本文出自[zhh_happig的简书博客](http://www.jianshu.com/u/d82bd37b1d29),谢谢


[Android百度地图(二):百度地图sdk显示位置点、图层绘制](http://www.jianshu.com/p/fdd1ba783495)
[Android百度地图(三):百度地图画运动轨迹及图层点击事件处理](http://www.jianshu.com/p/2ad4c2077dfd)
[Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼sdk服务](http://www.jianshu.com/p/3c3d9e92739d)
[Android百度地图(五):百度地图鹰眼sdk监控进出地理围栏(区域)](http://www.jianshu.com/p/db11ae2bad4f)
[Android百度地图(六):百度地图POI检索,行政区边界、公交、线路规划查询,地理编码介绍](http://www.jianshu.com/p/026fd4f96d4d)


本文主要针对百度定位sdk的api进行详细说明、注意事项,还会简单的谈一下定位的原理,目的是让读者真正了解定位,只有在完全了解的情况下,在开发中才会少走弯路,少踩坑。
##一  定位简介
目前定位大致分为三种:gps定位、wifi定位、基站定位


**gps定位**:卫星定位,利用手机gps硬件定位,实现简单,手机本地就能实现定位,不需要和服务端进行交互。
```java
//伪代码
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 5, listener);
```
手机GPS状态说明
![以小米手机为例。如上图GPS标识为高亮状态,代表gps已经开启,可进行gps定位](http://upload-images.jianshu.io/upload_images/4153803-b6f639c0b5a42378.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![如上图红框内灰暗标识,说明gps正在搜索卫星信号,虽然此时已经开始gps定位,但
是不会有gps位置返回,直到搜索到至少4颗卫星信号,才能定位成功;在室外开阔地
搜星的过程几分钟到十几分钟都有可能,如果gps长时间无法定位,尝试重启手机](http://upload-images.jianshu.io/upload_images/4153803-f7a41850f6788cfd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![如上图红框内gps标识变成高亮,说明gps已经搜索到卫星信号,开始了正常定位](http://upload-images.jianshu.io/upload_images/4153803-3ff26e0d33daf3c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在桥梁下、大树下、建筑物内、隧道内,手机很多时候都无法接收到gps信号,就无法利用gps定位了。
在室内无法定位是gps定位的最大问题,此时就得利用WiFi定位了。


**wifi定位**:一说到wifi定位,很多人觉得奇怪,WiFi怎么能知道我的位置呢,wifi硬件会返回位置吗?其实这些WiFi都不能做到。wifi定位的原理是,我们在室外的时候,手机能接收到gps位置信息,也能扫描到WiFi,当手机把gps位置和WiFi传到后端服务器,WiFi和gps位置就建立了映射关系,当手机在室内无法接收到gps时,却能扫描WiFi,手机把WiFi传到服务器查询出对应的gps位置,然后进行计算可以得到位置结果(经纬度),其中映射和计算是很复杂的过程,感兴趣的同学可以查阅相关资料。wifi定位需要wifi开启,并且手机能上网。


**基站定位**:当手机无法扫描到WiFi时,只要装了sim卡,就能连接移动或联通等基站,即可用基站定位,定位原理和WiFi大致相同。基站定位需要装了sim卡,并且手机能上网。


**wifi定位与基站定位统称为网络定位**,当wifi关闭,或者扫描不到WiFi列表时,sdk只会把获取的基站信息发给服务端,进行基站定位;如果没有sim,wifi开启,则sdk会把扫描到的WiFi信息发给服务端,进行wifi定位;如果既有wifi又有基站,则sdk会把这两者信息都发给服务端,具体用哪一种定位,不太确定,但绝大多数情况下都是用wifi定位的。


在室内无gps时,百度定位就是利用的WiFi和基站定位的,在室外有gps时,百度是利用的android自带的LocationManager进行定位,当然室外也可以用WiFi基站定位。


gps定位精度很高,几米到十几米,但是耗电严重;
WiFi定位精度相对于gps差一点,但是也能到十几米、几十米,也有上百米的误差的,低耗电;
基站定位精度很差,一般都有几百米,上千米的误差。
这个误差其实和wifi、基站的信号覆盖半径有关,wifi覆盖半径大概100m左右,而基站的覆盖半径就到km级别了。


##二  百度定位sdk配置
**1.必须申请apikey**
```java
<meta-data
  android:name="com.baidu.lbsapi.API_KEY"
  android:value="P9XLjU5FvdtDhRUTumdg2xRTpmk*****" />
```
每个apikey对应一个唯一的应用,这个apikey的主要作用是统计每个应用每天的定位次数,虽然百度没有说明每天的访问次数,但是应该有一个访问次数。比如恶意攻击,设置访问次数可防止恶意攻击。


**2.导入jar、库文件**
BaiduLBS_Android.jar:提供定位sdk的api
liblocSDK7a.so:这个so文件的主要作用是对客户端发送给服务端的参数数据进行加密
开发包[下载地址](http://lbsyun.baidu.com/sdk/download?selected=location_all),选择基础定位即可。


**3.设置AndroidManifest.xml**
```java
<service
  android:name="com.baidu.location.f"
  android:enabled="true&#
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值