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życiu 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 o miejscach są sformatowane w sposób snake case. Pola danych o miejscach są sformatowane w sposób odwróconego kasztana.
Ograniczone do stałego zbioru typów miejsc i pol danych o miejscach. Udostępnia rozszerzony wybór 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

Umieść zajęcia (nowość)

Ten skrócony fragment kodu pokazuje żądanie szczegółów miejsca wysłane 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 utworzenia nowej instancji Place, która jest używana do wysłania żądania (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 w ramach 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