在 Android 中获取返回的 WIFI 扫描的纬度/经度
Getting lat / long for returned WIFI scan in Android
我一直在尝试使用 WifiManager 进行扫描并获取范围内的 wifi 列表。我希望能够在地图上绘制这些。返回的结果似乎没有任何类型的 属性 可供我用于纬度或经度。
WifiManager 不会为您提供任何类型的位置数据。您必须使用 LocationManager。 LocationManager 将根据用户的 GPS 和附近的 Wifi 网络提供位置数据。
见NETWORK_PROVIDER - This provider determines location based on availability of cell tower and WiFi access points. Results are retrieved by means of a network lookup.
简答:
这是不可能的。
各种 802.11 IEEE 标准(又名 Wi-Fi)本身都不允许在任何级别上这样做。 Wi-Fi 中没有地理位置概念。
要做到这一点,您必须依赖更高级别的协议,这些协议既不是强制性的,也没有在 all/most Wi-Fi AP 或 STA 中实施的广泛传播的标准,因此不够可靠真的很有用。
if TL;DR:
没有半真半假的可靠方法可以做到这一点(但有些人假装这样做),因为 2016 年的技术还不成熟。
但有些人正在努力改变这一点。
else:
长答案:
注1:
然而一些应用程序试图通过使用启发式方法来做到这一点,例如:
扫描时围绕自己旋转360度,
记录AP的Wi-Fi信号强度,应该与距离有关,
...并将其与扫描设备的地理位置相关联 - 通过 GPS 获得,或者通过附近的蜂窝天线塔获得,精度较低,可在在线数据库中找到,
...精细获取用户周围AP地图
请注意,这是非常启发式的和不精确的。首先,Wi-Fi RSSI(接收信号强度)远非可靠的距离测量。例如:有墙吗?家具?周围的无线电噪音是多少?
还有,注2:
不过,用例在那里[*],所以市场在那里,所以为此付出了一些努力。
现在(2016 年),Wi-Fi 联盟(又名 WFA 又名 wi-fi.org)有一个工作组正在处理这个问题。
http://www.wi-fi.org/beacon/rolf-de-vegt/never-lost-indoors-the-promise-of-wi-fi-location
不过,首先,这是基于 Wi-Fi Fine Timing Measurement (FTM) protocol
,利用 IEEE 1588 (PTP
) 和 802.1AS (gPTP
),see here 均来自802.1(又名有线以太网)。而这个FTM还没有。
目前的目标只是测量节点的 距离。这样做的主要动机是 不是 地理位置,而是准确测量传播延迟,这对 video/audio 流媒体很重要:设备需要一个通用的挂钟才能能够同步播放,如果您一开始就不知道从一个节点传播到另一个节点需要多长时间,就无法共享这个公共时钟。
这个 Wi-Fi Fine Timing Measurement
工作组于 2014 年开始。从那个到发布完整的 IEEE 标准,在硅供应商的支持下,再到 firmware/OS 支持,再到您附近设备上的应用程序(以及最重要的是确保每个人都能与任何人一起玩的认证计划),好吧,你将不得不等待几年。这只是最基本的:准确测量 距离 - 没有地理因素。
所以去 "the promise of Wi-Fi location" 引用 WFA(Wi-Fi 联盟),再增加几年。对于现成的广泛可用支持,很可能是 post 2020 恕我直言。
[*]:
顺便说一句,长期愿景用例和市场远远超出智能手机。这是物联网。而不是 "wearable IOT" 或其他流行的消费电子产品。想想要监控的无线传感器工业网络 plants/infrastructures/buildings。消费电子只是尝鲜,冰山一角嘛。
我一直在尝试使用 WifiManager 进行扫描并获取范围内的 wifi 列表。我希望能够在地图上绘制这些。返回的结果似乎没有任何类型的 属性 可供我用于纬度或经度。
WifiManager 不会为您提供任何类型的位置数据。您必须使用 LocationManager。 LocationManager 将根据用户的 GPS 和附近的 Wifi 网络提供位置数据。
见NETWORK_PROVIDER - This provider determines location based on availability of cell tower and WiFi access points. Results are retrieved by means of a network lookup.
简答:
这是不可能的。
各种 802.11 IEEE 标准(又名 Wi-Fi)本身都不允许在任何级别上这样做。 Wi-Fi 中没有地理位置概念。
要做到这一点,您必须依赖更高级别的协议,这些协议既不是强制性的,也没有在 all/most Wi-Fi AP 或 STA 中实施的广泛传播的标准,因此不够可靠真的很有用。
if TL;DR:
没有半真半假的可靠方法可以做到这一点(但有些人假装这样做),因为 2016 年的技术还不成熟。
但有些人正在努力改变这一点。
else:
长答案:
注1:
然而一些应用程序试图通过使用启发式方法来做到这一点,例如:
扫描时围绕自己旋转360度,
记录AP的Wi-Fi信号强度,应该与距离有关,
...并将其与扫描设备的地理位置相关联 - 通过 GPS 获得,或者通过附近的蜂窝天线塔获得,精度较低,可在在线数据库中找到,
...精细获取用户周围AP地图
请注意,这是非常启发式的和不精确的。首先,Wi-Fi RSSI(接收信号强度)远非可靠的距离测量。例如:有墙吗?家具?周围的无线电噪音是多少?
还有,注2:
不过,用例在那里[*],所以市场在那里,所以为此付出了一些努力。
现在(2016 年),Wi-Fi 联盟(又名 WFA 又名 wi-fi.org)有一个工作组正在处理这个问题。
http://www.wi-fi.org/beacon/rolf-de-vegt/never-lost-indoors-the-promise-of-wi-fi-location
不过,首先,这是基于 Wi-Fi Fine Timing Measurement (FTM) protocol
,利用 IEEE 1588 (PTP
) 和 802.1AS (gPTP
),see here 均来自802.1(又名有线以太网)。而这个FTM还没有。
目前的目标只是测量节点的 距离。这样做的主要动机是 不是 地理位置,而是准确测量传播延迟,这对 video/audio 流媒体很重要:设备需要一个通用的挂钟才能能够同步播放,如果您一开始就不知道从一个节点传播到另一个节点需要多长时间,就无法共享这个公共时钟。
这个 Wi-Fi Fine Timing Measurement
工作组于 2014 年开始。从那个到发布完整的 IEEE 标准,在硅供应商的支持下,再到 firmware/OS 支持,再到您附近设备上的应用程序(以及最重要的是确保每个人都能与任何人一起玩的认证计划),好吧,你将不得不等待几年。这只是最基本的:准确测量 距离 - 没有地理因素。
所以去 "the promise of Wi-Fi location" 引用 WFA(Wi-Fi 联盟),再增加几年。对于现成的广泛可用支持,很可能是 post 2020 恕我直言。
[*]:
顺便说一句,长期愿景用例和市场远远超出智能手机。这是物联网。而不是 "wearable IOT" 或其他流行的消费电子产品。想想要监控的无线传感器工业网络 plants/infrastructures/buildings。消费电子只是尝鲜,冰山一角嘛。