Beim Geocoding werden Adressen wie „1600 Amphitheatre Parkway, Mountain View, CA, USA“ in geografische Koordinaten (37.423021, -122.083739) umgewandelt. Anhand dieser Koordinaten können Sie dann Markierungen setzen oder die Karte positionieren. Die Google Maps Platform APIs bieten zwei Ansätze für das Geocoding:
- Clientseitiges Geocoding, das im Browser ausgeführt wird, in der Regel als Reaktion auf eine Nutzeraktion. Die Maps JavaScript API bietet Klassen, die die Anfragen für Sie stellen. Dieser Ansatz wird in der Dokumentation zur Maps JavaScript API beschrieben.
- Serverseitiges HTTP-Geocoding, mit dem Ihr Server Geocodes direkt von den Google-Servern abfragen kann. Die Geocoding API ist der Webdienst, der diese Funktion bereitstellt. Normalerweise binden Sie diesen Dienst in anderen Code ein, der serverseitig ausgeführt wird. Das serverseitige Geocoding wird in der Dokumentation zur Geocoding API beschrieben.
Beispiele für clientseitiges und serverseitiges Geocoding
Hier ist ein Beispiel für clientseitiges Geocoding, bei dem eine Adresse geocodiert, der Mittelpunkt der Karte auf diesen Ort verschoben und dort eine Kartenmarkierung hinzugefügt wird:
geocoder = new google.maps.Geocoder(); geocoder.geocode({ 'address': address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } });
Weitere Beispiele finden Sie in der Dokumentation zur Maps JavaScript API.
Hier ist ein Beispiel für eine serverseitige Geocoding-Anfrage mit Python in der Geocoding API v4:
import json import urllib.request address = "1600+Amphitheatre+Parkway,+Mountain+View,+CA" key = "my-key-here" url = f"https://geocode.googleapis.com/v4/geocode/address/{address}" headers = {"X-Goog-Api-Key": key} req = urllib.request.Request(url, headers=headers) with urllib.request.urlopen(req) as response: result = json.loads(response.read().decode("utf-8"))
Hierdurch wird ein JSON-Objekt mit folgendem Inhalt erstellt:
{ "results": [ { "place": "places/ChIJiSSC8QK6j4AR98Thup8mqTc", "placeId": "ChIJiSSC8QK6j4AR98Thup8mqTc", "location": { "latitude": 37.4224864, "longitude": -122.0855962 }, "granularity": "ROOFTOP", "viewport": { "low": { "latitude": 37.4211700197085, "longitude": -122.08691558029149 }, "high": { "latitude": 37.4238679802915, "longitude": -122.08421761970851 } }, "bounds": { "low": { "latitude": 37.4221145, "longitude": -122.0860002 }, "high": { "latitude": 37.4228775, "longitude": -122.085133 } }, "formattedAddress": "Google Building 41, 1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94043-1351", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1600 Amphitheatre Pkwy" ] }, "addressComponents": [ { "longText": "Google Building 41", "shortText": "Google Building 41", "types": [ "premise" ], "languageCode": "en" }, { "longText": "1600", "shortText": "1600", "types": [ "street_number" ] }, { "longText": "Amphitheatre Parkway", "shortText": "Amphitheatre Pkwy", "types": [ "route" ], "languageCode": "en" }, { "longText": "Mountain View", "shortText": "Mountain View", "types": [ "locality", "political" ], "languageCode": "en" }, { "longText": "Santa Clara County", "shortText": "Santa Clara County", "types": [ "administrative_area_level_2", "political" ], "languageCode": "en" }, { "longText": "California", "shortText": "CA", "types": [ "administrative_area_level_1", "political" ], "languageCode": "en" }, { "longText": "United States", "shortText": "US", "types": [ "country", "political" ], "languageCode": "en" }, { "longText": "94043", "shortText": "94043", "types": [ "postal_code" ] }, { "longText": "1351", "shortText": "1351", "types": [ "postal_code_suffix" ] } ], "types": [ "premise", "street_address" ] } ] }
Weitere Beispiele finden Sie in der Übersicht zur Geocoding API v4 und im Leitfaden Adresse geocodieren.
Überlegungen zu Kontingenten und Kosten
Die in diesem Dokument beschriebenen Strategien basieren auf den Kosten, Kontingenten und Ratenbegrenzungen für das Geocoding.
Kosten
Für Geocoding-Anfragen gelten keine Kontingentlimits pro Tag. Stattdessen wird jede Geocoding-Anfrage, ob clientseitig über den Browser oder serverseitig über den Geocoding API-Webdienst, pro Anfrage abgerechnet. Wenn Sie Ihre Nutzungskosten verwalten möchten, sollten Sie Ihre Nutzungslimits und Kontingente verwalten.
Ratenlimits
Für den Geocoding-Dienst gilt eine Ratenbegrenzung von 3.000 QPM (Abfragen pro Minute). Dieser Wert ist die Summe aus clientseitigen und serverseitigen Abfragen.
Wenn Sie clientseitige Geocoding-Anfragen in regelmäßigen Abständen ausführen, z. B. in einer mobilen App, können Fehler auftreten, wenn alle Nutzer gleichzeitig Anfragen stellen (z. B. alle in derselben Sekunde jeder Minute). Ziehen Sie eine der folgenden Lösungen in Betracht, um dies zu vermeiden:
- Führen Sie die Anforderungen in zufälligen Intervallen durch (Jitter). Achten Sie darauf, dass die Anfragen zufällig über Ihre gesamte Nutzerbasis verteilt sind.
- Wenn Sie für Android entwickeln, verwenden Sie einen ungenauen wiederkehrenden Alarm.
- Wenn Sie für Android entwickeln, wählen Sie eine geeignete Standortstrategie aus.
Caching
Weitere Informationen zum Caching finden Sie in den Richtlinien für die Geocoding API.
Serverseitige und clientseitige Architektur in v4 im Vergleich
Die Geocoding API v4 (einschließlich SearchDestinations, GeocodeAddress, GeocodeLocation und GeocodePlace) ist als Server-zu-Server-API konzipiert. Das Aufrufen von v4-Endpunkten von Ihrem Backend-Server bietet entscheidende Vorteile:
- Hyperlokale Ankunftsinformationen: Die Methode
SearchDestinations(POST /v4/geocode/destinations) ist ausschließlich über serverseitige REST- oder gRPC-Anfragen verfügbar und gibt Gebäudeeingänge, routingfähige Navigationspunkte, Gebäudeumrisse und nahe gelegene Sehenswürdigkeiten zurück, die in clientseitigen Browser-Geocodern nicht verfügbar sind. - Verbesserte API-Sicherheit: Durch serverseitige Aufrufe werden Ihre API-Schlüssel und OAuth-Tokens vor der Offenlegung in Clientbrowsern geschützt. Weitere Informationen finden Sie unter API-Sicherheit.
- Feldmasken für Antworten: Serverseitige v4-Endpunkte unterstützen Feldmasken. So können Sie nur die Felder anfordern, die Ihre Anwendung benötigt, um die Nutzlastgröße und Latenz zu minimieren.
Wann die clientseitige Browsersuche verwendet werden sollte
Für interaktive Browseranwendungen, die auf Live-Tastatureingaben reagieren, sollten Sie die clientseitige Place Autocomplete-Funktion (zur Mehrdeutigkeitsauflösung von Nutzereingaben und zum Abrufen einer Orts-ID) mit einem Backend-Aufruf von SearchDestinations oder GeocodePlace kombinieren, um hyperlokale Details oder Koordinaten sicher abzurufen.