Zur neuen Place Search migrieren

Auf dieser Seite werden die Unterschiede zwischen den textbasierten Funktionen für die Ortssuche in der Klasse Place (neu) und PlacesService (alt) erläutert. Außerdem finden Sie hier einige Code-Snippets zum Vergleich.

Die alte PlacesService bietet die folgenden textbasierten Suchmethoden:

  • Die Methode findPlaceFromQuery() nimmt eine Textabfrage entgegen und gibt ein einzelnes Ortsergebnis zurück. Außerdem unterstützt sie die Verwendung von Ortsdatenfeldern.
  • Die findPlaceFromPhoneNumber()-Methode, mit der Sie anhand einer Telefonnummer nach einem Ort suchen können und die die Verwendung von Ortsdatenfeldern unterstützt.
  • Die Methode textSearch() nimmt eine Textabfrage entgegen und gibt eine Liste von Ortsergebnissen zurück. textSearch() ist älter und unterstützt keine Ortsdatenfelder.

Die neue Place-Klasse bietet die Methode Place.searchByText(), mit der Sie entweder per Textabfrage oder Telefonnummer nach Orten suchen und Ihre Suchanfragen mit einer erweiterten Auswahl an regelmäßig aktualisierten Ortsdatenfeldern und Ortstypen anpassen können.

In der folgenden Tabelle sind einige der wichtigsten Unterschiede bei den Methoden für die Ortssuche zwischen der Klasse Place und PlacesService aufgeführt:

PlacesService (alt) Place (neu)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Begrenzte Abfrageoptionen. Erweiterte Abfrageoptionen
Es ist ein Callback erforderlich, um das Ergebnisobjekt und die google.maps.places.PlacesServiceStatus-Antwort zu verarbeiten. Verwendet Promises und funktioniert asynchron.
Erfordert ein Häkchen bei PlacesServiceStatus. Keine Statusprüfung erforderlich, Standardfehlerbehandlung kann verwendet werden.
Unterstützt nur Standortvorgaben. Unterstützt Standortvorgaben und Standortbeschränkungen.
Ortsdatenfelder werden in Snake Case formatiert. Felder für Ortsdaten werden in Camel Case formatiert.
Gibt ein einzelnes Ortsergebnis zurück. Gibt bis zu 20 Ortsergebnisse zurück.
Beschränkt auf eine feste Anzahl von Ortstypen und Ortsdatenfeldern. Bietet eine erweiterte Auswahl an regelmäßig aktualisierten Ortstypen und Ortsdatenfeldern.
textSearch()
searchByText()
Es werden alle verfügbaren Datenfelder zurückgegeben (ein Teil der unterstützten Felder). Die Anfrage kann nicht auf bestimmte Felder beschränkt werden. Es werden nur die angeforderten Ortsdatenfelder zurückgegeben.

Codevergleich

In diesem Abschnitt wird Code für Textsuchmethoden verglichen, um die Unterschiede zwischen dem Places-Dienst und der Place-Klasse zu veranschaulichen. Die Code-Snippets zeigen den Code, der für die jeweilige API erforderlich ist, um eine textbasierte Suchanfrage zu stellen.

Places Service (Legacy)

Im folgenden Code-Snippet wird gezeigt, wie mit der Methode findPlaceFromQuery() nach einem Ort gesucht wird. Die Anfrage ist synchron und enthält eine bedingte Prüfung von PlacesServiceStatus. Die erforderlichen Felder für Ortsdaten werden im Anfragetext angegeben, der vor der eigentlichen Anfrage definiert wird.

function findPlaces() {
  const request = {
    query: "Museum of Contemporary Art Australia",
    fields: ["name", "geometry"],
  };

  // Create an instance of PlacesService.
  service = new google.maps.places.PlacesService(map);

  // Make a findPlaceFromQuery request.
  service.findPlaceFromQuery(request, (results, status) => {
    let place = results[0];
    if (status === google.maps.places.PlacesServiceStatus.OK && results) {
      if (!place.geometry || !place.geometry.location) return;

      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
      });
      map.setCenter(place.geometry.location);
    }
  });
}

Weitere Informationen

Text Search (New)

Im folgenden Code-Snippet wird die Methode searchByText() verwendet, um nach Orten zu suchen. Die Anfrage ist asynchron und erfordert keine Statusprüfung (die standardmäßige Fehlerbehandlung kann verwendet werden). In diesem Beispiel enthält die Anfrage den Wert „8“ für maxResultCount. Der Wert muss zwischen 1 und 20 liegen. Diese Funktion durchläuft die Ergebnisse und fügt für jedes eine Markierung hinzu. Die Kartengrenzen werden anhand der Position der Markierungen angepasst. Da die searchByText()-Methode den Operator await verwendet, kann sie nur in einer async-Funktion verwendet werden.

async function findPlaces() {
  // Define a request.
  // The `fields` property is required; all others are optional.
  const request = {
    fields: ["displayName", "location", "businessStatus"],
    textQuery: "Tacos in Mountain View",
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    minRating: 3.2,
    region: "us",
    useStrictTypeFiltering: false,
  };

  // Call searchByText passing the request.
  const { places } = await google.maps.places.Place.searchByText(request);

  // Add a marker for each result.
  if (places.length) {
    const bounds = new google.maps.LatLngBounds();

    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

Die Methode searchByText() unterstützt im Vergleich zur vorherigen Version viele weitere Anfrageoptionen, darunter:

  • includedType, mit dem Sie die Suche auf einen bestimmten Ortstyp eingrenzen können.
  • isOpenNow, mit dem Sie Suchanfragen so einschränken können, dass nur geöffnete Orte zurückgegeben werden.
  • minRating, mit dem Sie Ergebnisse unter dem angegebenen Grenzwert herausfiltern können (z. B. nur Orte mit mindestens drei Sternen zurückgeben).
  • locationRestriction, wodurch Ergebnisse außerhalb des angegebenen Standorts ausgeschlossen werden (locationBias wird ebenfalls unterstützt).

Weitere Informationen