Controla el uso de tu clave antes de alcanzar un límite
Vigilar las cabeceras de cuota sobre la marcha te indica cuándo te acercas a un límite, mucho antes de que se rechace realmente una solicitud.
La distancia entre dos direcciones no es algo que una API de geocodificación devuelva directamente, ya que para calcular una distancia solo hacen falta coordenadas, y el endpoint directo ya te las da para cualquier dirección que le envíes.
Geocodifica cada dirección por separado, o ambas juntas en una sola solicitud masiva, para obtener un par de latitud y longitud para cada una.
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": {}}
]
}Con los dos pares de coordenadas en la mano, aplica la fórmula estándar de haversine, que convierte la diferencia de latitud y longitud en una distancia en línea recta sobre la superficie de la Tierra. La mayoría de los lenguajes de programación tienen disponible una implementación de haversine pequeña y bien probada, ya sea como una función corta o en una biblioteca de uso común, así que no hace falta escribir la trigonometría desde cero.
distance_km = haversine(51.5237, -0.1585, 51.5033, -0.1276)La fórmula de haversine espera la latitud y la longitud en radianes, pero las coordenadas de una respuesta de la API siempre están en grados. Introducir valores en grados directamente en una fórmula escrita para radianes producirá una distancia que a primera vista parece plausible, pero que está equivocada por un factor considerable sin que se note. Convierte primero los grados a radianes, o usa una función de biblioteca que documente qué unidad espera, y comprueba el resultado con una distancia que ya conozcas antes de confiar en él en producción.
El mismo cálculo se extiende de forma natural a más de dos puntos. Geocodifica todas las paradas de una ruta en una sola solicitud masiva y luego suma la distancia de haversine entre cada par consecutivo de coordenadas para obtener una longitud total aproximada de la ruta, útil para estimar rápidamente una ruta de reparto incluso antes de tener implantado un cálculo de rutas real paso a paso.
total_km = haversine(a, b) + haversine(b, c) + haversine(c, d)Un cálculo de haversine da la distancia en línea recta, no la distancia en coche o a pie por carreteras reales. Para la mayoría de los usos, como ordenar ubicaciones cercanas o estimar una proximidad aproximada, la distancia en línea recta es suficiente y no necesita nada más que las coordenadas que ya tienes. Si necesitas específicamente la distancia de recorrido por una ruta, se trata de otro tipo de cálculo que queda fuera de lo que ofrece una consulta de geocodificación.
Dos puntos situados a lados opuestos del antimeridiano, o muy cerca de un polo, pueden confundir a una fórmula de distancia ingenua que no tenga en cuenta que la longitud salta de 180 a menos 180. Esto es raro en las comprobaciones típicas de distancia entre direcciones, pero conviene probarlo si tu aplicación abarca legítimamente esa parte del planeta.
Geocodificar dos direcciones cuesta dos solicitudes, tanto si se envían como llamadas separadas como en una sola llamada masiva. El cálculo de la distancia en sí, una vez que tienes ambos pares de coordenadas, se hace por completo en tu propio código y no consume nada más de tu cuota.
Si alguna de las direcciones ya la has geocodificado antes y la tienes en caché, solo la dirección nueva necesita una solicitud, lo que reduce el coste de ese cálculo concreto a una solicitud en lugar de dos.
Los cálculos de distancia están a una solicitud de geocodificación de distancia para cualquier dirección que aún no hayas convertido en coordenadas. Consulta la documentación de geocodificación directa para ver la estructura completa de la respuesta.