Usługa geokodowania

Omówienie

Geokodowanie to proces konwertowania adresów (np. „1600 Amphitheatre Parkway, Mountain View, CA”). (takie jak szerokość geograficzna 37,423021 i długość geograficzna -122,083739), których można użyć do znaczniki miejsc lub położenie mapy.

Odwrotne geokodowanie to proces konwersji danych geograficznych. za pomocą współrzędnych w postaci zrozumiałego dla człowieka adresu (zobacz Odwrotne geokodowanie (wyszukiwanie adresu)).

Możesz też użyć geokodera, aby znaleźć adres podany identyfikator miejsca.

Interfejs Maps JavaScript API zapewnia klasa geokodera dla: geokodowanie i odwrotne geokodowanie na podstawie danych wejściowych użytkownika. Jeśli zamiast tego Jeśli chcesz geokodować statyczne, znane adresy, wyświetl Usługa sieciowa Geokodowanie.

Pierwsze kroki

Zanim użyjesz usługi Geocoding w interfejsie Maps JavaScript API, upewnij się, że interfejs Geocoding API jest włączony w konsoli Google Cloud, projektu skonfigurowanego na potrzeby Maps JavaScript API.

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

  1. Przejdź do Konsola Google Cloud.
  2. Kliknij przycisk Wybierz projekt, a potem wybierz ten sam skonfigurowany projekt. Maps JavaScript API i kliknij Otwórz.
  3. Na liście interfejsów API w panelu znajdź Geocoding API
  4. Jeśli interfejs API jest widoczny na liście, nie musisz nic robić. Jeśli interfejsu API nie ma na liście, włącz:
    1. U góry strony wybierz WŁĄCZ API, aby wyświetlić Biblioteka. Możesz też w menu po lewej stronie wybierz opcję Biblioteka.
    2. Wyszukaj Geocoding API, a potem wybierz go w listę wyników.
    3. Kliknij WŁĄCZ. Gdy proces się zakończy, Geocoding API pojawi się na liście interfejsów API w Panel.

Ceny i zasady

Ceny

16 lipca 2018 r. wszedł w życie nowy abonament z płatnością według wykorzystania dla Map, tras i miejsc. Aby dowiedzieć się więcej o nowych cenach i wykorzystaniu jak i wielu innych zastosowań usługi geokodowania JavaScript, zapoznaj się z Korzystanie i rozliczenia dla interfejsu Geocoding API.

Zasady

Korzystanie z usługi Geocoding musi być zgodne z opisanych zasad dla interfejsu Geocoding API.

Żądania geokodowania

Dostęp do usługi Geocoding jest asynchroniczny, ponieważ interfejs API Map Google musi nawiązać połączenie z serwerem zewnętrznym. Dlatego musisz zdać metodę wywołania zwrotnego, która ma być wykonywana po zakończeniu żądania. Ten 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 uzyskuje się w kodzie za pomocą Obiekt konstruktora google.maps.Geocoder. Metoda Geocoder.geocode() inicjuje żądanie do geokodowania usługi, przekazując go do literału obiektu GeocoderRequest zawierającego warunki wejściowe i metodę wywołania zwrotnego, która ma być wykonywana po otrzymaniu odpowiedzi.

Literał obiektu GeocoderRequest zawiera te pola:

{
 address: string,
 location: LatLng,
 placeId: string,
 bounds: LatLngBounds,
 componentRestrictions: GeocoderComponentRestrictions,
 region: string
}

Wymagane parametry: należy podać tylko jeden parametr tych polach:

  • address – adres, którego dane geograficzne chcesz przetworzyć na dane geograficzne.
    lub
    locationLatLng (lub LatLngLiteral), dla której chcesz uzyskać najbliższy, łatwy do odczytania przez człowieka. Geokoder wykonuje odwrotny geokod. Zobacz Odwrotne geokodowanie.
    lub
    placeId – identyfikator wybranego miejsca w celu uzyskania najbliższego, zrozumiałego dla człowieka adresu. Więcej informacji: pobierania adresu dla identyfikatora miejsca.

Parametry opcjonalne:

  • boundsLatLngBounds w ramach których można bardziej eksponować wyniki geokodowania. Parametr bounds będzie wpływać tylko na wyniki generowane przez geokoder, a nie w pełni je ograniczyć. Zobacz więcej informacji o promowanie widocznego obszaru poniżej.
  • componentRestrictions – służy do ograniczenia wyników do konkretne obszary. Zobacz więcej informacji: filtrowania komponentów poniżej.
  • region – kod regionu określony jako określona jako dwuznakowy (nienumeryczny) podtag regionu Unicode. Najwięcej te tagi są mapowane bezpośrednio na znajomą domenę ccTLD („domenę najwyższego poziomu”) dwuznakowych. Parametr region będzie miał wpływ tylko na: nie są w pełni ograniczone, wyniki z geokodera. Zobacz więcej informacji: promowanie kodu regionu poniżej.
  • extraComputations – jedyna dozwolona wartość w przypadku tego parametru. ma wartość ADDRESS_DESCRIPTORS. Zobacz deskryptory adresów.
  • fulfillOnZeroResults – spełnij obietnicę stanu ZERO_RESULT w . Może to być pożądane, ponieważ nawet przy braku wyników geokodowania reklamy mogą być nadal zwracanych dodatkowych pól poziomu odpowiedzi. Zobacz Zadbaj o to, by nie przekraczała wartości zerowej, aby dowiedzieć się więcej.

Odpowiedzi związane z kodowaniem geograficznym

Usługa Geocoding wymaga metody wywołania zwrotnego do wykonania po pobraniu z wyników geokodera. To wywołanie zwrotne powinno przekazywać 2 parametry do wstrzymania results i status (w tej kolejności).

Wyniki kodowania geograficznego

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śniono te pola:

  • types[] to tablica wskazująca typ adresu uzyskany wynik. Ta tablica zawiera zestaw zero lub więcej tagów określając typ cechy zwróconej w wyniku. Na przykład plik Geokod „Chicago” zwraca „locality” który wskazuje, że „Warszawa” jest City i zwraca wartość „political” (polityczny) co wskazuje, że jest to kampania polityczna, podmiotu zabezpieczeń. Zobacz więcej informacji: komponent typów adresów i adresów poniżej.
  • formatted_address to ciąg znaków zawierający zrozumiały dla człowieka tej lokalizacji.

    Adres ten jest często odpowiednikiem adresu pocztowego. Pamiętaj, że niektóre takich jak Wielka Brytania, nie zezwalają na dystrybucję prawdziwego adresów pocztowych ze względu na ograniczenia licencyjne.

    Sformatowany adres składa się logicznie z jednego lub wielu adresów . Na przykład adres „ul. Polna 13, Warszawa” składa się z następujących komponentów: „111” (numer domu), „Ósma Aleja” (trasa), „Nowy Jork” (miasto) i „NY” (stan w USA).

    Nie analizuj sformatowanego adresu automatycznie. Zamiast tego użyj poszczególnych składników adresu, które zawiera odpowiedź interfejsu API do sformatowanego pola adresu.

  • address_components[] to tablica zawierająca oddzielne dotyczące tego adresu.

    Każdy komponent adresu zawiera zwykle te pola:

    • types[] to tablica wskazująca typ adresu. Zobacz listę obsługiwanych typów.
    • long_name to pełny opis lub nazwa elementu komponentem adresowym zwracanym przez Geocoder.
    • short_name to skrócona nazwa tekstowa adresu jeśli jest dostępny. Na przykład składnik adresu dla stanu obszaru Alaski może mieć long_name o wartości „Alaska” i short_name pozycji „Akademia” za pomocą dwuliterowego skrótu pocztowego.

    Zwróć uwagę na te informacje na temat: address_components[] tablica:

    • Tablica komponentów adresu może zawierać więcej komponentów niż formatted_address
    • Tablica nie musi obejmować wszystkich podmiotów politycznych, które zawierają adres, oprócz tych zawartych w tagu formatted_address Aby pobrać wszystkie jednostki polityczne zawierających konkretny adres, należy zastosować odwrotne geokodowanie, przesyłając szerokość i długość geograficzną adresu jako parametr żądania.
    • Nie ma gwarancji, że format odpowiedzi będzie taki sam żądań. W szczególności chodzi o liczbę address_components zmienia się w zależności od żądanego adresu i może się zmieniać pod tym samym adresem. Komponent może zmienić pozycję w tablicy. Typ komponentu może się zmienić. Konkretnym komponentem może być których brakuje w późniejszej odpowiedzi.

    Zobacz więcej informacji: komponent typów adresów i adresów poniżej.

  • partial_match oznacza, że geokoder nie zwrócił kodu. dokładne dopasowanie do pierwotnego żądania, chociaż udało mu się dopasować część w żądanym adresie. Możesz sprawdzić pierwotną prośbę pod kątem błędów ortograficznych i/lub jest niepełny adres.

    Dopasowania częściowe najczęściej pojawiają się w przypadku adresów, które nie istnieją na obszarze objętym zgłoszeniem. Częściowe dopasowania mogą również zostać zwracany, gdy żądanie pasuje do co najmniej 2 lokalizacji w tej samej miejscowości. Na przykład „Hillpar St, Bristol, UK” zwróci częściowe dopasowanie dla obu Henry Street i Henrietta Street. Pamiętaj, że jeśli żądanie zawiera parametr błędnie zapisany adres, usługa geokodowania może zaproponować alternatywę adresu. Sugestie wywołane w ten sposób zostaną również oznaczone jako częściowe dopasowania.

  • place_idto unikalny identyfikator miejsca, którego można użyć z innymi interfejsami API Google. Na przykład możesz użyć atrybutu place_id za pomocą Miejsc Google API, aby uzyskać szczegółowe informacje o lokalnej firmie, takie jak numer telefonu, godzin otwarcia, opinii użytkowników itp. Zobacz omówienie identyfikatora miejsca.
  • postcode_localities[] to tablica oznaczająca wszystkie miejscowości zawarte w kodzie pocztowym i występują tylko wtedy, gdy wynikiem jest kod pocztowy. który zawiera wiele lokalizacji.
  • geometry zawiera te informacje:

    • location zawiera Geokodowaną wartość szerokości i długości geograficznej. Pamiętaj, że zwracamy tę lokalizację jako obiekt LatLng, a nie jako sformatowany ciąg znaków.
    • location_type przechowuje dodatkowe dane na temat określonego lokalizacji. Obecnie obsługiwane są te wartości:
      • ROOFTOP oznacza że zwrócony wynik odzwierciedla dokładny geokod.
      • RANGE_INTERPOLATED wskazuje, że zwrócony wynik odzwierciedla przybliżony (zwykle na drodze) interpolowane między dwoma dokładnymi punktami (np. w postaci skrzyżowań). Wyniki interpolowane są zazwyczaj zwracane, gdy: Geokody dachów są niedostępne dla adresu.
      • GEOMETRIC_CENTER wskazuje, że zwrócony wynik jest środkiem geometrycznym wyniku, takiego jak linia łamana (na przykład ulica) lub wielokąt. (region).
      • APPROXIMATE wskazuje, że zwrócony wynik jest przybliżony.

    • viewport przechowuje zalecany widoczny obszar dla wynik.
    • bounds (opcjonalnie zwracany) przechowuje wartość LatLngBounds, która może w całości zawierać zwrócony wynik. Pamiętaj, że te granice mogą nie odpowiadać zalecanemu widocznemu obszarowi. (Do Na przykład San Francisco obejmuje Farallon Wyspy, które technicznie są częścią miasta, ale nie powinny w widocznym obszarze).

Adresy będą zwracane przez geokoder za pomocą ustawień preferowanych w przeglądarce języka lub języka określonego przy wczytywaniu kodu JavaScript API za pomocą parametru language. (Więcej informacji znajdziesz w artykule Lokalizacja.)

Typy adresów i typy komponentów adresu

Tablica types[] w GeocoderResult wskazuje typ adresu. Tablica types[] również może zostać zwrócona w ciągu GeocoderAddressComponent aby wskazać typ konkretnego komponentu adresu. Zwrócone adresy przez geokoder może mieć kilka typów; które można uznać za tagi. Na przykład wiele miast jest oznaczonych tagami political oraz Typ: locality.

Geokoder obsługuje i zwraca poniższe typy w obu typy adresów i typy komponentów adresu:

  • street_address wskazuje dokładny adres.
  • route oznacza trasę z nazwą (np. „E101”).
  • intersection oznacza większe przecięcie, zwykle składające się z dwóch dróg głównych.
  • political oznacza podmiot polityczny. Zwykle ten typ oznacza wielokąt niektórych jednostek administracji cywilnej.
  • country oznacza krajowy podmiot polityczny i jest zwykle jest to najwyższy typ kolejności zwracany przez Geocoder.
  • administrative_area_level_1 oznacza cywilny pierwszego rzędu poniżej poziomu kraju. W Stanach Zjednoczonych te poziomy administracyjne to stany. Nie we wszystkich krajach na poziomach administracyjnych. W większości przypadków parametr administracyjny_area_level_1 krótkie nazwy będą dokładnie odpowiadać podziałom zgodnym z normą ISO 3166-2 oraz innymi powszechnymi publikowane listy; Nie jest to jednak gwarantowane, ponieważ wyniki geokodowania na podstawie różnych sygnałów i danych o lokalizacji.
  • administrative_area_level_2 oznacza typ cywilny drugiego rzędu. poniżej poziomu kraju. W Stanach Zjednoczonych te poziomy administracyjne to hrabstwa. Nie we wszystkich krajach na poziomach administracyjnych.
  • administrative_area_level_3 oznacza rodzaj cywilny trzeciego rzędu. poniżej poziomu kraju. Ten typ oznacza niewielką jednostkę cywilną. Nie we wszystkich krajach obowiązują te poziomy administracyjne.
  • administrative_area_level_4 oznacza cywilny rządu czwartego rzędu poniżej poziomu kraju. Ten typ oznacza niewielką jednostkę cywilną. Nie we wszystkich krajach obowiązują te poziomy administracyjne.
  • administrative_area_level_5 oznacza cywilny piątego rzędu poniżej poziomu kraju. Ten typ oznacza niewielką jednostkę cywilną. Nie we wszystkich krajach obowiązują te poziomy administracyjne.
  • administrative_area_level_6 oznacza cywilny szóstego rzędu. poniżej poziomu kraju. Ten typ oznacza niewielką jednostkę cywilną. Nie we wszystkich krajach obowiązują te poziomy administracyjne.
  • administrative_area_level_7 oznacza cywilny siódmego rzędu. poniżej poziomu kraju. Ten typ oznacza niewielką jednostkę cywilną. Nie we wszystkich krajach obowiązują te poziomy administracyjne.
  • colloquial_area oznacza często używaną nazwę alternatywną. danego podmiotu.
  • locality oznacza miasto lub miejscowości, na terenie których funkcjonuje podmiotu zabezpieczeń.
  • sublocality oznacza podmiot cywilny pierwszego rzędu pod lokalizacji. W przypadku niektórych lokalizacji mogą pojawić się dodatkowe typy reklam: sublocality_level_1 do sublocality_level_5. Każdy poziom podrejonu jest podmiotem cywilnym. Większe liczby oznaczają mniejsze obszar geograficzny.
  • neighborhood oznacza nazwany dzielnicę
  • premise wskazuje nazwane lokalizację, zwykle budynek lub zespół budynków o takiej samej nazwie
  • subpremise oznacza element pierwszego rzędu pod nazwanym lokalizacji, zwykle pojedynczego budynku w obrębie zespołu budynków imię i nazwisko
  • plus_code oznacza zakodowane odniesienie do lokalizacji, pochodne od szerokości i długości geograficznej. Kody Plus Code mogą zastąpić: adresów w miejscach, gdzie ich nie ma (gdzie budynki nie są numerowane lub ulice nie mają nazwy). Zobacz https://plus.codes. .
  • postal_code oznacza kod pocztowy używany do adresowania. na terenie tego kraju.
  • natural_feature oznacza ważny obiekt naturalny.
  • airport oznacza lotnisko.
  • park oznacza nazwany park.
  • point_of_interest wskazuje nazwane miejsce. Takie miejsca to zazwyczaj dobrze widoczne obiekty lokalne, które nie zawsze w innej kategorii, takiej jak „Empire State Building” czy „wieża Eiffla”.

Pusta lista typów oznacza, że nie ma znanych typów dla danego składnika adresu, np. Lieu-dit we Francji.

Oprócz wymienionych powyżej składników adresu mogą występować typy opisane poniżej.

Uwaga: ta lista nie jest wyczerpująca i może ulec zmianie.

  • floor wskazuje piętro w adresie budynku.
  • establishment zwykle oznacza miejsce, w którym nie ma jeszcze została sklasyfikowana.
  • landmark wskazuje miejsce w pobliżu, które jest używane jako odniesienie. i ułatwi nawigację.
  • point_of_interest wskazuje nazwane miejsce.
  • parking oznacza parking.
  • post_box oznacza konkretną skrzynkę pocztową.
  • postal_town oznacza grupę obszarów geograficznych, takich jak locality i sublocality, używane w adresach pocztowych w niektórych krajach.
  • room wskazuje salę w danym budynku.
  • street_number wskazuje dokładny numer domu.
  • bus_station, train_station i transit_station wskazują lokalizację autobusu, pociągu lub środka transportu publicznego przystanek.

Kody stanu

Kod status może zwrócić jedną z tych wartości:

  • "OK" oznacza, że nie wystąpiły błędy. adres został pomyślnie przeanalizowany i został zwrócony co najmniej jeden kod geograficzny.
  • "ZERO_RESULTS" oznacza, że geokod został poprawnie użyty, ale nie zwrócił żadnych wyników. Może się tak zdarzyć, jeśli geokoder został przekazany do nieistniejącego elementu address.
  • "OVER_QUERY_LIMIT" oznacza, że limit został przekroczony.
  • "REQUEST_DENIED" oznacza, że prośba została odrzucona. Ta strona internetowa nie jest i zezwalają na używanie geokodera.
  • Zmienna "INVALID_REQUEST" zwykle wskazuje, że zapytanie (address, components lub latlng).
  • "UNKNOWN_ERROR" oznacza, że nie udało się zrealizować żądania przetworzono z powodu błędu serwera. Żądanie może zostać zrealizowane, jeśli: spróbuj jeszcze raz.
  • "ERROR" oznacza, że upłynął limit czasu żądania lub wystąpiło ma problem z nawiązaniem połączenia z serwerami Google. Żądanie może zostać zrealizowane, jeśli: spróbuj jeszcze raz.

W tym przykładzie geokodujemy adres i umieszczamy znacznik w zwróconych szerokości i długości geograficznej. Zwróć uwagę, że moduł obsługi jest przekazywany jako anonimowego literału 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 polecić usłudze Geocoding Service preferowanie wyników w danym widoczny obszar (wyrażony jako ramka ograniczająca). W tym celu ustaw parametr Parametr bounds w obiekcie GeocoderRequest do określenia granic tego widocznego obszaru. Pamiętaj, że odchylenie dotyczy tylko preferuje wyniki w określonych granicach; jeśli istnieją trafniejsze wyniki poza tymi granicami, mogą zostać uwzględnione.

Na przykład kod geograficzny dla „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ą w dolinie San Fernando w Los Angeles oznacza, że geokod jest zwracany dzielnicy o nazwie „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

Można tak ustawić usługę Geocoding Service, aby zwracała stronniczone wyniki do określonego bezpośrednio za pomocą parametru region. Ten parametr pobiera kod regionu określony jako dwuznakowy (nienumeryczny) kod Unicode. podtag regionu. Tagi te są mapowane bezpośrednio na znajomą domenę ccTLD („domenę najwyższego poziomu”) wartości dwuznakowych, np. „pl”; w ciągu „co.uk”, na przykład. W niektórych przypadkach Tag region obsługuje również kody ISO-3166-1, które czasami różnią się od wartości ccTLD (np. „GB” w przypadku Wielkiej Brytanii).

Gdy używasz parametru region:

  • Określ tylko jeden kraj lub region. Wiele wartości jest ignorowanych, może doprowadzić do nieudanego żądania.
  • Używaj tylko dwuznakowych tagów podrzędnych regionów (w formacie Unicode CLDR). Wszystkie pozostałe spowoduje wystąpienie błędów.
  • Tylko kraje i regiony wymienione w Google Szczegóły zasięgu Maps Platform są obsługiwane.

Żądania geokodowania mogą być wysyłane w przypadku każdej domeny, w której główny Aplikacja Mapy Google oferuje geokodowanie. Pamiętaj, że promowanie preferuje tylko wyniki z konkretnej domeny; jeśli trafniejsze wyniki istnieją poza tą domeną, mogą zostać uwzględnione.

Na przykład geokod dla „Toledo”. domyślnie zwraca ten wynik. dla usługi Geocoding Service są ustawione 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) wyświetli 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

Możesz skonfigurować usługę Geocoding, aby zwracać wyniki dotyczące adresów objęte ograniczeniami do określonego obszaru, używając filtra komponentów. Określ filtr w componentRestrictions. Wartości filtrów obsługują te same metody poprawy pisowni i częściowe dopasowywanie co w przypadku innych geokodowania żądań.

Geokoder zwraca tylko wyniki pasujące do wszystkich komponentów. filtry. Specyfikacja filtra jest oceniana za pomocą operatora I, 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 pasuje do typów rejonów i podrejonów.
  • administrativeArea pasuje do wszystkich obszarów administracyjnych.
  • postalCode pasuje do kodów pocztowych i prefiksów kodów pocztowych.
  • Wyrażenie country odpowiada nazwie kraju lub dwuliterom ISO 3166-1 dla danego kraju. Uwaga: interfejs API jest zgodny ze standardem ISO dla definiują kraje, a filtrowanie działa najlepiej przy z odpowiednim kodem ISO kraju.

Poniższy przykład pokazuje użycie componentRestrictions parametr, według którego chcesz filtrować 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);
  }
});
}

Realizacja przy braku wyników

W przypadku odwrotnego geokodowania obietnica jest domyślnie uszkodzona w status=ZERO_RESULTS. Pamiętaj jednak: dodatkowe pola na poziomie odpowiedzi plus_code i address_descriptor mogą być nadal w tym przypadku. Jeśli parametr fulfillOnZeroResults ma wartość Prawda, obietnica nie jest unieważniona, a te dodatkowe pola są dostępne z poziomu obietnicy, jeśli istnieje.

Poniżej przedstawiono przykład takiego zachowania dla współrzędnych geograficznych Antarktydy. Nawet jeśli nie ma żadnych wyników odwrotnego geokodowania, wciąż możemy wydrukować kod plus. jeśli ustawisz fulfillOnZeroResults=true.

    function addressDescriptorReverseGeocoding() {
      var latlng = new google.maps.LatLng(-75.290330, 38.653861);
      geocoder
        .geocode({
          'location': latlng,
          'fulfillOnZeroResults': true,
        })
        .then((response) => {
          console.log(response.plus_code);
        })
        .catch((error) => {
          window.alert(`Error`);
        });
    }
  

Deskryptory adresów

Deskryptory adresów zawierają dodatkowe informacje, które pomagają opisać lokalizację za pomocą punktów orientacyjnych i obszarów. Zobacz prezentację deskryptorów adresów aby zapoznać się z tą funkcją.

Deskryptory adresów można włączyć za pomocą funkcji extraComputations . Uwzględnij extra_computations=ADDRESS_DESCRIPTORS w żądaniu geokodowania , odwrotne żądanie geokodowania lub prośba o geokodowanie miejsc. , aby otrzymywać deskryptory adresów w odpowiedzi.

Przykładowe geokodowanie w miejscach

Kolejne zapytanie zawiera adres miejsca w Delhi.

function addressDescriptorPlaceIdLookup() {
  geocoder.geocode({ 
    'placeId': 'ChIJyxAX8Bj9DDkRgBfAnBYa66Q',
    'extraComputations': ['ADDRESS_DESCRIPTORS']
    }, function(results, status) {
    if (status == 'OK') {
      console.log(results[0].address_descriptor);
    } else {
      window.alert('Geocode was not successful for the following reason: ' + status);
    }
  });
}

Przykład odwrotnego geokodowania

Następujące zapytanie zawiera wartość szerokości/długości geograficznej lokalizacji w regionie Delhi,

    function addressDescriptorReverseGeocoding() {
      var latlng = new google.maps.LatLng(28.640964,77.235875);
      geocoder
        .geocode({
          'location': latlng,
          'extraComputations': ["ADDRESS_DESCRIPTORS"],
        })
        .then((response) => {
          console.log(response.address_descriptor);
        })
        .catch((error) => {
          window.alert(`Error`);
        });
    }
  

Przykład deskryptora adresu

Przykład address_descriptor jest następujący.

  {
    "address_descriptor" : {
       "areas" : [
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Turkman Gate"
             },
             "place_id" : "ChIJ_7LLvyb9DDkRMKKxP9YyXgs"
          },
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Chandni Chowk"
             },
             "place_id" : "ChIJWcXciBr9DDkRUb4dCDykTwI"
          },
          {
             "containment" : "NEAR",
             "display_name" : {
                "language_code" : "en",
                "text" : "Katar Ganj"
             },
             "place_id" : "ChIJH3cWUyH9DDkRaw-9CjvcRvY"
          }
       ],
       "landmarks" : [
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delite Cinema"
             },
             "straight_line_distance_meters" : 29.9306755065918,
             "place_id" : "ChIJLfiYDCT9DDkROoEa7NdupUM",
             "travel_distance_meters" : 418.7794799804688,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "establishment", "movie_theater", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "YES Bank"
             },
             "straight_line_distance_meters" : 66.83731079101562,
             "place_id" : "ChIJFYHM3yb9DDkRRKGkZl2mpSQ",
             "travel_distance_meters" : 489.0340270996094,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "UCO Bank"
             },
             "straight_line_distance_meters" : 25.38849639892578,
             "place_id" : "ChIJ-c6_wCb9DDkRjIk1LeqRtGM",
             "travel_distance_meters" : 403.2246398925781,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "atm", "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delhi By Cycle Meeting Point"
             },
             "straight_line_distance_meters" : 44.02867126464844,
             "place_id" : "ChIJNxVfkSb9DDkRJD22l-eGFdM",
             "travel_distance_meters" : 97.41281890869141,
             "spatial_relationship" : "AROUND_THE_CORNER",
             "types" : [
                "establishment",
                "point_of_interest",
                "tourist_attraction",
                "travel_agency"
             ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Axis Bank Branch"
             },
             "straight_line_distance_meters" : 102.3495178222656,
             "place_id" : "ChIJr3uaDCT9DDkR8roHTVSn1x4",
             "travel_distance_meters" : 330.8566284179688,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          }
       ]
    }
  }

W każdym obiekcie address_descriptor są dwie tablice: landmarks oraz areas Tablica landmarks zawiera maksymalnie 5 wyników uporządkowanych według kolejności trafność, biorąc pod uwagę odległość od żądanych współrzędnych, powszechności punktu orientacyjnego i jego widoczności. Każdy wynik dotyczący punktu orientacyjnego zawiera następujące wartości:

  • place_id to identyfikator miejsca w wynikach wyszukiwania punktów orientacyjnych. Zobacz identyfikator miejsca .
  • display_name to wyświetlana nazwa punktu orientacyjnego, która zawiera language_code i text.
  • straight_line_distance_meters to odległość między punktami w metrach między podaną współrzędną a wynikami punktów orientacyjnych.
  • travel_distance_meters to odległość pokonana w metrach przez sieć dróg (z wyłączeniem ograniczeń drogowych) między wejściowymi współrzędnymi a wynikami punktów orientacyjnych.
  • spatial_relationship to szacowany związek między współrzędnymi wejściowymi a wynikami punktów orientacyjnych:
    • Gdy nie ma zastosowania żadna z poniższych sytuacji, relacją domyślną jest "NEAR".
    • "WITHIN", gdy współrzędna wejściowa znajduje się w granicach obiektu powiązanego z punktem orientacyjnym.
    • "BESIDE", jeśli współrzędna wejściowa przylega bezpośrednio do punktu dostępu do punktu orientacyjnego lub punktu dostępu.
    • "ACROSS_THE_ROAD", gdy współrzędne wejściowe są bezpośrednio przeciwne do punktu orientacyjnego po drugiej stronie trasy.
    • "DOWN_THE_ROAD", gdy współrzędne wejściowe znajdują się wzdłuż tej samej trasy co punkt orientacyjny, ale nie "BESIDES" ani "ACROSS_THE_ROAD".
    • "AROUND_THE_CORNER", gdy współrzędne wejściowe znajdują się wzdłuż prostopadłej trasy jako punktu orientacyjnego (tylko do jednego skrętu).
    • "BEHIND", gdy współrzędna wejściowa jest przestrzennie blisko punktu orientacyjnego, ale daleko od jego punktu dostępu.
  • types to typy miejsc punktu orientacyjnego.

Obiekt areas zawiera maksymalnie 3 odpowiedzi i ogranicza się do miejsc, w których reprezentują małe regiony, takie jak dzielnice, dzielnice i duże kompleksy. Obszary zawierające żądane współrzędne są wymienione jako pierwsze i są uporządkowane od najmniejszej do największej wartości. Każdy wynik funkcji areas zawiera te elementy wartości:

  • place_id to identyfikator miejsca wskazanego w wynikach wyszukiwania obszarów. Zobacz identyfikator miejsca .
  • display_name to wyświetlana nazwa obszaru. Zawiera ona language_code i text.
  • containment to szacunkowy stosunek izolacji między współrzędną wejściową a wynikiem obszaru:
    • Gdy nie ma zastosowania żadna z poniższych sytuacji, relacją domyślną jest "NEAR".
    • "WITHIN", gdy współrzędna wejściowa jest blisko środka obszaru.
    • "OUTSKIRTS", gdy współrzędna wejściowa jest blisko krawędzi obszaru.

Zasięg deskryptora adresu

Ta funkcja jest dostępna tylko w wybranych krajów.

To jest funkcja w wersji testowej. Chętnie poznamy Twoją opinię. Wyślij e-maila wyślij do nas na adres address-descriptors-feedback@google.com.

Odwrotne geokodowanie (wyszukiwanie adresu)

Termin geokodowanie odnosi się ogólnie do tłumaczenia zrozumiałego dla człowieka adres w lokalizacji na mapie. Cały proces polega na tym, tłumaczenie lokalizacji na mapie na adres czytelny dla człowieka to tzw. odwrotne geokodowanie.

Zamiast podawania tekstowego address wpisz rozdzielany przecinkami szerokość i długość geograficzna w parametrze location.

W poniższym przykładzie geologicznym jest wartość szerokości i długości geograficznej i wyśrodkowuje w niej na mapie w tej lokalizacji i wyświetla się 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;
Zobacz przykład

Zobacz próbkę

Zwróć uwagę, że w poprzednim przykładzie pierwszy wynik pokazaliśmy przez wybierając results[0]. Geokoder odwrotny często zwraca więcej niż jeden wynik. Adresy geokodowane to nie tylko adresy pocztowe, sposób określania położenia geograficznego. Na przykład przy geokodowaniu punktu w miasta Chicago, punkt geokodowany może być oznaczony jako adres, jako miasto (Chicago), stan (Illinois) lub kraj (Stany Zjednoczone stany). Wszystkie to adresy geokodera. Geokoder zwraca wszystkie tych wyników.

Odwrotny geokoder pasuje do podmiotów politycznych (krajów, prowincji, miasta i dzielnice), adresy ulic 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 liczby dopasowań. Ogólnie rzecz biorąc, im dokładny adres jest najbardziej widocznym wynikiem, tak jak w tym przypadku. Zwróć uwagę, że zwracamy różne typy adresów, od najbardziej szczegółowych adresu do mniej konkretnych jednostek politycznych, takich jak dzielnice, miasta, hrabstwa, województwa itp. Jeśli chcesz dopasować bardziej ogólny adres, sprawdź pole results[].types.

Uwaga: odwrotne geokodowanie nie jest dokładne nauki. Geokoder spróbuje znaleźć najbliższą możliwa lokalizację w ramach określonej tolerancji.

Pobieranie 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. Dla: możesz podać wartość placeId zwrócona przez funkcję Roads API, aby pobrać dla przyciągniętego punktu. Więcej informacji o identyfikatorach miejsc znajdziesz tutaj: omówienie identyfikatora miejsca.

Jeśli podasz placeId, żądanie nie może zawierać żadnych z tych polach:

  • address
  • latLng
  • location
  • componentRestrictions

W przykładzie poniżej przyjmujemy identyfikator miejsca, znajduje on odpowiedni adres i wyśrodkowuje mapę w tej lokalizacji. Wyświetlane jest również okno informacyjne, sformatowany adres 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;
Zobacz przykład

Zobacz próbkę