Optimieren der Kontingentnutzung beim Geocoding

Geocoding bezeichnet die Umwandlung von Adressen („1600 Amphitheatre Parkway, Mountain View, CA“) in geografische Koordinaten (37.423021, -122.083739), mit denen Sie Markierungen oder die Karte positionieren können. Die Google Maps Platform APIs bieten zwei Möglichkeiten für die Geocodierung:

  • Clientseitiges Geocoding, das im Browser in der Regel als Reaktion auf eine Nutzeraktion ausgeführt wird. 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 Geocoding auf HTTP: Damit kann dein Server die Geocoding-Methoden direkt von den Google-Servern abrufen. Die Geocoding API ist der Webdienst, der diese Funktion bietet. Normalerweise binden Sie diesen Dienst in anderen Code ein, der serverseitig ausgeführt wird. Serverseitiges Geocoding wird in der Geocoding API-Dokumentation beschrieben.

Beispiele für clientseitiges und serverseitiges Geocoding

Hier sehen Sie ein Beispiel für die clientseitige Geocodierung, bei der eine Adresse aufgenommen, 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 finden Sie in der Dokumentation zur Maps JavaScript API.

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 JSON-Format 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, Geocoding-Kosten, Kontingente und Ratenbegrenzungen beeinflussen die Strategien.

Kosten

Pro Tag gelten keine Begrenzungen mehr für Geocoding-Anfragen. 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.

Ratenbegrenzungen

Der Geocoding-Dienst ist auf 3.000 Anfragen pro Minute (Abfragen pro Minute) begrenzt und wird als Summe der clientseitigen und serverseitigen Abfragen berechnet.

Wenn clientseitige Geocoding-Anfragen in regelmäßigen Abständen ausgeführt werden, z. B. in einer mobilen App, können bei Anfragen, die alle gleichzeitig gesendet werden, Fehler zurückgegeben werden, etwa alle Sekunden pro 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 werden zufällig für die gesamte Nutzerbasis gestellt.
  • Verwende bei der Entwicklung für Android einen unpräzise wiederkehrenden Wecker.
  • Wenn du für Android entwickelst, wähle eine geeignete Standortstrategie aus.

Caching

Caching-Richtlinien

Wann sollte clientseitiges Geocoding verwendet werden?

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

  • Clientseitige Anfragen und Antworten bieten Nutzern eine schnellere, interaktivere Oberfläche.
  • Eine clientseitige Anfrage kann Informationen zur Verbesserung der Geocoding-Qualität enthalten: Nutzersprache, Region und Darstellungsbereich.

Die clientseitige Geocodierung ist insbesondere am besten geeignet, 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. Danach wird für die Seite mit dem Geocode eine Markierung auf der Karte erstellt. Ihre App kann auch eine einfache Analyse mit dem Geocode durchführen. 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. mit POIs in der Nähe. So können Sie eine Antwort auf der Grundlage Ihrer eigenen Daten anpassen.

Wann sollte serverseitiges Geocoding verwendet werden?

Serverseitiges Geocoding 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 unabhängig von einer Nutzereingabe ist, z. B. ein fester, begrenzter und bekannter Satz von Adressen, die geocodiert werden müssen. Das serverseitige Geocoding kann auch als Sicherung nützlich sein, wenn clientseitiges Geocoding fehlschlägt.

Mögliche Bedenken sind eine unnötige Zunahme der Latenz für den Nutzer und das Geocoding von Ergebnissen von geringerer Qualität als clientseitig, da weniger Informationen in der Anfrage verfügbar sind.