Appearance
IP查询返回的经纬度到底准不准?误差有多大
有个人找我做个小程序,要求是"根据IP定位到用户的准确位置,误差不能超过100米"。我当场就给他泼了盆冷水:这事儿IP做不到,神仙也做不到。
现在很多IP查询接口都会返回经纬度,比如IP9返回的 lng 和 lat。但"有经纬度"和"经纬度准"是两码事,今天聊聊这个坑。
这个经纬度到底是什么
先说结论: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