Skip to content

IP查询返回的经纬度到底准不准?误差有多大

有个人找我做个小程序,要求是"根据IP定位到用户的准确位置,误差不能超过100米"。我当场就给他泼了盆冷水:这事儿IP做不到,神仙也做不到。

现在很多IP查询接口都会返回经纬度,比如IP9返回的 lnglat。但"有经纬度"和"经纬度准"是两码事,今天聊聊这个坑。

这个经纬度到底是什么

先说结论:IP查询返回的经纬度,是IP所在网络的"代表位置",一般取的是城市中心点或者运营商机房的坐标,不是用户手机或电脑的真实坐标。

比如你查 58.30.0.0,返回的 lng: 116.41, lat: 39.93,这是北京的中心坐标。也就是说,只要你的IP在北京范围内,查出来的可能都是这一组数。

所以别指望它精确到"你家楼下",它给你的是一张"大概在哪个城市"的答案。

误差大概有多大

分几种情况:

  • 家庭宽带用户:通常能定位到城市,误差几公里到几十公里,取决于数据粒度。
  • 手机流量用户:前面说过,IPv4出口常集中在省市级,误差可能到上百公里;IPv6会好一些。
  • 机房/IDC IP:这个反而准,因为机房在哪座城市是固定的,误差就一个城市内。
  • VPN/代理:这种查出来是代理服务器的位置,跟用户本人八竿子打不着。

我拿真实数据对比过,城市级定位的准确率能做到99%左右(IP9公布的中国城市准确率是99.2%),但经纬度精确到"点"的准确率,没有任何一家敢保证

什么场景能用,什么场景不能用

能用:

  • 判断用户大概在哪个省哪个市;
  • 画一张用户分布的热力图(按城市聚合);
  • 做同城推荐、展示访问来源地。

不能用:

  • 精确找人、精确到门牌号;
  • 判断"人在不在店里/家里"这种需要GPS的场景;
  • 任何误差必须小于几百米的业务。

想要更准,得靠别的手段

如果业务真的需要精确位置,正道是:

  • 用户授权的前提下用GPS、WiFi、基站定位(H5地理定位);
  • 让用户手动选城市;
  • 用IP定位做"第一跳"粗筛,再结合别的信号精修。

IP定位的正确打开方式是:当它是一层粗筛,而不是最终答案。

顺带说个字段

很多接口还会返回 big_area(大区,比如华北、华南),这个用来做区域维度统计挺方便,比拿经纬度再算要省事。做数据看板的时候直接用这个字段分组就好。

小结

一句话:IP经纬度=城市中心坐标,准到城市级是正常,准到米级是妄想。 做项目前先把期望值摆正,省得到上线了再被用户投诉"定位不准"。

想体验一下接口返回的经纬度长啥样,可以访问:https://ip9.com.cn/get?ip=58.30.0.0