前提:本文只探讨关于 Web 网页的定位技术,前提是无法获取或没有权限拿到手机 GPS 定位数据的情况,使用场景为PC网站、手机浏览器等运行环境。
- IP定位
- 浏览器定位
- 第三方定位服务
- 测试结果
1、IP定位
这个是最常用的定位方式,优点是使用简单方便快捷,可以满足基于城市层级的定位需求,如某些 APP 首页默认展示当前城市数据,当未获得 GPS 定位权限时,一般都是基于IP定位。
比如常用的一些免费 IP 离线数据包,可以快速灵活的实现基本定位需求。
- ip2region:github.com/lionsoul201…
- 纯真ip库:github.com/out0fmemory…
- 国外geoip:geoip.com/
另外补充一个查询特别精准的站点,但是不提供 api 接口,并且每天限20个 IP 查询量,我个人感觉查询结果特别精准,这个站点作者是一个LBS爱好者,推荐看看作者对于 IP 定位的一些说明(www.chaipip.com/help.html)
- chaipip:www.chaipip.com/index.html
2、浏览器定位
基于 HTML5 Geolocation 的定位接口,主要使用手机基站和 WiFi 数据定位,目前在国内基本是无法使用的,原因是谷歌相关的服务无法在国内访问。注意:目前大部分浏览器都必须在 https 下才能调用,否则会直接提示失败。
由于在国内无法使用在此就不浪费太多时间了。
API
Geolocation.getCurrentPosition() :检索设备的当前位置。
Geolocation.watchPosition() :注册一个处理程序函数,每次设备位置更改时都会自动调用该函数,并返回更新的位置。
3、第三方定位服务
推荐使用第三方定位服务,平台都有免费使用额度(服务端定位接口:高德企业认证300w次/天、腾讯企业认证300w次/天、百度企业认证30w次/天),一般的应用场景都足够使用了。
后端定位:
- 高德地图
- 仅支持 IPV4,不支持国外 IP 解析。
- 接口文档:lbs.amap.com/api/webserv…
- 腾讯地图
- 支持 IPv4 和 IPv6 地址定位。
- 定位精度范围不是固定的,最高精确到区/县,最低精确到国家。
- 目前无法覆盖所有IP,会存在定位失败的情况。
- 接口文档:lbs.qq.com/service/web…
- 百度地图
- 支持 IPv4 和 IPv6 来获取位置信息,不支持海外场景。
- 接口文档:lbsyun.baidu.com/index.php?t…
前端定位:
- 高德地图
- 融合了浏览器定位、高精度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 高精度定位,由于网页定位的精度相对较低,更加限制了其使用的场景,网页定位的场景未来肯定越来越少。
不过随着隐私保护的日趋完善,相信网页定位仍然会有部分使用场景,不会完全失去其价值。