Zur neuen Funktion „Place Details“ migrieren

Die Places API kann detaillierte Informationen zu einem bestimmten Ort zurückgeben. Auf dieser Seite werden die Unterschiede zwischen Ortsdetails in der Klasse Place (neu) und PlacesService (alt) erläutert. Außerdem finden Sie einige Code-Snippets zum Vergleich. In der folgenden Tabelle sind einige der Hauptunterschiede bei der Verwendung von Details zu Orten zwischen der Klasse Place und PlacesService aufgeführt:

PlacesService (alt) Place (neu)
getDetails() fetchFields()
PlaceDetailsRequest FetchFieldsRequest
Für Methoden ist ein Callback erforderlich, um das Ergebnisobjekt und die google.maps.places.PlacesServiceStatus-Antwort zu verarbeiten. Verwendet Promises und funktioniert asynchron.
Für Methoden ist eine PlacesServiceStatus-Prüfung erforderlich. Keine Statusprüfung erforderlich, Standardfehlerbehandlung kann verwendet werden.
Ortsdatenfelder werden in Snake Case formatiert. Felder für Ortsdaten werden in Camel Case formatiert.
Beschränkt auf eine feste Anzahl von Ortstypen und Ortsdatenfeldern. Bietet eine erweiterte Auswahl an regelmäßig aktualisierten Ortstypen und Ortsdatenfeldern.

Codevergleich

In diesem Abschnitt werden zwei ähnliche Codestücke verglichen, um die Unterschiede zwischen dem Places-Dienst und der Place-Klasse zu veranschaulichen. Die Code-Snippets zeigen den Code, der für jede API erforderlich ist, um eine Anfrage für Ortsdetails zu stellen. Die resultierenden Ortsdaten werden dann verwendet, um der Karte eine Markierung hinzuzufügen.

Places Service (Legacy)

Im folgenden komprimierten Code-Snippet wird eine Anfrage für Details zu einem Ort mit PlacesService dargestellt. Die Anfrage verwendet einen Rückruf und enthält eine erforderliche bedingte Prüfung für PlacesServiceStatus. Die erforderlichen Place Data-Felder werden im Anfragetext angegeben.

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,
      });
    }
  });
}

Weitere Informationen

Place-Klasse (neu)

Im folgenden komprimierten Code-Snippet wird gezeigt, wie Sie mit der Klasse Place eine Anfrage für Details zu einem Ort stellen. Die Anfrage ist asynchron und enthält keine Statusprüfung (die Standardfehlerbehandlung kann verwendet werden). Mit einer Orts-ID wird eine neue Place-Instanz erstellt, die für die Anfrage (fetchFields()) verwendet wird. Die erforderlichen Ortsdatenfelder werden erst übergeben, wenn fetchFields() aufgerufen wird. Das bietet mehr Flexibilität. Da die fetchFields()-Methode den Operator „await“ verwendet, kann sie nur in einer async-Funktion verwendet werden.

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,
  });
}

Weitere Informationen