Przejście na nowe szczegóły miejsca

Deweloperzy z Europejskiego Obszaru Gospodarczego (EOG)

Interfejs Places API może zwracać szczegółowe informacje o konkretnym miejscu. Na tej stronie wyjaśniamy różnice między informacjami o miejscu używanymi w klasie Place(nowa wersja) a PlacesService (starsza wersja) oraz podajemy kilka fragmentów kodu do porównania. W tabeli poniżej znajdziesz niektóre z głównych różnic w korzystaniu z informacji o miejscu między klasą Place a PlacesService:

PlacesService (starsza wersja) Place (nowa wersja)
getDetails() fetchFields()
PlaceDetailsRequest FetchFieldsRequest
Metody wymagają użycia wywołania zwrotnego do obsługi obiektu wyników i google.maps.places.PlacesServiceStatus odpowiedzi. Używa obietnic i działa asynchronicznie.
Metody wymagają sprawdzenia PlacesServiceStatus. Nie jest wymagane sprawdzanie stanu, można użyć standardowej obsługi błędów. Więcej informacji.
Pola danych o miejscu są formatowane za pomocą notacji snake case. Pola danych o miejscu są formatowane za pomocą notacji camel case.
Ograniczone do stałego zestawu typów miejsc i pól danych o miejscu. Umożliwia rozszerzony wybór regularnie aktualizowanych typów miejsc i pól danych o miejscu.

Porównanie kodu

W tej sekcji porównujemy 2 podobne fragmenty kodu, aby zilustrować różnice między usługą Places a klasą Place. Fragmenty kodu pokazują kod wymagany w każdym interfejsie API do wysłania żądania informacji o miejscu, a następnie użycia uzyskanych danych o miejscu do dodania znacznika na mapie.

Usługa Places (starsza wersja)

Poniższy skrócony fragment kodu pokazuje, jak wysłać żądanie informacji o miejscu za pomocą PlacesService. Żądanie używa wywołania zwrotnego i zawiera wymagane sprawdzenie warunkowe PlacesServiceStatus. W treści żądania określono wymagane pola danych o miejscu.

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

Klasa Place (nowa wersja)

Poniższy skrócony fragment kodu pokazuje, jak wysłać żądanie informacji o miejscu za pomocą klasy Place. Żądanie jest asynchroniczne i nie zawiera sprawdzania stanu (można użyć standardowej obsługi błędów). Do utworzenia nowej instancji Place używany jest identyfikator miejsca, który służy do wysłania żądania (fetchFields()). Wymagane pola danych o miejscu nie są przekazywane, dopóki nie zostanie wywołana funkcja fetchFields(), co zapewnia większą elastyczność. Ponieważ metoda fetchFields() używa operatora await, można jej używać tylko w 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