Przejście na nowe szczegóły miejsca

Interfejs Places API może zwracać szczegółowe informacje o konkretnym miejscu. Na tej stronie wyjaśniamy różnice między szczegółami miejsca używanymi w klasie Place (nowej) i PlacesService (starszej) oraz podajemy fragmenty kodu do porównania. W tabeli poniżej znajdziesz niektóre główne różnice w używaniu szczegółów miejsca między klasą PlacePlacesService:

PlacesService (starsza wersja) Place (Nowy)
getDetails() fetchFields()
PlaceDetailsRequest FetchFieldsRequest
Metody wymagają użycia wywołania zwrotnego do obsługi obiektu wyników i odpowiedzi google.maps.places.PlacesServiceStatus. Korzysta z obietnic i działa asynchronicznie.
Metody wymagają sprawdzenia PlacesServiceStatus. Nie wymaga sprawdzania stanu, może używać standardowej obsługi błędów.
Pola danych miejsca są sformatowane w sposób snake case. Pola danych o miejscach są sformatowane w stylu „camel case”.
Ograniczone do stałego zbioru typów miejsc i pol danych o miejscach. Zapewnia większą liczbę regularnie aktualizowanych typów miejsc oraz pól danych o miejscach.

Porównanie kodu

W tej sekcji porównujemy 2 podobie kawałki kodu, aby zilustrować różnice między usługą Places i klasą Place. Fragmenty kodu zawierają kod wymagany w każdym odpowiednim interfejsie API do wysłania żądania dotyczącego szczegółów miejsca, a następnie do użycia otrzymanych danych o miejscu do dodania znacznika na mapie.

Usługa Miejsca (starsza wersja)

Poniższy skrócony fragment kodu pokazuje, jak wysłać żądanie dotyczące szczegółów miejsca za pomocą funkcji PlacesService. Żądanie używa wywołania zwrotnego i zawiera wymaganą kontrolę warunkową PlacesServiceStatus. Wymagane pola danych miejsca są określone w treści żądania.

function getPlaceDetails() {
  // Instantiate the Places Service.
  const service = new google.maps.places.PlacesService(map);

  // Make a request using the Place ID.
  const request = {
    placeId: "ChIJN1t_tDeuEmsRUsoyG83frY4",
    fields: ["name", "formatted_address", "place_id", "geometry"],
  };

  // Request place details.
  service.getDetails(request, (place, status) => {
    // Check whether PlacesServiceStatus is OK.
    if (
      status === google.maps.places.PlacesServiceStatus.OK &&
      place &&
      place.geometry &&
      place.geometry.location
    ) {

      // Log the result.
      console.log(place.name);
      console.log(place.formatted_address);

      // Add a marker for the place.
      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
        title: place.name,
      });
    }
  });
}

Więcej informacji

Miejsce zajęć (nowość)

Ten skrócony fragment kodu pokazuje, jak wysłać żądanie dotyczące szczegółów miejsca za pomocą klasy Place. Żądanie jest asynchroniczne i nie zawiera sprawdzania stanu (można użyć standardowego sposobu obsługi błędów). Identyfikator miejsca służy do tworzenia nowych instancji Place, które są używane do wysyłania żądań (fetchFields()). Wymagane pola danych miejsca nie są przekazywane, dopóki nie zostanie wywołana funkcja fetchFields(), co zapewnia większą elastyczność. Metoda fetchFields() używa operatora await, dlatego można jej używać tylko wewnątrz funkcji async.

async function getPlaceDetails() {
  // Use place ID to create a new Place instance.
  const place = new google.maps.places.Place({
    id: "ChIJN5Nz71W3j4ARhx5bwpTQEGg",
    requestedLanguage: "en", // optional
  });

  // Call fetchFields, passing the needed data fields.
  await place.fetchFields({
    fields: ["displayName", "formattedAddress", "location"],
  });

  // Log the result.
  console.log(place.displayName);
  console.log(place.formattedAddress);

  // Add an Advanced Marker.
  const marker = new google.maps.marker.AdvancedMarkerElement({
    map,
    position: place.location,
    title: place.displayName,
  });
}

Więcej informacji