Opis
Geokodowanie to proces przekształcania adresów (np. „1600 Amphitheatre Parkway, Mountain View, CA”) na współrzędne geograficzne (np. szerokość 37.423021 i długość geograficzną -122.083739), których możesz użyć do umieszczenia znaczników lub położenia mapy.
Odwrotne geokodowanie to proces przekształcania współrzędnych geograficznych na adres zrozumiały dla człowieka (patrz Odwrotne geokodowanie (wyszukiwanie adresu)).
Możesz też użyć geokodera, aby znaleźć adres dla danego identyfikatora miejsca.
Interfejs Maps JavaScript API udostępnia klasę geokodera do geokodowania i odwrotnego geokodowania na podstawie danych wejściowych użytkownika. Jeśli zamiast tego chcesz geokodować statyczne, znane adresy, zapoznaj się z usługą internetową do geokodowania.
Pierwsze kroki
Zanim skorzystasz z usługi Geocoding w interfejsie Maps JavaScript API, sprawdź, czy interfejs Geocoding API jest włączony w konsoli Google Cloud w tym samym projekcie, który został skonfigurowany na potrzeby Maps JavaScript API.
Aby wyświetlić listę włączonych interfejsów API:
- Otwórz konsolę Google Cloud.
- Kliknij przycisk Wybierz projekt, a następnie wybierz projekt skonfigurowany na potrzeby interfejsu Maps JavaScript API i kliknij Otwórz.
- Na liście interfejsów API w panelu znajdź Geocoding API.
- Jeśli widzisz interfejs API na liście, nie musisz nic robić. Jeśli interfejsu API nie ma na liście, włącz go:
- Aby wyświetlić kartę Biblioteka, u góry strony wybierz WŁĄCZ API. Możesz też wybrać Biblioteka w menu po lewej stronie.
- Wyszukaj Geocoding API, a potem wybierz go z listy wyników.
- Wybierz WŁĄCZ. Po zakończeniu procesu Geocoding API pojawi się na liście interfejsów API w panelu.
Ceny i zasady
Ceny
16 lipca 2018 roku zaczęliśmy obowiązywać nowy abonament rozliczany według wykorzystania. W przypadku Map, tras i Miejsc Google obowiązuje nowy abonament. Aby dowiedzieć się więcej o nowych cenach i limitach wykorzystania usługi JavaScript Geocoding, zapoznaj się z sekcją Korzystanie i płatności dotyczącą interfejsu Geocoding API.
Zasady
Korzystanie z usługi Geocoding musi być zgodne z zasadami opisanymi dla interfejsu Geocoding API.
Żądania geokodowania
Dostęp do usługi Geocoding jest asynchroniczny, ponieważ interfejs Google Maps API musi wywoływać serwer zewnętrzny. Dlatego musisz przekazać metodę wywołania zwrotnego, która zostanie wykonana po zakończeniu żądania. Ta metoda wywołania zwrotnego przetwarza wyniki. Pamiętaj, że geokoder może zwrócić więcej niż jeden wynik.
Dostęp do usługi geokodowania interfejsu API Map Google w kodzie możesz uzyskać za pomocą obiektu konstruktora google.maps.Geocoder
. Metoda Geocoder.geocode()
inicjuje żądanie do usługi geokodowania, przekazując go literał obiektu GeocoderRequest
zawierający hasła wejściowe i metodę wywołania zwrotnego, która jest wykonywana po otrzymaniu odpowiedzi.
Literał obiektu GeocoderRequest
zawiera te pola:
{ address: string, location: LatLng, placeId: string, bounds: LatLngBounds, componentRestrictions: GeocoderComponentRestrictions, region: string }
Wymagane parametry: musisz podać jedno i tylko jedno z tych pól:
address
– adres, na który chcesz geokodować.
lub
location
–LatLng
(lubLatLngLiteral
), dla którego chcesz uzyskać najbliższy, czytelny dla człowieka adres. Geokoder wykonuje odwrotny geokoder. Więcej informacji znajdziesz na stronie o odwrotnym geokodowaniu.
lub
placeId
– identyfikator miejsca, dla którego chcesz uzyskać najbliższy, czytelny dla człowieka adres. Dowiedz się więcej o pobieraniu adresu dla identyfikatora miejsca.
Parametry opcjonalne:
bounds
–LatLngBounds
, w którym lepiej oddziałuje na wyniki geokodu. Parametrbounds
będzie miał wpływ tylko na wyniki generowane przez geokodera, a nie jego pełne ograniczenie. Więcej informacji o promowaniu widocznego obszaru znajdziesz poniżej.componentRestrictions
– umożliwia ograniczenie wyników do konkretnego obszaru. Więcej informacji o filtrowaniu komponentów znajdziesz poniżej.region
– kod regionu, określony jako dwuznakowy (nienumeryczny) podtag regionu Unicode. W większości przypadków tagi te są odwzorowywane bezpośrednio na dwuznakowe wartości domeny ccTLD („domena najwyższego poziomu”). Parametrregion
ma wpływ tylko na wyniki generowane przez geokodera, a nie jego pełne ograniczanie. Więcej informacji o promowaniu kodu regionu znajdziesz poniżej.
Odpowiedzi na geokodowanie
Usługa Geocoding wymaga metody wywołania zwrotnego po pobraniu wyników geokodera. To wywołanie zwrotne powinno przekazywać 2 parametry umożliwiające przechowywanie kodów results
i status
(w tej kolejności).
Wyniki geokodowania
Obiekt GeocoderResult
reprezentuje jeden wynik geokodowania. Żądanie geokodu może zwrócić wiele obiektów wyników:
results[]: { types[]: string, formatted_address: string, address_components[]: { short_name: string, long_name: string, postcode_localities[]: string, types[]: string }, partial_match: boolean, place_id: string, postcode_localities[]: string, geometry: { location: LatLng, location_type: GeocoderLocationType viewport: LatLngBounds, bounds: LatLngBounds } }
Poniżej objaśniamy te pola:
types[]
to tablica wskazująca typ adresu zwracanego wyniku. Ta tablica zawiera zbiór 0 lub więcej tagów identyfikujących typ cechy zwracanej w wyniku. Na przykład geokod „Chicago” zwraca ciąg „locality”, który wskazuje, że „Chicago” to miasto, i dodatkowo „polityczne”, które wskazuje, że podmiot polityczny. Więcej informacji o typach adresów i typach komponentów adresu znajdziesz poniżej.formatted_address
to ciąg znaków zawierający czytelny dla człowieka adres tej lokalizacji.Często jest to równoważny adres pocztowy. Pamiętaj, że w niektórych krajach (np. w Wielkiej Brytanii) nie można rozpowszechniać prawdziwych adresów pocztowych ze względu na ograniczenia licencyjne.
Sformatowany adres logicznie składa się z co najmniej jednego komponentu adresu. Na przykład adres „111 8th Aleja, Nowy Jork, Nowy Jork” składa się z tych komponentów: „111” (numer domu), „8 Aleja” (trasa), „Nowy Jork” (miasto) i „NY” (stan w USA).
Nie analizuj sformatowanego adresu automatycznie. Zamiast tego należy używać poszczególnych komponentów adresu, które oprócz sformatowanego pola adresu zawierają odpowiedź interfejsu API.
address_components[]
to tablica zawierająca osobne komponenty mające zastosowanie do tego adresu.Każdy komponent adresu zwykle zawiera te pola:
types[]
to tablica wskazująca typ komponentu adresu. Zobacz listę obsługiwanych typów.long_name
to pełny opis lub nazwa składnika adresu zwracanego przez geokodera.short_name
to skrócona nazwa tekstowa komponentu adresu, jeśli jest dostępna. Na przykład składnik adresu dla stanu Alaska może mieć atrybutlong_name
o nazwie „Alaska” oraz wartośćshort_name
w polu „AK” z dwuliterowym skrótem pocztowym.
Zwróć uwagę na te informacje na temat tablicy
address_components[]
:- Tablica komponentów adresu może zawierać więcej komponentów niż
formatted_address
. - Tablica nie musi zawierać wszystkich podmiotów politycznych z adresem (oprócz tych uwzględnionych w elemencie
formatted_address
). Aby pobrać wszystkie jednostki polityczne, które mają określony adres, użyj odwrotnego geokodowania, podając szerokość i długość geograficzną adresu jako parametr w żądaniu. - Nie możemy zagwarantować, że format odpowiedzi będzie taki sam między żądaniami. Liczba
address_components
różni się w zależności od żądanego adresu i może się z czasem zmieniać dla tego samego adresu. Komponent może zmieniać pozycję w tablicy. Typ komponentu może się zmieniać. Konkretnego komponentu może brakować w późniejszej odpowiedzi.
Więcej informacji o typach adresów i typach komponentów adresu znajdziesz poniżej.
-
partial_match
oznacza, że geokoder nie zwrócił dokładnego dopasowania do pierwotnego żądania, mimo że udało się dopasować część żądanego adresu. Warto sprawdzić w pierwotnej prośbie, czy adres nie zawiera błędów pisowni lub zawiera niepełny adres.Dopasowania częściowe najczęściej występują w przypadku adresów, które nie występują w rejonie podanym w żądaniu. Dopasowania częściowe mogą zostać zwrócone, gdy żądanie pasuje do co najmniej 2 lokalizacji w tym samym rejonie. Na przykład zapytanie „Hillpar St, Bristol, UK” zwróci częściowe dopasowanie zarówno do ulicy Henry, jak i Henrietta Street. Pamiętaj, że jeśli żądanie zawiera komponent adresu z błędną pisownią, usługa geokodowania może zaproponować alternatywny adres. Sugestie uruchamiane w ten sposób będą również oznaczane jako dopasowania częściowe.
place_id
to unikalny identyfikator miejsca, którego można używać z innymi interfejsami API Google. Możesz na przykład użyć obiektuplace_id
z biblioteką interfejsu Google Places API, aby uzyskać szczegółowe informacje o firmie lokalnej, takie jak numer telefonu, godziny otwarcia, opinie użytkowników itp. Zobacz omówienie identyfikatorów miejsc.postcode_localities[]
to tablica określająca wszystkie miejscowości w danym kodzie pocztowym. Jest widoczna tylko wtedy, gdy wynik to kod pocztowy obejmujący wiele miejscowości.geometry
zawiera następujące informacje:location
zawiera geokodowaną wartość szerokości i długości geograficznej. Zwracamy tę lokalizację jako obiektLatLng
, a nie sformatowany ciąg znaków.location_type
przechowuje dodatkowe dane o określonej lokalizacji. Obecnie obsługiwane są te wartości:ROOFTOP
oznacza, że zwrócony wynik odzwierciedla dokładny geokod.- Wartość
RANGE_INTERPOLATED
wskazuje, że zwrócony wynik odzwierciedla przybliżone (zwykle na drodze) interpolację między 2 precyzyjnymi punktami (np. skrzyżowaniami). Wyniki z interpolacji są zwykle zwracane, gdy geokody dachowe są niedostępne w przypadku adresu. GEOMETRIC_CENTER
wskazuje, że zwrócony wynik jest geometrycznym środkiem wyniku, np. linia łamana (na przykład ulica) lub wielokątem (region).APPROXIMATE
wskazuje, że zwrócony wynik jest przybliżony.
viewport
przechowuje zalecany widoczny obszar dla zwróconego wyniku.bounds
(zwracany opcjonalnie) przechowujeLatLngBounds
, który może zawierać pełny wynik. Pamiętaj, że te granice mogą się różnić od zalecanego widocznego obszaru. Na przykład San Francisco obejmuje wyspy Farallona, które technicznie są częścią miasta, ale nie powinny być zwracane w widocznym obszarze.
Adresy będą zwracane przez Geocoder z użyciem ustawienia języka preferowanego w przeglądarce lub języka określonego podczas wczytywania JavaScriptu interfejsu API za pomocą parametru language
. (Więcej informacji znajdziesz w artykule o
lokalizacji).
Typy adresów i typy komponentów adresu
Tablica types[]
w GeocoderResult wskazuje typ adresu. Tablica types[]
może też być zwracana w elemencie GeocoderAddressComponent, aby wskazać typ określonego komponentu adresu. Adresy zwracane przez geokodera mogą mieć kilka typów.
Na przykład wiele miast jest oznaczonych tagami typu political
i locality
.
Geokoder obsługuje i zwraca te typy zarówno w przypadku typów adresów, jak i typów komponentów adresu:
street_address
wskazuje dokładny adres.route
wskazuje nazwaną trasę (np. „E701”).intersection
oznacza główne skrzyżowanie, które obejmuje zwykle 2 główne drogi.political
oznacza podmiot polityczny. Ten typ oznacza zwykle wielokąt związany z administracją cywilną.country
oznacza krajowy podmiot polityczny i zwykle jest najwyższym typem porządku zwracanym przez Geocoder.administrative_area_level_1
oznacza podmiot cywilny pierwszego rzędu poniżej poziomu kraju. W Stanach Zjednoczonych te poziomy administracyjne są stanami. Nie we wszystkich krajach obowiązują te poziomy administracyjne. W większości przypadków krótkie nazwy są zbliżone do nazw z normą ISO 3166-2 i innych często rozpowszechnianych list. Nie możemy tego jednak zagwarantować, ponieważ wyniki geokodowania opierają się na różnych sygnałach i danych o lokalizacji.administrative_area_level_2
oznacza podmiot cywilny drugiego rzędu poniżej poziomu kraju. W Stanach Zjednoczonych te poziomy administracyjne są hrabstwami. Nie we wszystkich krajach obowiązują te poziomy administracyjne.administrative_area_level_3
oznacza podmiot cywilny trzeciego rzędu poniżej poziomu kraju. Ten typ oznacza niewielki podział cywilny. Nie we wszystkich krajach obowiązują te poziomy administracyjne.administrative_area_level_4
oznacza podmiot cywilny czwartego rzędu poniżej poziomu kraju. Ten typ oznacza niewielki podział cywilny. Nie we wszystkich krajach obowiązują te poziomy administracyjne.administrative_area_level_5
oznacza podmiot cywilny piątego rzędu poniżej poziomu kraju. Ten typ oznacza niewielki podział cywilny. Nie we wszystkich krajach obowiązują te poziomy administracyjne.administrative_area_level_6
oznacza podmiot cywilny szóstego rzędu poniżej poziomu kraju. Ten typ oznacza niewielki podział cywilny. Nie we wszystkich krajach obowiązują te poziomy administracyjne.administrative_area_level_7
oznacza podmiot cywilny siódmego rzędu poniżej poziomu kraju. Ten typ oznacza niewielki podział cywilny. Nie we wszystkich krajach obowiązują te poziomy administracyjne.colloquial_area
wskazuje często używaną nazwę alternatywną jednostki.locality
oznacza miejskie podmioty polityczne.sublocality
wskazuje podmiot cywilny pierwszego rzędu poniżej rejonu. W przypadku niektórych lokalizacji może zostać wyświetlony jeden z dodatkowych typów: odsublocality_level_1
dosublocality_level_5
. Każdy poziom podrejonu jest podmiotem cywilnym. Większe liczby oznaczają mniejszy obszar geograficzny.neighborhood
wskazuje nazwę okolicypremise
oznacza nazwaną lokalizację, zwykle budynek lub zespół budynków o wspólnej nazwiesubpremise
oznacza element pierwszego rzędu pod nazwaną lokalizacją, zwykle pojedynczy budynek należący do zespołu budynków o wspólnej nazwieplus_code
oznacza zakodowane odniesienie do lokalizacji na podstawie szerokości i długości geograficznej. Kody plus mogą zastąpić adresy ulic w miejscach, w których one nie istnieją (gdzie budynki nie są ponumerowane lub ulice nie mają nazw). Więcej informacji znajdziesz na stronie https://plus.codes.postal_code
wskazuje kod pocztowy używany w danym kraju do adresowania przesyłek pocztowych.natural_feature
wskazuje ważny obiekt naturalny.airport
oznacza lotnisko.park
wskazuje park nazwany.point_of_interest
wskazuje nazwane miejsce. Takie ważne miejsca to zwykle doskonałe lokalne jednostki, których nie da się łatwo przypisać do innych kategorii, takich jak „Empire State Building” czy „wieża Eiffla”.
Pusta lista typów oznacza, że nie ma znanych typów dla danego komponentu adresu (np. Lieu-dit we Francji).
Oprócz powyższych typów komponenty adresu mogą też obejmować poniższe typy.
Uwaga: ta lista nie jest pełna i może ulec zmianie.
floor
wskazuje piętro w adresie budynku.- Typ
establishment
zwykle oznacza miejsce, które nie zostało jeszcze sklasyfikowane. landmark
wskazuje miejsce w pobliżu, które jest używane jako punkt odniesienia, aby ułatwić nawigację.point_of_interest
wskazuje nazwane miejsce.parking
oznacza parking lub strukturę parkingową.post_box
wskazuje konkretną skrytkę pocztową.postal_town
oznacza grupę obszarów geograficznych, np.locality
isublocality
, używaną w adresach pocztowych w niektórych krajach.room
wskazuje salę, w której znajduje się adres budynku.street_number
wskazuje dokładny numer ulicy.bus_station
,train_station
itransit_station
wskazują lokalizację przystanku autobusowego, pociągu lub transportu publicznego.
Kody stanu
Kod status
może zwracać jedną z tych wartości:
"OK"
oznacza, że nie wystąpiły żadne błędy. Adres został pomyślnie przeanalizowany i zwrócono co najmniej jeden geokod."ZERO_RESULTS"
oznacza, że geokod został przetworzony pomyślnie, ale nie zwrócił żadnych wyników. Może się tak zdarzyć, jeśli geokoder przekazał nieistniejący obiektaddress
."OVER_QUERY_LIMIT"
oznacza, że przekraczasz limit."REQUEST_DENIED"
oznacza, że Twoja prośba została odrzucona. Na stronie nie można używać geokodera.- Parametr
"INVALID_REQUEST"
zwykle wskazuje, że brakuje zapytania (address
,components
lublatlng
). "UNKNOWN_ERROR"
oznacza, że nie udało się przetworzyć żądania z powodu błędu serwera. Jeśli spróbujesz ponownie, żądanie może zostać zrealizowane."ERROR"
oznacza, że upłynął limit czasu żądania lub wystąpił problem z połączeniem z serwerami Google. Jeśli spróbujesz ponownie, żądanie może zostać zrealizowane.
W tym przykładzie geokodujemy adres i umieszczamy znacznik w zwróconych wartościach szerokości i długości geograficznej. Pamiętaj, że moduł obsługi jest przekazywany jako literał funkcji anonimowej.
var geocoder; var map; function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(-34.397, 150.644); var mapOptions = { zoom: 8, center: latlng } map = new google.maps.Map(document.getElementById('map'), mapOptions); } function codeAddress() { var address = document.getElementById('address').value; geocoder.geocode( { 'address': address}, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } <body onload="initialize()"> <div id="map" style="width: 320px; height: 480px;"></div> <div> <input id="address" type="textbox" value="Sydney, NSW"> <input type="button" value="Encode" onclick="codeAddress()"> </div> </body>
Promowanie widocznego obszaru
Możesz poinstruować usługę Geocoding, aby preferowała wyniki w danym widocznym obszarze (wyrażanym w ramce ograniczającej). Aby to zrobić, ustaw parametr bounds
w literale obiektu GeocoderRequest
w celu określenia granic tego widocznego obszaru. Pamiętaj, że promowanie tylko preferuje wyniki w obrębie tych granic. Jeśli poza tymi granicami są bardziej trafne wyniki, możemy je uwzględnić.
Na przykład geokod dla nazwy „Winnetka” zwykle zwraca to przedmieście Chicago:
{ "types":["locality","political"], "formatted_address":"Winnetka, IL, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["locality","political"] },{ "long_name":"Illinois", "short_name":"IL", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location":[ -87.7417070, 42.1083080], "location_type":"APPROXIMATE" }, "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q" }
Jednak określenie parametru bounds
definiującego ramkę ograniczającą dolinę San Fernando w Los Angeles powoduje, że ten geokod zwraca dzielnicę „Winnetka” w tej lokalizacji:
{ "types":["sublocality","political"], "formatted_address":"Winnetka, California, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["sublocality","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_3","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "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"] }], "geometry":{ "location": [34.213171,-118.571022], "location_type":"APPROXIMATE" }, "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ" }
Promowanie kodu regionu
Za pomocą parametru region
możesz ustawić usługę Geocoding, aby zwracała wyniki uporządkowane względem konkretnego regionu. Ten parametr przyjmuje kod regionu, określony jako dwuznakowy (nienumeryczny) podtag regionu Unicode. Te tagi są odwzorowywane bezpośrednio na dwuznakowe wartości domeny ccTLD („domena najwyższego poziomu”), takie jak „pl” w domenie „co.uk”. W niektórych przypadkach tag region
obsługuje też kody ISO-3166-1, które czasami różnią się od wartości domeny ccTLD (np. „GB” w przypadku słowa „Wielka Brytania”).
Gdy używasz parametru region
:
- Podaj tylko 1 kraj lub region. Wiele wartości zostanie zignorowanych, co może spowodować nieudane żądanie.
- Używaj tylko dwuznakowych podtagów regionów (format Unicode CLDR). Wszystkie inne dane wejściowe będą powodować błędy.
- Obsługiwane są tylko kraje i regiony wymienione w szczegółach zasięgu Google Maps Platform.
Żądania geokodowania można wysyłać do każdej domeny, w której główna aplikacja Map Google oferuje geokodowanie. Pamiętaj, że promowanie tylko preferuje wyniki z konkretnej domeny. Jeśli poza tą domeną są bardziej trafne wyniki, możemy je uwzględnić.
Na przykład geokod dla hasła „Toledo” zwraca ten wynik, ponieważ domyślną domeną usługi Geocoding są Stany Zjednoczone:
{ "types":["locality","political"], "formatted_address":"Toledo, OH, USA", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Ohio", "short_name":"OH", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw" }
Geokod dla „Toledo” z polem region
ustawionym na 'es'
(Hiszpania) zwróci hiszpańskie miasto:
{ "types":["locality","political"], "formatted_address":"Toledo, España", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Toledo", "short_name":"TO", "types":["administrative_area_level_2","political"] },{ "long_name":"Castilla-La Mancha", "short_name":"CM", "types":["administrative_area_level_1","political"] },{ "long_name":"España", "short_name":"ES", "types":["country","political"] }], "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y" }
Filtrowanie komponentów
Za pomocą filtra komponentów możesz ustawić w usłudze Geocoding Service zwracanie wyników adresów ograniczonych do określonego obszaru. Określ filtr w parametrze
componentRestrictions
. Wartości filtrów obsługują te same metody korekty pisowni i dopasowania częściowego co inne żądania geokodowania.
Geokoder zwraca tylko wyniki pasujące do wszystkich filtrów komponentów. Oznacza to, że specyfikacja filtra jest oceniana za pomocą operatora ORAZ, a nie LUB.
Filtr komponentów składa się z co najmniej jednego z tych elementów:
route
pasuje do długiej lub krótkiej nazwy trasy.locality
dopasowań do typów lokalnych i podrejonów.administrativeArea
odpowiada wszystkim poziomom obszaru administracyjnego.postalCode
pasuje do kodów pocztowych i prefiksów kodów pocztowych.country
to nazwa kraju lub dwuliterowy kod kraju zgodny z normą ISO 3166-1. Uwaga: interfejs API jest zgodny ze standardem ISO przy definiowaniu krajów, a filtrowanie działa najlepiej, gdy używasz odpowiedniego kodu ISO kraju.
Poniższy przykład pokazuje, jak używać parametru
componentRestrictions
do filtrowania według właściwości country
i postalCode
:
function codeAddress() { geocoder.geocode({ componentRestrictions: { country: 'AU', postalCode: '2000' } }, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { window.alert('Geocode was not successful for the following reason: ' + status); } }); }
Odwrotne geokodowanie (wyszukiwanie adresu)
Termin geokodowanie zwykle oznacza tłumaczenie adresu zrozumiałego dla człowieka na lokalizację na mapie. Odwrotny proces, czyli przekształcenie lokalizacji na mapie na adres zrozumiały dla człowieka, to odwrotne geokodowanie.
Zamiast podawać tekstową wartość address
, w parametrze location
podaj rozdzieloną przecinkami parę szerokości i długości geograficznej.
Poniższy przykład geokodu określa wartość szerokości/długości geograficznej i wyśrodkowuje mapę na tej lokalizacji, wyświetlając okno informacyjne ze sformatowanym adresem:
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.731, lng: -73.997 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodeLatLng(geocoder, map, infowindow); } ); } function geocodeLatLng( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const input = (document.getElementById("latlng") as HTMLInputElement).value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.731, lng: -73.997 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodeLatLng(geocoder, map, infowindow); }); } function geocodeLatLng(geocoder, map, infowindow) { const input = document.getElementById("latlng").value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;
Wypróbuj fragment
Zwróć uwagę, że w poprzednim przykładzie pierwszy wynik pokazaliśmy, wybierając results[0]
. Odwrotny geokoder często zwraca więcej niż jeden wynik. Geokodowane adresy to nie tylko adresy pocztowe, ale też wszelkiego rodzaju nazwy geograficzne. Na przykład podczas geokodowania punktu w Chicago punkt geokodowany można oznaczyć jako ulicę i numer domu, miasto (Chicago), stan (Illinois) lub kraj (Stany Zjednoczone). Wszystkie to adresy do geokodera. Odwrotny geokoder zwraca wszystkie te wyniki.
Odwrotny geokoder dopasowuje podmioty polityczne (kraje, prowincje, miasta i dzielnice), adresy i kody pocztowe.
Oto przykład listy adresów, które może zwrócić zapytanie:
results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA" results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA" results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA" results[3].formatted_address: "Brooklyn, NY, USA" results[4].formatted_address: "New York, NY, USA" results[5].formatted_address: "Brooklyn, NY 11211, USA" results[6].formatted_address: "Kings County, NY, USA" results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA" results[8].formatted_address: "New York Metropolitan Area, USA" results[9].formatted_address: "New York, USA"
Adresy są zwracane w kolejności od największej do najmniejszej zgodności. Ogólnie rzecz biorąc, w tym przypadku najbardziej widoczny jest dokładny adres.
Zwracamy różnego rodzaju adresy – od najbardziej szczegółowych adresów po mniej szczegółowe podmioty polityczne, takie jak dzielnice, miasta, hrabstwa, stany itp. Jeśli chcesz dopasować bardziej ogólny adres, przejrzyj pole results[].types
.
Uwaga: odwrotne geokodowanie nie jest nauką ścisłą. Geokoder spróbuje znaleźć najbliższą, adresowaną lokalizację z zachowaniem określonej tolerancji.
Uzyskiwanie adresu dla identyfikatora miejsca
Podaj placeId
, aby znaleźć adres dla danego identyfikatora miejsca. Identyfikator miejsca to unikalny identyfikator, którego można używać z innymi interfejsami API Google. Aby uzyskać adres przyciąganego punktu, możesz na przykład podać wartość placeId
zwracaną przez Roads API. Więcej informacji o identyfikatorach miejsc znajdziesz w omówieniu identyfikatorów miejsc.
Gdy podasz placeId
, żądanie nie może zawierać żadnego z tych pól:
address
latLng
location
componentRestrictions
Poniższy przykład akceptuje identyfikator miejsca, znajduje odpowiedni adres i wyśrodkowuje mapę na tej lokalizacji. Wyświetli się też okno informacyjne ze sformatowanym adresem odpowiedniego miejsca:
TypeScript
// Initialize the map. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.72, lng: -73.96 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodePlaceId(geocoder, map, infowindow); } ); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const placeId = (document.getElementById("place-id") as HTMLInputElement) .value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// Initialize the map. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.72, lng: -73.96 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodePlaceId(geocoder, map, infowindow); }); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId(geocoder, map, infowindow) { const placeId = document.getElementById("place-id").value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;