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 nicht die Verwendung von Ortsdatenfeldern.
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)
Das folgende Code-Snippet zeigt die Verwendung der Methode findPlaceFromQuery()
, um nach einem Ort zu suchen. 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)
Das folgende Code-Snippet zeigt die Verwendung der Methode searchByText()
, um nach Orten zu suchen. Die Anfrage ist asynchron und erfordert keine Statusprüfung (Standardfehlerbehandlung kann verwendet werden). In diesem Beispiel enthält die Anfrage einen maxResultCount
-Wert von 8. 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).