Geokodowanie to proces przekształcania adresów ("1600 Amphitheatre Parkway, Mountain View, CA") na współrzędne geograficzne (37.423021, -122.083739), których można użyć do umieszczenia znaczników lub określenia pozycji mapy. Interfejsy API Google Maps Platform oferują geokodowanie na 2 sposoby:
- Geokodowanie po stronie klienta, które jest wykonywane w przeglądarce, zazwyczaj w odpowiedzi na działanie użytkownika. Interfejs Maps JavaScript API udostępnia klasy, które wysyłają żądania. To podejście opisano w dokumentacji interfejsu Maps JavaScript API.
- Geokodowanie po stronie serwera HTTP, które pozwala serwerowi wysyłać zapytania bezpośrednio do serwerów Google i na potrzeby geokodowania. Interfejs Geocoding API to usługa internetowa, która udostępnia tę funkcję. Zwykle integrujesz tę usługę z innym kodem działającym po stronie serwera. Geokodowanie po stronie serwera opisano w dokumentacji interfejsu Geocoding API.
Przykłady geokodowania po stronie klienta i serwera
Oto przykład transkodowania po stronie klienta, który pobiera adres, przetwarza go zgodnie z kodem geograficznym, przenosi środek mapy do tej lokalizacji i dodaje tam 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 w dokumentacji interfejsu Maps JavaScript API.
Oto przykład użycia żądania w języku Python do wykonania kodowania geograficznego po stronie serwera:
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()
W ten sposób powstaje obiekt JSON z następującą treś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 } } } } ] }
Koder po stronie serwera udostępnia też format XML jako alternatywę dla formatu JSON. Więcej przykładów znajdziesz w dokumentacji interfejsu Geocoding API i w bibliotekach klienta dla Pythona i innych języków.
Kwestie związane z limitami i kosztami
Koszty, limity i stawki dotyczące geokodowania są związane ze strategiami opisanymi w tym dokumencie.
Koszt
Limity dzienne (QPD) nie są już używane w żądaniach geokodowania. Każde takie żądanie – po stronie klienta w przeglądarce lub po stronie serwera za pomocą usługi internetowej Geocoding API – jest opłacane za każdą cenę. Aby zarządzać kosztami wykorzystania, możesz ograniczyć dzienny limit.
Ograniczenia liczby żądań
Usługa geokodowania jest ograniczona do 50 zapytań na sekundę (zapytania na sekundę). Jest obliczana jako suma zapytań po stronie klienta i serwera.
Uruchamiając żądania geokodowania po stronie klienta w okresowych odstępach, np. w aplikacji mobilnej, żądania mogą zwracać błędy, jeśli wszyscy użytkownicy wysyłają żądania w tym samym czasie (na przykład w tej samej sekundzie co minutę). Aby tego uniknąć, rozważ jedno z tych rozwiązań:
- Wprowadź losowe odstępy w żądaniach (zakłócenia). Upewnij się, że żądania są losowe w całej bazie użytkowników.
- Jeśli tworzysz aplikację na Androida, użyj niedokładnego cyklicznego alarmu.
- Jeśli tworzysz aplikację na Androida, wybierz odpowiednią strategię lokalizacji.
Zapisywanie w pamięci podręcznej
Informacje o pamięci podręcznej znajdziesz w zasadach interfejsu Geocoding API.
Kiedy używać geokodowania po stronie klienta
Krótka odpowiedź to „zawsze”" Możliwe przyczyny:
- Żądanie i odpowiedź po stronie klienta zapewniają użytkownikom szybsze i bardziej interaktywne treści.
- Żądanie po stronie klienta może zawierać informacje poprawiające jakość geokodowania: język użytkownika, region i widoczny obszar.
W szczególności najlepiej sprawdza się geokodowanie po stronie klienta, gdy adresy pochodzą z danych wejściowych użytkownika.
Istnieją 2 podstawowe architektury dla geokodowania po stronie klienta:
- Wykonaj geokodowanie i wyświetlacz w całości w przeglądarce. Na przykład użytkownik wpisuje adres na stronie. Aplikacja przetwarza dane geograficzne. Następnie na podstawie danych geograficznych stosujesz znacznik na mapie. Możesz też przeprowadzić prostą analizę aplikacji za pomocą geokodu. Na Twój serwer nie są wysyłane żadne dane. Zmniejsza to obciążenie serwera.
- Wykonaj geokodowanie w przeglądarce, a następnie wyślij je na serwer. Na przykład użytkownik wpisuje adres na stronie. Aplikacja zakoduje ją w przeglądarce. Aplikacja wysyła dane na serwer. W odpowiedzi serwer przesyła niektóre dane, np. ciekawe miejsca w pobliżu. Dzięki temu możesz dostosować odpowiedź na podstawie własnych 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 niezależnego 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ć również pomocne jako kopia zapasowa w przypadku awarii geokodowania po stronie klienta.
Powodem może być m.in. niepotrzebne zwiększenie czasu oczekiwania użytkownika oraz wyniki geokodowania niższej jakości niż po stronie klienta, bo w żądaniu jest dostępnych mniej informacji.