赞
踩
小组在一个Demo
项目中,图省事准备使用官方的GPS
定位API
。
但在我的印象中,官方的定位API
是不好用的,一般都是用 高德地图/百度地图
的定位SDK
的。
使用官方的定位API
获取定位的话,在办公室调试的时候,可能室内压根获取不到的。
但是试了一下后让我感到惊讶
,居然在室内都能定位到,这是怎么回事 ? 和我印象中的不一样啊
所以,对此查阅了若干资料,终于是搞明白了
通过本文,会讲清楚这几个问题
先来看下Android官方定位API,有这几种定位方式
GPS_PROVIDER
:通过 GPS 来获取地理位置的经纬度信息NETWORK_PROVIDER
: 通过移动网络的基站或者 Wi-Fi 来获取地理位置PASSIVE_PROVIDER
: 被动定位,其他应用比如百度、高德等使用了定位,系统会更新定位信息并保存下来,通过此方式可以获取最近一次的位置信息。可以查询 getProvider()
方法决定位置更新的由来,需要 ACCESS_FINE_LOCATION
权限,但是如果未启用 GPS
,则此 provider
可能只返回粗略位置匹配;搜了下网上文章上的描述,也和我印象中的观点是类似的
官方点的高位API中主动定位有两种方式,但不太好用
类似观点的文章还有
解决Android原生定位的坑
功耗大?定位精度差?如何优化Android原生定位
Android原生定位服务LocationManager
android手机定位onLocationChanged长时间不返回
查阅了相关资料,可以得出,由于太空卫星离地面太远,所以天线对天空之间不能有遮挡物。
现在的房子都是由钢筋混泥土建造而成的,所以GPS信号会被阻隔或反射而接收不到了。
我又看了下我在Github上找的定位Demo的源码,发现平板上能获取到定位是因为我找的那个定位Demo
内部做了优化 : 如果GPS获取不到,那就通过网络获取定位。
应该是国内高版本的Android
做了优化,没有使用Google
的网络 (国内访问不了google
),而国内高版本手机系统网络定位是针对国内网络环境专门做过优化的,所以可以获取到定位。
不过这种方式获取的定位是大致位置,精确度不高的。
如果单纯获取GPS定位,我试了下,室内几乎是获取不到的,把手机放到窗外才能获取到GPS
定位。
如果 Android 版本过低,或者使用原生Android系统的手机,可能在国内,也无法进行室内定位 (由于缺少设备,未验证该结论)
百度/高德这种专门的定位SDK都是融合多种定位数据(GPS、基站、Wifi、蓝牙等),得到的定位信息会比Android原生的定位更靠谱,而且是免费的。
这里以高德定位SDK为例,截取了部分官方对它的介绍
手机定位方式主要包括:GPS定位和网络定位 (基站、WiFi、蓝牙等)
通过GPS接收机接收卫星广播,通过解析多个可见卫星的位置、距离等信息以及相应算法得出自己的位置信息。
优点 :
缺点 :
网络定位是将手机设备收到的信号(主要是基站、Wifi、蓝牙)发送到网络服务器,获得位置。之所以要将信号数据发送到网络上,是因为网络定位是利用信号指纹进行定位,需要一个庞大的且持续更新的指纹数据库,这个数据库难以同步到移动设备上。为了进行定位,需要事先建立每个位置的指纹特征,然后在定位时用实时指纹比对每个位置的历史指纹,确定位置。
高德和百度等定位SDK都有维护一套庞大的指纹数据库,且使用的是国内网络,所以在国内就可以很好的使用网络定位了。
根据手机终端和多个基站位置、信号强弱等关系,计算自己的位置信息。
优点:
缺点:
利用手机搜索的无线热点信号和信号强度,匹配热点位置服务器数据,返回手机位置信息。
蓝牙也是类似的。
原理 :
BSSID
(即mac
地址),无线热点的位置一定时间内相对来讲是固定的优点:
缺点:
6.2 部分参考
高德网络定位算法的演进
手机定位方式总结
android中几种定位方式详解
通过本文,我们可以回答本文开头的问题了
本文为氦客在CSDN上独家发布
地址 : https://blog.csdn.net/EthanCo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。