在达到限制之前监控密钥用量
随时关注配额响应头,就能在请求真正被拒绝之前,提前知道何时即将达到限制。
两个地址之间的距离并不是地理编码 API 直接返回的内容,因为距离计算只需要坐标,而正向端点已经会为您发送的任何地址返回坐标。
分别对每个地址进行地理编码,或在一次批量请求中一起处理,为每个地址获取一对经纬度。
POST /v1/forward
Content-Type: application/json
["221B Baker Street, London", "10 Downing Street, London"]{
"status": "ok",
"results": [
{"formatted": "221B Baker Street, London, UK", "lat": 51.5237, "lon": -0.1585, "type": "address", "precision": "house", "confidence": 0.95, "place_id": "abc123", "components": {}},
{"formatted": "10 Downing Street, London, UK", "lat": 51.5033, "lon": -0.1276, "type": "address", "precision": "house", "confidence": 0.96, "place_id": "op678", "components": {}}
]
}有了两对坐标之后,套用标准的 haversine 公式,它会把纬度和经度的差值换算成沿地球表面的直线距离。大多数编程语言都有小巧且经过充分测试的 haversine 实现,以简短函数或常用库的形式提供,因此无需从零编写三角函数计算。
distance_km = haversine(51.5237, -0.1585, 51.5033, -0.1276)haversine 公式要求纬度和经度以弧度表示,但 API 响应中的坐标始终以度为单位。把度数直接代入为弧度编写的公式,得到的距离乍看似乎合理,实际上却悄悄地错了很大的倍数。请先把度转换为弧度,或者使用注明所需单位的库函数,并在将结果用于生产环境之前,用一个您已知的距离进行核对。
同样的计算可以自然地扩展到两个以上的点。在一次批量请求中对路线上的每个站点进行地理编码,然后把每一对相邻坐标之间的 haversine 距离相加,就能得到路线的大致总长度,即使在还没有真正的逐向导航路线规划之前,也可以用于快速估算配送路线。
total_km = haversine(a, b) + haversine(b, c) + haversine(c, d)haversine 计算得出的是直线距离,而不是沿实际道路的驾车或步行距离。对于大多数用途,例如对附近地点排序或估算大致远近,直线距离已经足够,而且除了您已有的坐标之外不需要任何其他数据。如果您确实需要按路线计算的行程距离,那是另一类计算,不在地理编码查询所提供的范围之内。
位于反子午线两侧或非常靠近极点的两个点,可能会让一个没有考虑经度从 180 绕回到负 180 的简单距离公式出错。在典型的地址到地址距离检查中这种情况很少见,但如果您的应用确实覆盖地球的这一部分,就值得对此进行测试。
对两个地址进行地理编码需要消耗两次请求,无论是作为两次单独调用发送,还是作为一次批量调用发送。一旦拿到两对坐标,距离计算本身完全在您自己的代码中进行,不会再消耗您的任何配额。
如果其中某个地址您之前已经进行过地理编码并缓存下来,那么只有新地址需要一次新的请求,这次计算的成本就从两次请求降为一次。
对于任何尚未解析为坐标的地址,距离计算只需一次地理编码请求。有关完整的响应结构,请参阅正向地理编码文档。