iOS的定位原理揭秘
iOS的WiFi定位原理
我们知道iOS设备的定位方式有三种:
卫星定位
蜂窝基站定位
Wi-Fi定位
卫星定位和蜂窝基站定位的原理大家应该都有了解,因为卫星和基站都是有位置信息的,根据有位置信息的东西算出自身的位置信息,这个比较容易理解。但是Wi-Fi的定位是如何进行的呢?貌似家里面的Wi-Fi并没有位置信息啊,但通过Wi-Fi定位算出来的坐标通常是又快又比较准确,这是发生了什么鬼?
其实这开始于一个始乱终弃的故事。最早做Wi-Fi定位的是 Skyhook Wireless,该公司通过装备了Wi-Fi天线和高灵敏度的GPS接收器的汽车在城市间兜转,以获取众多Wi-Fi热点的网络标识和信号强弱信息以及相关GPS坐标存储到服务器进行整理和分析,然后设备就可以通过附近Wi-Fi的信息向服务器获取位置信息了。2008年,Apple发布了3G版的iPhone,改款iPhone自带的定位服务就是Apple,Skyhook以及Google三家联合开发,但是Apple发布iOS4开始抛弃了Skyhook,
自己建立数据库。这也怪不得苹果这个高富帅,拥有众多的iOS设备,采集这些信息的时候根本不需要开车满大街跑啊。总的来讲,Wi-Fi初期还是要依赖于卫星定位和蜂窝基站定位得出其初步的位置信息才可以往下展开定位工作。Wi-Fi发展到现在,其算法不断改进,定位速度和精度也越来越高。到现在,iOS设备不需要连上Wi-Fi,只需要附近有Wi-Fi信号就可以进行定位了,是不是略屌。其实只是用户的设备会缓存相关的位置信息,这里有声明,通过这些缓存的信息,可以根据Wi-Fi信号而不需要连上就可以算出位置信息了。现在是不是觉得懂得了Wi-Fi定位的原理,太天真了,事情远没有这么简单的……
来点高大上装逼的。
wifi定位方法基本上可以分为两大类:
1.不基于RSSI
TOA(time ofarrival)
TDOA(time difference of arrival)
AOA(angle of arrival)
上面是什么东西,想要自己问度娘谷哥要。因为这些值的获取需要特殊的Wi-Fi模块,在智能机上无法获取,因此这类方法无法使用,所以现在讲了也没什么卵用。
2.基于RSSI
在智能手机上,可以通过系统SDK获取到周围各个AP(Access Point)发送的信号强度RSSI(Received Signal Strength Indicator)及AP地址,目前利用RSSI来定位看来是最可行的方法,基于RSSI定位主要有两个算法:
三角定位
如果我们已经知道了这些AP的位置,我们可以利用信号衰减模型估算出移动设备距离各个AP的距离,然后根据智能机到周围AP距离画圆,其交点就是该设备的位置。由于三角定位算法需要我们提前知道AP的位置,因此对于环境变化较快的场合不适合使用。
指纹算法
指纹算法类似于机器学习算法,分为两个阶段:
离线训练阶段:将需要室内定位区域划分网格,建立采样点(间距1~2m)使用wifi接受设备逐个采样点采样,记录该点位置、所获取的RSSI及AP地址。对采样数据进行处理(滤波、均值等)
在线定位阶段:用户持移动设备在定位区域移动,实时获取当前RSSI及AP地址,将该信息上传到服务器进行匹配(匹配算法有NN、KNN、神经网络等) 得到估算位置。匹配算法有NN、KNN、神经网络等。
指纹算法相比较三角定位算法精度更高。三角定位算法需要提前知道所有AP的位置指纹算法需要提前绘制一幅信号Map。智能手机基于WIFI的室内定位应用,更适合使用基于RSSI信号的指纹算法,原因在于我们不需要提前知道所有AP的位置,而且指纹算法可以应对AP位置或状态的改变。可以提前将测绘指纹数据库储存到服务器上,移动设备在定位区域将自己得到的周围AP信息实时发送给服务器,由服务器进行匹配并返回坐标位置给客户端。一旦AP状态或位置变化,只需要更新定位区域数据库而并不需要在客户端作出改变。
参考
建议继续学习:
- 在python中获取当前位置所在的行号和函数名 (阅读:3849)
- 常见定位技术有哪些? (阅读:2476)
- IE6 bug: 消失的绝对定位元素 (阅读:1967)
- 定位相关的怪异问题 (阅读:1756)
- 产品线定位 (阅读:1711)
- 定位相关的怪异问题 (阅读:1634)
- 无线产品规划 (阅读:1679)
- 网站定位的面子问题 (阅读:1480)
- 如何开拓新业务 (阅读:1452)
- 从社区定位到顺势而为 (阅读:1462)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:空之境界 来源: 空之境界
- 标签: 定位
- 发布时间:2016-02-11 22:42:42
- [55] Oracle MTS模式下 进程地址与会话信
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 如何拿下简短的域名
- [53] android 开发入门
- [52] Go Reflect 性能
- [51] 图书馆的世界纪录
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑