用边界情况而不只是理想路径来测试位置数据
一个位于地图完善的市中心的地址,几乎无法告诉您系统如何处理乡村路线、有争议的边界或靠近两极的查询。请有意识地测试这些困难情况。
在同一座城市,拿两部使用不同移动运营商的手机,查询它们的公网 IP 地址。两次查询很有可能都返回一个注册在距离两部手机数百公里之外的数据中心的 IP。这既不是手机的问题,也不是地理定位服务的问题。这是运营商级 NAT,通常称为 CGNAT,几乎所有移动网络都普遍采用这种做法。
CGNAT 之所以存在,是因为移动运营商没有足够的公网 IPv4 地址分配给每一台联网设备。于是,运营商为每台设备分配一个私有地址,并在中央网关通过一个共享的公网 IP 池转发其流量,有时一整个地区甚至整个国家只通过少数几个出口点提供服务。从外部看,这些设备中的每一台在同一时刻都可能与成千上万的其他用户共用一个 IP。
对地理定位的直接影响是:移动 IP 地址往往标识的是运营商网关的位置,而不是手机的实际位置。位于某个城市的手机,看起来可能是从该运营商恰好设置 NAT 池的地方连接的,这可能是最近的主要枢纽,而不是用户的真实位置。这与固网的情况不同,固网的 IP 更可能与靠近用户的某个特定地区交换局相关联。
这是蜂窝网络上基于 IP 的定位一个已知且普遍存在的局限,并非某一家查询服务商所特有。无论由哪家地理定位服务进行查询,情况都一样,因为限制在于运营商如何路由流量,而不在于位置数据如何编制。
实际的结论是:对于解析到移动运营商 ASN 的 IP 地址,应预期结果较为粗略,通常只到地区或国家级别,并把来自移动网段的城市级结果视为合理估计,而不是已确认的位置。如果您的应用确实需要知道移动设备在哪里,设备自身的 GPS 永远优于 IP 地理定位,因为它直接测量位置,而不是从网络路由推断。对移动流量使用基于 IP 的查询时,应发挥其可靠之处:识别运营商、国家,通常还有地区,而把更精细的结果当作可获得的最佳估计,而不是事实。