Usługa geokodowania

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Opis

Geokodowanie to proces konwersji adresów (np. &&tt; 1600 Amphitheatre Parkway, Mountain View, CA") na współrzędne geograficzne (np. szerokość geograficzna 37.423021 i długość geograficzna -122.083739), których możesz użyć do umieszczenia znaczników lub określenia położenia mapy.

Odwrotne geokodowanie to proces przekształcania współrzędnych geograficznych w zrozumiałe dla człowieka adresy (patrz Odwrotne geokodowanie (wyszukiwanie adresów)).

Możesz też użyć kodera, aby znaleźć adres dla danego identyfikatora miejsca.

Interfejs Maps JavaScript API udostępnia klasę Geocoder do geokodowania i odwrotnego geokodowania na podstawie danych wejściowych użytkownika. Jeśli chcesz określić kodowanie statycznego, znanego adresu, zajrzyj do usługi geokodowania.

Pierwsze kroki

Zanim użyjesz usługi Geocoding API w Maps JavaScript API, upewnij się, że interfejs Geocoding API jest włączony w Google Cloud Console w tym samym projekcie, który masz skonfigurowany dla Maps JavaScript API.

Aby wyświetlić listę włączonych interfejsów API:

  1. Otwórz Google Cloud Console.
  2. Kliknij przycisk Wybierz projekt, a potem wybierz ten sam projekt, który masz skonfigurowany w interfejsie Maps JavaScript API, i kliknij Otwórz.
  3. Na liście interfejsów API w panelu znajdź Geocoding API.
  4. Jeśli na liście widzisz interfejs API, nie musisz nic więcej robić. Jeśli interfejsu API nie ma na liście, włącz go:
    1. U góry strony wybierz ENABLE API (Włącz interfejs API), aby wyświetlić kartę Biblioteka. Możesz też wybrać Biblioteka z menu po lewej stronie.
    2. Wyszukaj Geocoding API, a następnie wybierz go z listy wyników.
    3. Wybierz WŁĄCZ. Gdy proces się zakończy, na liście interfejsów API w panelu pojawi się interfejs Geocoding API.

Ceny i zasady

Ceny

Od 16 lipca 2018 roku w Mapach, Trasach i Miejscach zaczyna obowiązywać nowy abonament. Więcej informacji o nowych limitach cenowych i limitach użytkowania dotyczących usługi geokodowania JavaScript znajdziesz w artykule Użycie i płatności za pomocą interfejsu Geocoding API.

Ograniczenia liczby żądań

Weź pod uwagę te ograniczenia dotyczące dodatkowych żądań:

Dodatkowa wartość limitu jest stosowana w przypadku każdej sesji użytkownika, niezależnie od tego, ilu użytkowników korzysta z tego samego projektu. Przy pierwszym wczytaniu interfejsu API przydzielany jest początkowy limit żądań. Gdy wykorzystasz ten limit, interfejs API wymusza ograniczenia liczby żądań w ciągu dodatkowych sekund. Jeśli w określonym czasie pojawi się zbyt wiele żądań, interfejs API zwróci kod odpowiedzi OVER_QUERY_LIMIT.

Limit liczby żądań na sesję uniemożliwia korzystanie z usług po stronie klienta w przypadku żądań zbiorczych, takich jak geokodowanie wsadowe. W przypadku żądań zbiorczych użyj usługi internetowej Geocoding API.

Zasady

Używanie usługi Geocoding musi być zgodne z zasadami opisanymi w interfejsie Geocoding API.

Prośby o geokodowanie

Dostęp do usługi geokodowania jest asynchroniczny, ponieważ interfejs API Map Google musi wywoływać serwer zewnętrzny. Z tego powodu musisz przekazać metodę wywołania zwrotnego, aby wykonać żądanie. Ta metoda wywołania zwrotnego przetwarza wyniki. Koder przetwarzający może zwrócić więcej niż 1 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ące obiekt literał GeocoderRequest zawierający warunki wejściowe i metodę wywołania zwrotnego do wykonania 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ć tylko jedno z tych pól:

  • address – adres, na który chcesz go przetworzyć;
    lub
    locationLatLng (lub LatLngLiteral), dla których chcesz uzyskać najbliższy adres czytelny dla człowieka. Koder przetwarza odwrotne kodowanie. Więcej informacji znajdziesz w artykule o odwrotnym geokodowaniu.
    lub
    placeId – identyfikator miejsca, dla którego chcesz uzyskać najbliższy, czytelny dla użytkownika adres. Dowiedz się więcej o pobieraniu adresu na potrzeby identyfikatora miejsca.

Parametry opcjonalne:

  • boundsLatLngBounds, w którym odchylenia wyników przetwarzania danych geograficznych są bardziej widoczne. Parametr bounds wpływa tylko na wyniki z kodera, ale nie jest w pełni ograniczony. Poniżej znajdziesz więcej informacji o odchyleniach widocznego obszaru poniżej.
  • componentRestrictions – pozwala ograniczyć wyniki do określonego obszaru. Więcej informacji o filtrowaniu komponentów znajdziesz poniżej.
  • region – kod regionu określony jako dwuznakowy (nienumeryczny) subtag regionu Unicode. W większości przypadków tagi te odpowiadają bezpośrednio znanym 2-znakowym wartościom ccTLD (domenie najwyższego poziomu). Parametr region wpływa tylko na wyniki z kodera. Poniżej znajdziesz więcej informacji o kursowaniu kodu regionu.

Odpowiedzi geokodowania

Usługa geokodowania wymaga metody wywołania zwrotnego po pobraniu wyników geokodera. Wywołanie zwrotne powinno przekazać 2 parametry do przechowywania kodu results i kodu status w tej kolejności.

Wyniki geokodowania

Obiekt GeocoderResult reprezentuje jeden wynik geokodowania. Żądanie geograficzne może zwracać 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
 }
}

Wyjaśniamy te pola:

  • types[] to tablica wskazująca typ adresu zwróconego wyniku. Ta tablica zawiera zestaw zero lub więcej tagów identyfikujących typ funkcji zwróconej w wyniku. Na przykład kod geograficzny "Chicago" powrót "locality" wskazuje, że "Chicago" jest miastem, a zwraca też „"political"”, który wskazuje, że jest to podmiot polityczny. Więcej informacji o typach adresów i ich typach znajdziesz poniżej.
  • formatted_address to ciąg znaków zawierający adres tej lokalizacji czytelny dla ludzi.

    Często jest to odpowiednik adresu pocztowego. Niektóre kraje, np. Wielka Brytania, nie zezwalają na dystrybucję prawdziwych adresów pocztowych ze względu na ograniczenia licencyjne.

    Sformatowany adres składa się logicznie z co najmniej 1 komponentu adresu. Na przykład adres &111 8th Avenue, Nowy Jork, NY" (numer domu), "8th Avenue" (trasa) "New York" (miasto) oraz "NY" (USA).

    Nie interpretuj sformatowanego adresu automatycznie. Zamiast tego użyj poszczególnych komponentów adresu, które wraz z sformatowanym polem adresu zawierają odpowiedź interfejsu API.

  • address_components[] to tablica zawierająca oddzielne komponenty odpowiednie do tego adresu.

    Każdy komponent adresu zawiera zwykle następujące pola:

    • types[] to tablica wskazująca typ komponentu adresu. Zobacz listę obsługiwanych typów.
    • long_name to pełny opis lub nazwa komponentu adresu zwróconego przez geokoder.
    • short_name to skrócona nazwa tekstowa komponentu adresu (jeśli jest dostępna). Na przykład komponent adresu w stanie Alaska może zawierać ciąg long_name "Alaska & short_name &&tt;AK" z 2-literowym skrótem pocztowym.

    Weź pod uwagę te fakty o tablicy address_components[]:

    • Tablica komponentów adresu może zawierać więcej komponentów niż formatted_address.
    • Tablica nie musi zawierać wszystkich jednostek politycznych zawierających adres (oprócz tych z pola formatted_address). Aby pobrać wszystkie jednostki polityczne zawierające określony adres, użyj odwrotnego geokodowania, podając w żądaniu parametr szerokości i długości geograficznej adresu.
    • Format odpowiedzi nie jest gwarantowany w tych samych żądaniach. W szczególności liczba address_components różni się w zależności od żądanego adresu i może się zmieniać w miarę upływu czasu dla tego samego adresu. Komponent może zmieniać pozycję w tablicy. Typ komponentu może się zmieniać. Brak odpowiedzi w konkretnym komponentie.

    Więcej informacji o typach adresów i ich typach znajdziesz poniżej.

  • partial_match oznacza, że koder nie zwrócił dokładnego dopasowania do pierwotnego żądania, mimo że mógł dopasować część żądanego adresu. Sprawdź oryginalny wniosek o błędną pisownię lub niepełny adres.

    Częściowo dopasowania występują najczęściej w przypadku adresów, które nie istnieją w miejscowości, którą przekazujesz. Częściowe dopasowania mogą być też zwracane w przypadku, gdy żądanie pasuje do co najmniej dwóch lokalizacji w tym samym regionie. Na przykład &Hitpar St, Bristol, UK" zwróci częściowe dopasowanie dla ulicy Helena i Henrietta. Jeśli w żądaniu znajduje się błędnie podany komponent adresu, usługa geokodowania może zaproponować inny adres. Sugerowane w ten sposób sugestie zostaną oznaczone jako częściowe dopasowanie.

  • place_idto unikalny identyfikator miejsca, który może być używany z innymi interfejsami API Google. Możesz na przykład użyć właściwości place_id z biblioteką Miejsca Google Places, aby uzyskać informacje o lokalnej firmie, takie jak numer telefonu, godziny otwarcia czy opinie użytkowników. Zobacz omówienie identyfikatora miejsca.
  • postcode_localities[] to tablica zawierająca wszystkie miejscowości w kodzie pocztowym. Pojawia się tylko wtedy, gdy wynik jest kodem pocztowym zawierającym wiele lokalizacji.
  • geometry zawiera te informacje:

    • location zawiera wartość geograficzną dotyczącą długości i szerokości geograficznej. Zwracamy tę lokalizację jako obiekt LatLng, a nie jako sformatowany ciąg znaków.
    • location_type przechowuje dodatkowe dane o określonej lokalizacji. Obecnie obsługiwane są te wartości:
      • ROOFTOP wskazuje, że zwrócony wynik odzwierciedla dokładny kod geograficzny.
      • RANGE_INTERPOLATED wskazuje, że zwrócony wynik odzwierciedla w przybliżeniu (zwykle na drodze) połączenie między 2 dokładnymi punktami (np. skrzyżowania). Wyniki interpolowane są zwykle zwracane, gdy dane geograficzne z dachu nie są dostępne dla adresu ulicy.
      • GEOMETRIC_CENTER wskazuje, że zwrócony wynik to geometria wyniku, np. linia łamana (np. ulica) lub wielokąt (region).
      • APPROXIMATE wskazuje, że zwrócony wynik jest przybliżony.

    • viewport przechowuje zalecany widoczny obszar dla zwróconego wyniku.
    • bounds (opcjonalnie) zwraca LatLngBounds, który może w pełni zawierać zwrócone wyniki. Te limity mogą się różnić od zalecanego widocznego obszaru. Na przykład San Francisco zawiera Wyspy Falarne, które technicznie są częścią miasta, ale nie powinny być zwracane w widocznym obszarze.

Adresy zostaną zwrócone przez geokoder za pomocą preferowanego języka przeglądarki lub języka podanego podczas wczytywania kodu JavaScript interfejsu API przy użyciu parametru language. (Więcej informacji znajdziesz w artykule Lokalizacja).

Typy adresów i typy komponentów adresu

Tablica types[] w polu GeocoderResult wskazuje typ adresu. Tablica types[] może być też zwracana w parametrze GeocoderAddressComponent, aby wskazać typ konkretnego adresu adresu. Adresy zwracane przez geokoder mogą mieć wiele typów; typy mogą być uznawane za tagi. Na przykład wiele miast jest oznaczonych tagami typu political i locality.

Poniższe typy geodanych są obsługiwane i zwracane przez geokoder zarówno w typach adresów, jak i typach komponentów:

  • street_address wskazuje dokładną lokalizację ulicy.
  • route wskazuje trasę nazwaną (np. "US 101").
  • intersection wskazuje główne skrzyżowanie zwykle obejmujące 2 główne drogi.
  • political wskazuje podmiot polityczny. Zazwyczaj ten typ oznacza wielokąt administracji administracyjnej obywatelskiej.
  • country wskazuje krajowy podmiot polityczny i zwykle jest to najwyższy typ zamówienia zwracany przez geokoder.
  • administrative_area_level_1 wskazuje podmiot cywilny pierwszego zamówienia znajdujący się poniżej poziomu kraju. W Stanach Zjednoczonych są to stany administracyjne. Nie wszystkie kraje wykazują się tymi poziomami administracyjnymi. W większości przypadków krótkie nazwy administracyjne _area_level_1 będą ściśle odpowiadać podziałom ISO 3166-2 i innym szeroko kręconym listom, ale nie jest to gwarantowane, ponieważ wyniki w kodowaniu geograficznym są oparte na różnych sygnałach i danych o lokalizacji.
  • administrative_area_level_2 wskazuje podmiot cywilny drugiego poziomu poniżej poziomu kraju. W Stanach Zjednoczonych są to hrabstwa. Nie wszystkie kraje wykazują się tymi poziomami administracyjnymi.
  • administrative_area_level_3 wskazuje podmiot cywilny niebędący hierarchią poniżej poziomu kraju. Ten typ określa drobny podział cywilny. Nie wszystkie kraje wykazują się tymi poziomami administracyjnymi.
  • administrative_area_level_4 oznacza podmiot cywilny dostępny w czwartej kolejności poniżej poziomu kraju. Ten typ określa drobny podział cywilny. Nie wszystkie kraje wykazują się tymi poziomami administracyjnymi.
  • administrative_area_level_5 oznacza podmiot cywilny piąty poziom poniżej poziomu kraju. Ten typ określa drobny podział cywilny. Nie wszystkie kraje wykazują się tymi poziomami administracyjnymi.
  • administrative_area_level_6 wskazuje podmiot cywilny szóstej kolejności poniżej poziomu kraju. Ten typ określa drobny podział cywilny. Nie wszystkie kraje wykazują się tymi poziomami administracyjnymi.
  • administrative_area_level_7 wskazuje podmiot cywilny siódmej kolejności poniżej poziomu kraju. Ten typ określa drobny podział cywilny. Nie wszystkie kraje wykazują się tymi poziomami administracyjnymi.
  • colloquial_area wskazuje powszechnie używaną alternatywną nazwę elementu.
  • locality wskazuje miasto lub podmiot miejski.
  • sublocality wskazuje podmiot cywilny pierwszego miejsca poniżej miejscowości. W niektórych lokalizacjach może wystąpić jeden z dodatkowych typów: sublocality_level_1 do sublocality_level_5. Każdy poziom dzielnicy to podmiot cywilny. Większe liczby oznaczają mniejszy obszar geograficzny.
  • neighborhood wskazuje dzielnicę nazwaną
  • premise wskazuje lokalizację nazwaną, zwykle budynek lub kolekcję budynków o takiej samej nazwie
  • subpremise wskazuje element pierwszego zamówienia pod nazwą lokalizacji, zwykle pojedynczy budynek w kolekcji budynków o takiej samej nazwie
  • plus_code wskazuje zakodowaną wartość referencyjną lokalizacji ustaloną na podstawie szerokości i długości geograficznej. Kody Plus Code mogą służyć do zastępowania adresów w miejscach, w których nie istnieją (miejsc, w których budynki nie mają numerów lub nie mają nazw). Więcej informacji znajdziesz na stronie https://plus.codes.
  • postal_code to kod pocztowy stosowany w przypadku poczty w danym kraju.
  • natural_feature wskazuje wyraźny obiekt naturalny.
  • airport oznacza lotnisko.
  • park wskazuje nazwany park.
  • point_of_interest wskazuje na ciekawe miejsce. Zwykle są to dobrze widoczne jednostki lokalne, które nie mieszczą się w innej kategorii, np. „Empire State Building” lub „Eiffel Tower”.

Pusta lista typów oznacza, że nie ma znanych typów określonego komponentu adresu, na przykład Lieu-dit we Francji.

Oprócz wymienionych powyżej komponentów adresu mogą obejmować poniższe typy elementów.

Uwaga: ta lista nie jest pełna i może ulec zmianie.

  • floor wskazuje piętro w budynku.
  • establishment zwykle oznacza miejsce, które nie zostało jeszcze sklasyfikowane.
  • landmark wskazuje miejsce w pobliżu, które służy jako odniesienie, aby ułatwić nawigację.
  • point_of_interest wskazuje na ciekawe miejsce.
  • parking oznacza parking lub strukturę parkingu.
  • post_box wskazuje konkretną skrzynkę pocztową.
  • postal_town oznacza grupę obszarów geograficznych, takich jak locality i sublocality, używanych w przypadku adresów pocztowych w niektórych krajach.
  • room oznacza salę z adresem budynku.
  • street_number wskazuje dokładną lokalizację ulicy.
  • bus_station, train_station i transit_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. Udało się przeanalizować adres. Zwrócono co najmniej 1 kod geograficzny.
  • Wartość "ZERO_RESULTS" oznacza, że przetwarzanie danych geograficznych zakończyło się powodzeniem, ale nie zwróciło żadnych wyników. Ten błąd może wystąpić, gdy koder został przekazany do nieistniejącego address.
  • "OVER_QUERY_LIMIT" wskazuje, że przekraczasz limit.
  • "REQUEST_DENIED" oznacza, że Twoja prośba została odrzucona. Strona internetowa nie może używać kodera.
  • "INVALID_REQUEST" zwykle wskazuje, że brakuje zapytania (address, components lub latlng).
  • "UNKNOWN_ERROR" oznacza, że żądanie nie mogło zostać przetworzone z powodu błędu serwera. Żądanie może się udać, jeśli spróbujesz ponownie.
  • "ERROR" wskazuje, że upłynął limit czasu żądania lub wystąpił problem z komunikacją z serwerami Google. Żądanie może się udać, jeśli spróbujesz ponownie.

W tym przykładzie przetwarzamy dane geograficzne według adresu i umieszczamy znacznik w zwróconych wartościach szerokości i długości geograficznej. Pamiętaj, że moduł obsługi jest przekazywany jako anonimowy litera litera funkcji.

  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>

Zobacz przykład

Promowanie widocznego obszaru

Możesz określić, że usługa geokodowania ma preferować wyniki w określonym widocznym obszarze (wyrażona jako ramka ograniczająca). W tym celu ustaw parametr bounds w literacie obiektu GeocoderRequest, aby określić granice tego widocznego obszaru. Warto pamiętać, że odchylenie tylko preferuje wyniki w ramach tych granic. Jeśli te granice istnieją, mogą zostać uwzględnione.

Na przykład kod geograficzny dla „Winnetka&quot” 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"
}

Jeśli jednak określisz parametr bounds definiujący granicę dla doliny San Fernando w Los Angeles, w tym miejscu zostaną przetworzone dane geograficzne dotyczące okolicy o nazwie "Winnetka&quot.

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

Korekta kodu regionu

Możesz skonfigurować usługę geokodowania, aby zwracała konkretne wyniki dotyczące konkretnego regionu za pomocą parametru region. Ten parametr przyjmuje kod regionu określony jako dwuznakowy (nienumeryczny) subtag regionu Unicode. Te tagi mapują bezpośrednio na dobrze znane wartości ccTLD ("domena najwyższego poziomu"), takie jak "uk" w "co.uk" W niektórych przypadkach tag region obsługuje też kody ISO-3166-1, które czasem różnią się od wartości ccTLD (np. &&tt;GB "Wielka Brytania").

Jeśli używasz parametru region:

  • Podaj tylko jeden kraj lub region. Kilka wartości jest ignorowane, co może skutkować niepowodzeniem żądania.
  • Używaj tylko dwuznakowych subtagów regionów (format Unicode CLDR). Pozostałe dane wejściowe będą powodować błędy.
  • Obsługiwane są tylko kraje i regiony wymienione w szczegółach pokrycia w Google Maps Platform.

Prośby o geokodowanie można wysyłać dla każdej domeny, w której główna aplikacja Mapy Google oferuje geokodowanie. Pamiętaj, że promowanie wyników ze względu na konkretną domenę preferuje tylko wyniki dotyczące tej domeny. Jeśli znajdują się tu trafniejsze wyniki, mogą zostać uwzględnione.

Na przykład geokodowanie „"Toledo"” zwraca ten wynik, ponieważ domena domyślna usługi geokodowania jest ustawiona na 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"
}

Kod geograficzny 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ć usługę geokodowania tak, aby zwracała wyniki dotyczące adresów ograniczone do konkretnego obszaru. Określ filtr w parametrze componentRestrictions. Wartości filtra obsługują te same metody pisowni i dopasowania częściowego co inne żądania geokodowania.

Koder przetwarza tylko wyniki pasujące do wszystkich filtrów komponentu. Innymi słowy, sprawdza specyfikację filtra jako AND, a 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.
  • Dopasowanie locality pasuje do typów miejscowości i regionów.
  • Poziom administrativeArea pasuje do wszystkich poziomów obszaru administracyjnego.
  • postalCode pasuje do kodów pocztowych i prefiksów kodów pocztowych.
  • country oznacza nazwę kraju lub dwuliterowy kod kraju zgodny ze standardem ISO 3166-1. Uwaga: interfejs API jest zgodny ze standardem ISO podczas definiowania krajów, a filtrowanie działa najlepiej, gdy jest używany odpowiedni kod ISO kraju.

Poniższy przykład pokazuje wykorzystanie parametru componentRestrictions do filtrowania według 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 adresów)

Termin geokodowanie oznacza tłumaczenie adresu zrozumiałego dla człowieka na lokalizację na mapie. Proces odwrotności, czyli tłumaczenie lokalizacji na mapie na adres czytelny dla człowieka, nazywa się odwrotnym geokodowaniem.

Zamiast wpisywać tekst address, podaj w parametrze location parę szerokości i długości geograficznej rozdzielone przecinkami.

W poniższym przykładzie kodowanie szerokości i długości geograficznej odbywa się zgodnie z przykładem.

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;
Zobacz przykład

Fragment

W poprzednim przykładzie pokazaliśmy pierwszy wynik, wybierając results[0]. Odwrotny koder geograficzny często zwraca więcej niż 1 wynik. Adresy geokodowane to nie tylko adresy pocztowe, ale też sposób geolokalizacji nadanej lokalizacji. Na przykład geokodowanie punktów w Chicago może być oznaczone jako ulica z ulicą, nazwą miasta (Chicago), stanem (Illinois) lub krajem (USA). Wszystkie są adresami kodera. Odwracany geokoder zwraca wszystkie te wyniki.

Odwrotny koder geograficzny jest zgodny z podmiotami politycznymi (krajami, prowincjami, miastami i dzielnicami), adresami pocztowymi i kodami pocztowymi.

Oto przykład listy adresów, które może zwrócić to 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 najbardziej do najmniej pasujących. Bardziej dokładny adres to zazwyczaj najbardziej widoczny wynik, tak jak w tym przypadku. Pamiętaj, że zwracamy różne typy adresów – od najbardziej ogólnego adresu do mniej szczegółowych jednostek politycznych, takich jak dzielnice, miasta, hrabstwa, stany itp. Jeśli chcesz podać bardziej ogólny adres, możesz sprawdzić pole results[].types.

Uwaga: odwrotne kodowanie geograficzne nie jest precyzyjne. Koder próbuje znaleźć najbliższą adresowalną lokalizację z określoną tolerancją.

Pobieranie adresu dla identyfikatora miejsca

Wpisz placeId, aby znaleźć adres dla danego identyfikatora miejsca. Identyfikator miejsca to unikalny identyfikator, którego można używać z innymi interfejsami API Google. Możesz na przykład podać wartość placeId zwracaną przez Roads API, aby uzyskać adres przyciągany. Więcej informacji o identyfikatorach miejsc znajdziesz w omówieniu identyfikatora miejsca.

Gdy podasz wartość placeId, żądanie nie może zawierać żadnego z tych pól:

  • address
  • latLng
  • location
  • componentRestrictions

Ten przykład akceptuje identyfikator miejsca, wyszukuje odpowiedni adres i wyśrodkowuje mapę w tej lokalizacji. Wyświetla się też okno informacyjne z sformatowanym adresem danego 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;
Zobacz przykład

Fragment