在设备开启WiFi之后,会对周边 WiFi Access Point (AP)进行扫描,并将这些可见WiFi名称推给用户供选择。这是几乎是我们的PC和手机的日常。 除了连接WiFi登录Internet 之外,实际上,我们还可以通过 WiFi AP进行定位。

定位和地图一直是紧密联系的,无论是面向消费者的第一人称应用,还是关于管理者的追踪需求。各大LBS厂商,早就提供了各种定位功能,尤其HERE,Positioning 历史可以追溯到 Nokia年代,包括基于 GPS,WiFi network,Cell Signal,Bluetooth 等各种信号源的定位能力。


Concept

  • 除了Mobile Hotspot、WiFi Egg,大多数情况下 AP不会经常的移动, 这就为WiFi定位的基础参照位置信息;
  • 理论上,每一个 AP 都有全球唯一标识符— mac地址;当然也不排除有重复mac的问题,至于如何去重和更新后端数据库就是 another story,这里不展开了;

  • 设备WiFi扫描到AP即可同时获取AP的信息,信号的强度,mac地址(BSSID)等,无论是否连接上;

  • 根据WiFi信号强度衰减和距离的函数,可以判断设备离AP的距离;如果多个AP存在,那么这多个圆相交的区域就可以判定设备的位置;

从上面的原理可以看出,AP的位置越准确,设备扫描到的AP越多,那么设备的位置越准确。


Quick Testing

做个小测试,帮助快速理解。

假设已经拥有了 HERE Developer 账号和密钥,如果没有,这里 免费注册

以我手头的 Windows 和 HERE Positioning API 的 WLAN Positioning为例。


1 获取周边WiFi信息,可以使用 netsh 命令查到当前扫描到的AP。

netsh wlan show networks mode=BSSID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
C:\WINDOWS\system32>netsh wlan show networks mode=BSSID

Interface name : Wi-Fi
There are 18 networks currently visible.

SSID 1 : guest
Network type : Infrastructure
Authentication : WPA2-Personal
Encryption : CCMP
BSSID 1 : 0a:69:6c:0c:08:c2
Signal : 30%
Radio type : 802.11n
Channel : 11
Basic rates (Mbps) : 1 2 5.5 11
Other rates (Mbps) : 6 9 12 18 24 36 48 54
...
...
...

SSID 18 : Regus-76
Network type : Infrastructure
Authentication : WPA2-Personal
Encryption : CCMP
BSSID 1 : 0c:d8:6c:9f:1e:80
Signal : 68%
Radio type : 802.11n
Channel : 13
Basic rates (Mbps) : 1 2 5.5 11
Other rates (Mbps) : 6 9 12 18 24 36 48 54


2 使用收集到的 BSSID 发送类似 这个示例 中的请求即可,so easy!

当然, 这只是 online WiFi positioning, 还有更黑科技的 offline positioning,有空再更。



Demo Screenshot

Chian HLS JS API + Global Positioning API

Global HLS Imagery View

Have Fun!