Optymalizacja wykorzystania limitu podczas geokodowania

Geokodowanie to proces konwersji adresów („1600 Amphitheatre Parkway, Mountain View, CA”) na współrzędne geograficzne (37.423021, -122.083739), których możesz użyć do umieszczenia znaczników lub położenia mapy. Interfejsy API Google Maps Platform można wykorzystywać do geokodowania na 2 sposoby:

  • Geokodowanie po stronie klienta, które jest wykonywane w przeglądarce, zwykle w odpowiedzi na działanie użytkownika. Maps JavaScript API udostępnia klasy, które wysyłają żądania za Ciebie. Tę metodę opisaliśmy w dokumentacji interfejsu Maps JavaScript API.
  • Geokodowanie po stronie serwera HTTP, które umożliwia serwerowi wysyłanie zapytań o kody geograficzne na serwery Google. Interfejs Geocoding API to usługa internetowa, która udostępnia tę funkcję. Zwykle integruje się tę usługę z innym kodem, który jest uruchamiany po stronie serwera. Geokodowanie po stronie serwera zostało opisane w dokumentacji interfejsu Geocoding API.

Przykłady geokodowania po stronie klienta i po stronie serwera

Oto przykład geokodowania po stronie klienta. Polega on na przesłaniu adresu, jego geokodowaniu, przesuwaniu centrum mapy do danej lokalizacji i dodaniu do niego znacznika mapy:

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
    });
  }
});

Więcej przykładów znajdziesz w dokumentacji interfejsu Maps JavaScript API.

Oto przykład żądania geokodowania po stronie serwera za pomocą Pythona:

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

Spowoduje to utworzenie obiektu JSON z następującą zawartością:

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

Geokoder po stronie serwera udostępnia też format XML zamiast formatu JSON. Więcej przykładów znajdziesz w dokumentacji interfejsu Geocoding API oraz bibliotekach klienta dla Pythona i innych języków.

Kwestie związane z limitami i kosztami

Koszty, limity i ograniczenia stawek geokodowania są wykorzystywane przy tworzeniu strategii opisanych w tym dokumencie.

Koszt

Limity dzienne (QPD) nie są już używane do żądań geokodowania. Zamiast tego każde żądanie geokodowania, zarówno wykonywane po stronie klienta, jak i po stronie serwera za pomocą usługi sieciowej interfejsu Geocoding API, jest rozliczane według cen. Aby zarządzać kosztami użytkowania, rozważ ograniczenie dziennego limitu.

Ograniczenia liczby żądań

Częstotliwość korzystania z usługi geokodowania jest ograniczona do 3000 zapytań na minutę (QPM) i jest ona obliczana jako suma zapytań po stronie klienta i serwera.

Gdy okresowo uruchamiasz żądania geokodowania po stronie klienta, np. w aplikacji mobilnej, mogą one zwracać błędy, jeśli wszyscy użytkownicy wysyłają żądania w tym samym czasie (np. w tej samej sekundzie co minutę). Aby tego uniknąć, wykonaj jedną z tych czynności:

Zapisywanie w pamięci podręcznej

Informacje na temat buforowania znajdziesz w zasadach interfejsu Geocoding API.

Kiedy używać geokodowania po stronie klienta

Krótka odpowiedź to „prawie zawsze”. Przyczyny są następujące:

  • Żądania i odpowiedzi po stronie klienta zapewniają użytkownikom szybsze i bardziej interaktywne funkcje.
  • Żądanie po stronie klienta może zawierać informacje, które poprawiają jakość geokodowania: język użytkownika, region i widoczny obszar.

Geokodowanie po stronie klienta sprawdza się szczególnie w przypadku geokodowania adresów na podstawie danych wejściowych użytkownika.

Istnieją 2 podstawowe architektury geokodowania po stronie klienta:

  • Wykonaj geokodowanie i cały ekran w przeglądarce. Na przykład użytkownik wpisuje adres na Twojej stronie. Aplikacja koduje ją geograficznie. Następnie strona używa geokodu do utworzenia znacznika na mapie. Aplikacja wykonuje też proste analizy z użyciem geokodu. Żadne dane nie są wysyłane na serwer. Zmniejsza to obciążenie serwera.
  • Wykonaj geokodowanie w przeglądarce, a potem wyślij ją na serwer. Na przykład użytkownik wpisuje adres na Twojej stronie. Aplikacja koduje ją geograficznie w przeglądarce. Następnie wysyła dane na Twój serwer. W odpowiedzi serwer przekazuje pewne dane, takie jak ciekawe miejsca w pobliżu. Pozwoli Ci to dostosować odpowiedź na podstawie Twoich danych.

Kiedy używać geokodowania po stronie serwera

Geokodowanie po stronie serwera najlepiej sprawdza się w aplikacjach, które wymagają geokodowania adresów bez wprowadzania danych przez klienta. Typowym przykładem jest pobieranie zbioru danych, który działa niezależnie od danych wejściowych użytkownika, np. gdy masz stały, ograniczony i znany zestaw adresów, które wymagają geokodowania. Geokodowanie po stronie serwera może być też przydatne w sytuacjach, gdy geokodowanie po stronie klienta się nie powiedzie.

Możliwe przyczyny to niepotrzebne wydłużenie czasu oczekiwania po stronie użytkownika oraz wyniki geokodowania gorszej jakości niż po stronie klienta ze względu na mniejszą ilość informacji dostępnych w żądaniu.