用边界情况而不只是理想路径来测试位置数据
一个位于地图完善的市中心的地址,几乎无法告诉您系统如何处理乡村路线、有争议的边界或靠近两极的查询。请有意识地测试这些困难情况。
两组坐标在纸面上看起来可能完全相同,但根据来源不同,含义可能截然不同。一组可能是设备站在确切地点时直接读取的 GPS 数据。另一组可能是某个城市的中心点,之所以返回它,是因为对于一个不完整或含糊的地址来说,这是能找到的最佳匹配。作为裸数字打印出来时,两者看起来同样精确。只有附带的元数据才能告诉您,哪一组可以真正信赖并用于精细的使用场景。
这就是为什么只要坐标的来源和精度对您正在构建的东西有影响,“只用 lat 和 lon 就行”就是一种真正的过度简化。一组坐标本身不携带任何信息,无法说明它是如何得出的、代表多大的面积,或者来源对这次匹配有多大把握。不论来源,把每一组坐标都视为同样权威,正是应用程序悄悄做出决策的方式,例如安排配送路线或触发基于位置的警报,而其依据实际上只是覆盖整个城市的近似值,而不是一个具体的点。
这正是 precision 和 confidence 字段要填补的空白。精度告诉您生成该坐标的是哪种匹配:门牌、街道、邮政编码还是城市,这直接意味着这个点大致代表多大的现实区域。置信度告诉您这次匹配本身有多大把握,与其精度等级无关。两者结合,就把一组裸坐标变成了您真正可以据以推理的东西:不只是“这里有一个点”,而是“这里有一个点,这是它大致声称的精度,这是我们对这一说法正确性的把握程度”。
对于任何在服务之间存储或传递坐标的系统,值得养成的实用习惯是:让精度和置信度与原始数字一起传递,而不是只传递数字本身。如果一组坐标在没有这些上下文的情况下被传入数据库、队列或其他内部服务,下游的任何使用者都将失去就信任程度做出明智判断的能力,而且很可能默认把它当作比实际更精确的数据,因为单独一组坐标无法提供任何相反的信号。
正是出于这个原因,我们的正向和逆向端点返回的每一个地理编码结果,都会在坐标旁附带 type、precision 和 confidence。把这些内容全部传过您自己的管道,而不只是纬度和经度,才能让更下游的任何系统做出与您的应用在最初查询时同样有依据的判断。