Anleitungen

Formulareingaben auf einen Lieferradius beschränken

Ein Lieferdienst, der nur ein bestimmtes Gebiet abdeckt, braucht eine Möglichkeit, Adressen außerhalb dieses Gebiets abzulehnen, bevor eine Bestellung aufgegeben wird, und nicht erst, wenn ein Fahrer es bei der Disposition bemerkt.

Die übermittelte Adresse geokodieren

Wenn ein Kunde seine Lieferadresse absendet, geokodieren Sie sie, bevor Sie die Bestellung annehmen.

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": {}}
  ]
}

Vergleich mit Ihrem Standort

Mit den Koordinaten des Kunden und den festen Koordinaten Ihres Lieferstandorts berechnen Sie in Ihrem eigenen Code mit der üblichen Haversine-Formel die Luftlinienentfernung zwischen beiden und vergleichen sie mit Ihrem Lieferradius.

distance_km = haversine(hub_lat, hub_lon, 51.5033, -0.1276)
if distance_km > max_radius_km:
    reject_order()

Die Konfidenz prüfen, bevor Sie ablehnen

Ein niedriger Konfidenzwert beim Geokodierungsergebnis bedeutet, dass die Adresse selbst mehrdeutig war, nicht unbedingt, dass sie außerhalb Ihres Radius liegt. Behandeln Sie einen Treffer mit niedriger Konfidenz getrennt von einer eindeutigen Ablehnung wegen Überschreitung des Radius, etwa indem Sie den Kunden bitten, seine Adresse zu bestätigen oder zu präzisieren, statt die Bestellung sofort abzulehnen.

Ein zweites Beispiel: den nächstgelegenen von mehreren Standorten wählen

Ein Unternehmen mit mehr als einem Lieferstandort sollte die Entfernung zu jedem Standort berechnen, nicht nur zu einem, und die Bestellung annehmen, wenn der Radius irgendeines Standorts die Adresse abdeckt. Wird die Bestellung dem Standort zugewiesen, der am nächsten liegt, ist aus derselben Berechnung auch die Abwicklungsseite korrekt eingerichtet, denn nach dem Sortieren nach Entfernung kennen Sie den passenden Standort bereits.

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()

Ein häufiger Fehler, den Sie vermeiden sollten

Lehnen Sie eine Bestellung nicht in dem Moment ab, in dem distance_km den Wert max_radius_km um eine Kleinigkeit überschreitet, etwa um ein paar Dutzend Meter, ohne dem Kunden eine Erklärung oder einen Ausweg zu bieten. Eine Adresse, die praktisch auf der Grenzlinie liegt, ist ein normales Ergebnis, wenn man einen Radius auf eine Karte zeichnet, und eine pauschale Ablehnung ohne Kontext wirkt willkürlich auf einen Kunden, der zwei Straßen außerhalb einer Linie wohnt, die er nicht sehen kann. Die berechnete Entfernung und den abgedeckten Radius anzuzeigen statt einer bloßen Ablehnung erklärt zumindest, warum.

Luftlinienradius oder tatsächliches Liefergebiet

Ein Luftlinienradius ist eine einfache Annäherung und schließt gelegentlich einen Punkt ein, der über die Straße gesehen eigentlich weit entfernt ist, oder schließt einen aus, der über die Straße nah, in Luftlinie aber weit entfernt liegt, etwa auf der anderen Seite eines Flusses ohne Brücke in der Nähe. Für die meisten Prüfungen von Liefergebieten ist diese Annäherung gut genug, und eine weitere Verfeinerung würde Routingdaten erfordern, die über das hinausgehen, was eine Geokodierungsabfrage liefert.

Was es kostet

Jede Adressprüfung ist eine Geokodierungsanfrage, oder eine Anfrage pro verglichenem Standort, wenn Sie die Adresse über separate Aufrufe mit einer Standortliste abgleichen, statt dieselben Koordinaten lokal wiederzuverwenden, denn nur die Adresse selbst muss geokodiert werden, nicht jeder Standort. Ein Lieferformular, das jede eingehende Bestellung prüft, bleibt bei einem typischen lokalen Unternehmen deutlich innerhalb der 2.500 kostenlosen Anfragen pro Tag, die in jedem Schlüssel enthalten sind, und greift erst dann auf Prepaid-Guthaben zurück, wenn das Bestellvolumen erheblich wächst.

Eine Bestellung außerhalb des Gebiets beim Absenden abzulehnen statt bei der Disposition, erspart beiden Seiten später ein unnötiges Gespräch. Alle Parameterdetails finden Sie in der Dokumentation zur Geokodierung, die aktuellen Preisstufen auf der Preisseite.