Optimieren der Kontingentnutzung beim Geocoding

Geocoding ist der Vorgang der Konvertierung von Adressen ("1600 Amphitheatre Parkway, Mountain View, CA") in geografische Koordinaten (37.423021, -122.083739), die Sie verwenden können, um Markierungen zu setzen oder die Karte zu positionieren. Die Google Maps Platform APIs bieten zwei Geocoding-Methoden:

  • Clientseitiges Geocoding, das im Browser ausgeführt und normalerweise als Reaktion auf die Nutzeraktion ausgeführt wird. Die Maps JavaScript API bietet Klassen, die die Anfragen für Sie stellen. Dieser Ansatz wird in der Maps JavaScript API-Dokumentation beschrieben.
  • Serverseitiges Geocoding, bei dem dein Server die Geocoding-Server von Google direkt 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. Serverseitiges Geocoding wird in der Dokumentation zur Geocoding API beschrieben.

Beispiele für clientseitiges und serverseitiges Geocoding

Hier ein Beispiel für die clientseitige Geocodierung, bei der eine Adresse geocodiert, die Mitte der Karte an 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 findest du in der Maps JavaScript API-Dokumentation.

Hier ein Beispiel, in dem mit Python eine serverseitige Geocoding-Anfrage ausgeführt wird:

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)

jsongeocode = response.read()

Hierdurch wird ein JSON-Objekt mit folgendem Inhalt erstellt:

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "California",
      "short_name": "CA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

Der serverseitige Geocoder stellt auch ein XML-Format als Alternative zu JSON bereit. Weitere Beispiele finden Sie in der Geocoding API-Dokumentation und in den Clientbibliotheken für Python und andere Sprachen.

Hinweise zu Kontingenten und Kosten

Die in diesem Dokument beschriebenen Strategien für Geocoding-Kosten, Kontingente und Ratenbegrenzungen fördern die Strategien.

Kosten

Limits pro Kontingent (Cost-per-Day, QPD) werden nicht mehr für Geocoding-Anfragen verwendet. Stattdessen wird jede Geocoding-Anfrage, egal ob clientseitig oder serverseitig über den Geocoding API-Webdienst, pro Preis abgerechnet. Wenn Sie die Nutzungskosten verwalten möchten, sollten Sie Ihr tägliches Kontingent begrenzen.

Ratenlimits

Der Geocoding-Dienst ist auf 50 Abfragen pro Sekunde begrenzt und wird als Summe der clientseitigen und serverseitigen Abfragen berechnet.

Wenn Sie clientseitige Geocoding-Anfragen in regelmäßigen Abständen ausführen, z. B. in einer mobilen App, geben Ihre Anfragen möglicherweise Fehler zurück, wenn alle Nutzer gleichzeitig Anfragen senden (z. B. alle in der gleichen 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). Anfragen sollten für alle Nutzer zufällig sein.
  • Verwende bei der Entwicklung für Android einen ungenauen wiederkehrenden Wecker.
  • Wähle bei der Entwicklung für Android eine geeignete Standortstrategie aus.

Caching

Weitere Informationen zum Caching findest du unter Geocoding API-Richtlinien.

Wann sollte clientseitiges Geocoding verwendet werden?

Die Kurzantwort lautet „fast immer“. Hierfür gibt es folgende Gründe:

  • Clientseitige Anfragen und Antworten ermöglichen eine schnellere, interaktivere Nutzung.
  • Eine clientseitige Anfrage kann Informationen enthalten, die die Geocoding-Qualität verbessern: Nutzersprache, Region und Darstellungsbereich.

Clientseitiges Geocoding eignet sich am besten, wenn Adressen anhand der Eingabe des Nutzers geocodiert werden.

Es gibt zwei Basisarchitekturen für clientseitiges Geocoding:

  • Sie führen den Geocoding-Vorgang und die Darstellung vollständig im Browser durch. Der Nutzer gibt beispielsweise eine Adresse auf deiner Seite ein. Diese wird von Ihrer Anwendung geocodiert. Ihre Seite verwendet dann den Geocode, um eine Markierung auf der Karte zu erstellen. Oder Ihre App führt eine einfache Analyse mit dem Geocoding durch. Es werden keine Daten an den Server gesendet, wodurch die Datenlast auf dem Server reduziert wird.
  • Sie führen den Geocoding-Vorgang im Browser durch und senden ihn dann an den Server. Angenommen, der Nutzer gibt eine Adresse auf Ihrer Seite ein. Ihre Anwendung geocodiert sie im Browser. Die App sendet die Daten dann an den Server. Der Server antwortet mit einigen Daten, z. B. POIs in der Nähe. So kannst du eine Antwort an deine eigenen Daten anpassen.

Wann sollte serverseitiges Geocoding verwendet werden?

Die serverseitige Geocodierung eignet sich am besten für Anwendungen, bei denen Sie Adressen ohne Eingabe von einem Client geocodieren müssen. Ein gängiges Beispiel ist ein Dataset, das von der Nutzereingabe unabhängig ist, z. B. wenn Sie einen festen, endlichen und bekannten Satz von Adressen haben, die Geocoding erforderlich sind. Die serverseitige Geocodierung kann auch als Sicherung nützlich sein, wenn die clientseitige Geocodierung fehlschlägt.

Mögliche Bedenken sind ein unnötiger Anstieg der Latenz für den Nutzer und Geocoding-Ergebnisse, die eine geringere Qualität als clientseitig haben, da weniger Informationen in der Anfrage verfügbar sind.