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.
Un servicio de reparto que solo cubre una zona determinada necesita una forma de rechazar las direcciones que quedan fuera de esa zona antes de que se haga el pedido, no después de que un repartidor lo descubra durante el despacho.
Cuando un cliente envíe su dirección de entrega, geocodifícala antes de aceptar el pedido.
GET /v1/forward?q=10 Downing Street, London&limit=1{
"status": "ok",
"results": [
{"formatted": "10 Downing Street, London, UK", "lat": 51.5033, "lon": -0.1276, "type": "address", "precision": "house", "confidence": 0.96, "place_id": "op678", "components": {}}
]
}Con las coordenadas del cliente y las coordenadas fijas de tu centro de distribución, calcula la distancia en línea recta entre ambas con una fórmula del haversine estándar en tu propio código y compárala con tu radio de entrega.
distance_km = haversine(hub_lat, hub_lon, 51.5033, -0.1276)
if distance_km > max_radius_km:
reject_order()Una puntuación de confianza baja en el resultado de geocodificación significa que la propia dirección era ambigua, no necesariamente que quede fuera de tu radio. Gestiona una coincidencia de baja confianza por separado de un rechazo claro por estar fuera del radio, por ejemplo pidiendo al cliente que confirme o precise su dirección en lugar de rechazar el pedido directamente.
Un negocio con más de un centro de distribución debería calcular la distancia a todos los centros, no solo a uno, y aceptar el pedido si el radio de cualquiera de ellos cubre la dirección. Asignar el pedido al centro que resulte más cercano también deja bien preparada la parte de preparación de pedidos con el mismo cálculo, ya que conoces el centro ganador en cuanto ordenas por distancia.
nearest_hub = min(hubs, key=lambda h: haversine(h.lat, h.lon, cust_lat, cust_lon))
if nearest_hub.distance_km > nearest_hub.max_radius_km:
reject_order()No rechaces un pedido en el instante en que distance_km supere max_radius_km por una cantidad insignificante, como unas pocas decenas de metros, sin dar al cliente ninguna explicación ni alternativa. Una dirección situada prácticamente sobre la línea del límite es un resultado normal de trazar un radio en un mapa, y un rechazo tajante sin contexto le parece arbitrario a un cliente que vive a dos calles de una línea que no puede ver. Mostrar la distancia calculada y el radio cubierto, en lugar de un simple rechazo, al menos explica el motivo.
Un radio en línea recta es una aproximación sencilla y en ocasiones incluirá un punto que técnicamente está lejos por carretera, o excluirá uno que está cerca por carretera pero lejos en línea recta, como al otro lado de un río sin ningún puente cercano. Para la mayoría de las comprobaciones de zona de reparto, esta aproximación es suficiente, y refinarla más requeriría datos de rutas que van más allá de lo que ofrece una consulta de geocodificación.
Cada comprobación de dirección es una solicitud de geocodificación, o una solicitud por cada centro candidato comparado si compruebas la dirección contra una lista de centros mediante llamadas separadas en lugar de reutilizar las mismas coordenadas en local, ya que solo hay que geocodificar la propia dirección, no cada centro. Un formulario de reparto que comprueba cada pedido enviado se mantiene holgadamente dentro de las 2.500 solicitudes gratuitas al día incluidas con cada clave en un negocio local típico, y solo pasa a crédito prepago cuando el volumen de pedidos crece considerablemente.
Rechazar un pedido fuera de zona en el momento del envío del formulario, y no en el despacho, ahorra a ambas partes una conversación inútil más adelante. Todos los detalles de los parámetros están en la documentación de geocodificación directa, y los niveles de precios actuales están en la página de precios.