关于网页定位的那些事

112 阅读4分钟

前提:本文只探讨关于 Web 网页的定位技术,前提是无法获取或没有权限拿到手机 GPS 定位数据的情况,使用场景为PC网站、手机浏览器等运行环境。

  • IP定位
  • 浏览器定位
  • 第三方定位服务
  • 测试结果

1、IP定位

这个是最常用的定位方式,优点是使用简单方便快捷,可以满足基于城市层级的定位需求,如某些 APP 首页默认展示当前城市数据,当未获得 GPS 定位权限时,一般都是基于IP定位。

比如常用的一些免费 IP 离线数据包,可以快速灵活的实现基本定位需求。

另外补充一个查询特别精准的站点,但是不提供 api 接口,并且每天限20个 IP 查询量,我个人感觉查询结果特别精准,这个站点作者是一个LBS爱好者,推荐看看作者对于 IP 定位的一些说明(www.chaipip.com/help.html)

2、浏览器定位

基于 HTML5 Geolocation 的定位接口,主要使用手机基站和 WiFi 数据定位,目前在国内基本是无法使用的,原因是谷歌相关的服务无法在国内访问。注意:目前大部分浏览器都必须在 https 下才能调用,否则会直接提示失败。

由于在国内无法使用在此就不浪费太多时间了。

API

Geolocation.getCurrentPosition() :检索设备的当前位置。

Geolocation.watchPosition() :注册一个处理程序函数,每次设备位置更改时都会自动调用该函数,并返回更新的位置。

3、第三方定位服务

推荐使用第三方定位服务,平台都有免费使用额度(服务端定位接口:高德企业认证300w次/天、腾讯企业认证300w次/天、百度企业认证30w次/天),一般的应用场景都足够使用了。

后端定位:

  • 高德地图
  • 腾讯地图
    • 支持 IPv4 和 IPv6 地址定位。
    • 定位精度范围不是固定的,最高精确到区/县,最低精确到国家。
    • 目前无法覆盖所有IP,会存在定位失败的情况。
    • 接口文档:lbs.qq.com/service/web…
  • 百度地图

前端定位:

  • 高德地图
    • 融合了浏览器定位、高精度IP定位、安卓定位sdk辅助定位等多种手段,提供了获取当前准确位置、获取当前城市信息、持续定位(浏览器定位)等功能。
    • 默认情况下,PC 端优先使用精确 IP 定位,解决多数浏览器无法完成定位的现状,IP定位失败后使用浏览器定位;手机端优先使用浏览器定位,失败后使用IP定位;对于安卓 WebView 页面的开发者,可以结合定位 sdk 进行辅助定位。
    • 接口文档:lbs.amap.com/api/javascr…
  • 腾讯地图
  • 百度地图
    • 融合了浏览器定位、IP定位、安卓定位SDK辅助定位等多种手段,提供了获取当前准确位置、获取当前城市信息等功能。
    • 浏览器定位精度和性能依赖浏览器自身特性,IP定位的精度值为城市级别。
    • 对于安卓WebView页面的开发者,可以结合定位SDK进行辅助定位。
    • 接口文档:lbsyun.baidu.com/index.php?t…

4、测试结果

由于没找到腾讯地图的前端定位接口,以下仅基于后端 IP 定位接口测试,分别使用 WiFi 和手机数据网络的 IP 测试。

  • 高德地图
    • WiFi: 省+市,如:山东省淄博市
    • 移动4G: 省+市,如:山东省淄博市
  • 腾讯地图
    • WiFi: 省+市+区,如:山东省淄博市张店区
    • 移动4G: 省+市,如:山东省淄博市
  • 百度地图
    • WiFi: 省+市,如:山东省淄博市
    • 移动4G: 省+市,如:山东省淄博市

以上测试数据样本太少仅供参考。 其中,腾讯地图对 WiFi IP 识别精度更高(测试了两个运营商联通+移动,数据均一致),可以返回三级地区数据,其它两个平台只能返回二级城市。

现在基本是人手 1+ 部手机,大量的应用场景会依赖 GPS 高精度定位,由于网页定位的精度相对较低,更加限制了其使用的场景,网页定位的场景未来肯定越来越少。

不过随着隐私保护的日趋完善,相信网页定位仍然会有部分使用场景,不会完全失去其价值。