Optymalizacja wykorzystania limitu podczas geokodowania

Geokodowanie to proces konwertowania adresów ("1600" Amphitheatre Parkway, Mountain View, CA”) do współrzędnych geograficznych (37.423021, -122.083739), które można wykorzystać, aby umieścić znaczniki lub położenie mapy. Interfejsy API Google Maps Platform zapewniają dwa pod kątem geokodowania:

  • Geokodowanie po stronie klienta który jest wykonywany w przeglądarce, zazwyczaj w reakcji na działanie użytkownika. Interfejs Maps JavaScript API zapewnia klasy, które wysyłają żądania za Ciebie. Podejście to zostało opisane w Maps JavaScript API dokumentacji.
  • geokodowanie po stronie serwera HTTP, który pozwala serwerowi bezpośrednio wysyłać zapytania Serwery Google obsługujące geokody. Geocoding API to sieć usługę, która udostępnia tę funkcję. Zwykle integruje się za pomocą innego kodu, który działa po stronie serwera. Geokodowanie po stronie serwera jest opisany w Interfejs API geokodowania dokumentacji.

Przykłady geokodowania po stronie klienta i serwera

Oto przykład geokodowania po stronie klienta, który wymaga koduje go, przenosi środek mapy do tej lokalizacji i dodaje do niej znacznik 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 tutaj: Maps JavaScript API dokumentacji.

Oto przykład użycia Pythona do wykonania po stronie serwera geokodowanie:

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 o następującej 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 zapewnia również format XML jako alternatywę dla JSON. Więcej przykładów znajdziesz tutaj: Interfejs API geokodowania dokumentacji oraz biblioteki klienta dla Pythona i innych językach.

Limity i koszty

Koszty i limity liczby żądań geokodowania wspomagają strategie opisane w dokument.

Koszt

Limity dzienne (QPD) nie są już używane w przypadku żądań geokodowania. Zamiast tego każde żądanie geokodowania, zarówno po stronie klienta w przeglądarce, jak i po stronie serwera w Usługa sieciowa Geocoding API to rozlicza się z każdą ceną. Aby zarządzać kosztem użytkowania, weź pod uwagę ograniczenia dziennego limitu,

Ograniczenia liczby żądań

częstotliwość obsługi geokodowania jest ograniczona do 3000 zapytań na minutę (zapytania na minutę), oblicza się jako sumę zapytań po stronie klienta i po stronie serwera.

Podczas wykonywania żądań geokodowania po stronie klienta w okresowych odstępach czasu, na przykład w aplikacji mobilnej, żądania mogą zwracać błędy, jeśli wszyscy w tym samym czasie (np. wszystkie w tym samym czasie min). Aby tego uniknąć, wykonaj jedną z tych czynności:

  • Wprowadź do swoich żądań losowe interwały (zakłócenia). Sprawdź żądania są losowe w całej grupie użytkowników.
  • Jeśli tworzysz aplikację na Androida, użyj nieprecyzyjnego powtarzanie alarmu
  • Jeśli tworzysz aplikacje na Androida, wybierz odpowiednią lokalizację .

Zapisywanie w pamięci podręcznej

Zobacz Zasady interfejsu Geocoding API dotyczące buforowania.

Kiedy używać geokodowania po stronie klienta

W skrócie: „prawie zawsze”. Przyczyny są następujące:

  • Żądania i odpowiedzi po stronie klienta pozwalają przyspieszyć interaktywnych aplikacji dla użytkowników.
  • Żądanie po stronie klienta może zawierać informacje, które usprawniają geokodowanie jakość: język użytkownika, region i widoczny obszar.

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

Istnieją 2 podstawowe architektury geokodowania po stronie klienta:

  • Wykonaj geokodowanie i wyświetlaj treści w całości w przeglądarce. Przykład: użytkownik wpisuje adres na Twojej stronie. Aplikacja przetwarza dane geograficzne. Potem Twoja strona korzysta z kodu geograficznego do utworzenia znacznika na mapie. Lub Twoja aplikacja do przeprowadzenia prostej analizy za pomocą geokodu. Żadne dane nie są wysyłane na Twój serwer. Zmniejsza to obciążenie serwera.
  • Przeprowadź geokodowanie w przeglądarce, a następnie wyślij je na serwer. Na przykład użytkownik wpisuje adres na Twojej stronie. Twoja aplikacja koduje go w przeglądarce. Następnie aplikacja wysyła dane na Twój serwer. w odpowiedzi serwer przesyła w odpowiedzi określone dane, takie jak ciekawe miejsca w pobliżu. Ten pozwala dostosować odpowiedź na podstawie własnych danych.

Kiedy warto korzystać z geokodowania po stronie serwera

Geokodowanie po stronie serwera najlepiej sprawdza się w aplikacjach, wymagają geokodowania adresów bez danych wejściowych klienta. Typowy przykład gdy otrzymujesz zbiór danych niezależnie od danych wejściowych użytkownika, np. jeśli mamy stały, skończony i znany zbiór które wymagają geokodowania. Geokodowanie po stronie serwera może być również pomocny w przypadku niepowodzenia geokodowania po stronie klienta.

Jednym z potencjalnych problemów jest niepotrzebny wzrost czasu oczekiwania u użytkownika, i geokodowania są gorszej jakości niż po stronie klienta, ponieważ informacje są dostępne w żądaniu.