Auf dieser Seite werden die Unterschiede zwischen den textbasierten Ortssuchfunktionen in
der Place Klasse (neu) und
dem PlacesService
(Legacy) erläutert. Außerdem finden Sie einige Code-Snippets zum Vergleich.
Der Legacy-Dienst PlacesService bietet die folgenden textbasierten Suchmethoden:
- Die Methode
findPlaceFromQuery()verwendet eine Textabfrage und gibt ein einzelnes Ortsergebnis zurück. Sie unterstützt die Verwendung von Ortsdatenfeldern. - Mit der Methode
findPlaceFromPhoneNumber()können Sie anhand einer Telefonnummer nach einem Ort suchen. Sie unterstützt die Verwendung von Ortsdatenfeldern. - Die Methode
textSearch()verwendet eine Textabfrage und gibt eine Liste von Ortsergebnissen zurück.textSearch()ist älter und unterstützt die Verwendung von Ortsdatenfeldern nicht.
Die neue Klasse Place bietet die Methode Place.searchByText(), mit der Sie
entweder mit einer Textabfrage oder einer Telefonnummer nach Orten suchen können. Außerdem können Sie Ihre Suchanfragen mit einer erweiterten Auswahl an regelmäßig aktualisierten Ortsdatenfeldern und Ortstypen anpassen.
In der folgenden Tabelle sind einige der wichtigsten Unterschiede bei den Ortssuchmethoden
zwischen der Place Klasse und PlacesService aufgeführt:
PlacesService (Legacy) |
Place (Neu) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| Begrenzte Abfrageoptionen. | Umfangreichere Abfrageoptionen. |
Erfordert die Verwendung eines Callbacks, um das Ergebnisobjekt und
google.maps.places.PlacesServiceStatus Antwort zu verarbeiten. |
Verwendet Promises und funktioniert asynchron. |
Erfordert eine PlacesServiceStatus-Prüfung. |
Keine Statusprüfung erforderlich, Standardfehlerbehandlung kann verwendet werden. Weitere Informationen. |
| Unterstützt nur die Standortgewichtung. | Unterstützt Standortgewichtung und Standortbeschränkung. |
| Ortsdatenfelder werden im Snake-Case-Format formatiert. | Ortsdatenfelder werden im Camel-Case-Format 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() |
| Gibt alle verfügbaren Datenfelder zurück (eine Teilmenge der unterstützten Felder); kann nicht auf bestimmte Felder beschränkt werden. | Gibt nur die angeforderten Ortsdatenfelder zurück. |
Codevergleich
In diesem Abschnitt wird der Code für textbasierte Suchmethoden verglichen, um die Unterschiede zwischen dem Places Service und der Klasse „Place“ 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, wie Sie mit der Methode findPlaceFromQuery() nach einem Ort suchen. Die Anfrage ist synchron und enthält eine bedingte Prüfung von PlacesServiceStatus. Die erforderlichen Ortsdatenfelder werden im Anfragetext angegeben, der vor dem Stellen 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
- Vollständigen Beispielcode ansehen
- Dokumentation ansehen
FindPlaceFromQueryRequest-Schnittstellenreferenz
Text Search (New)
Das folgende Code-Snippet zeigt, wie Sie mit der Methode searchByText() nach Orten suchen. Die Anfrage ist asynchron und erfordert keine Statusprüfung (die Standardfehlerbehandlung kann verwendet werden). In diesem Beispiel enthält die Anfrage einen maxResultCount von 8 (der Wert muss zwischen 1 und 20 liegen). Diese Funktion durchläuft die Ergebnisse und fügt für jedes Ergebnis eine Markierung hinzu. Die Kartenbegrenzungen werden anhand der Position der Markierungen angepasst. Da die Methode searchByText() den Operator await verwendet, kann sie nur innerhalb 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 der Sie Suchanfragen auf einen bestimmten Ortstyp beschränken können.isOpenNow, mit der Sie Suchanfragen so einschränken können, dass nur geöffnete Orte zurückgegeben werden.minRating, mit der Sie Ergebnisse unterhalb des angegebenen Grenzwerts herausfiltern können (z. B. nur Orte mit drei oder mehr Sternen zurückgeben).locationRestriction, mit der Ergebnisse außerhalb des angegebenen Standorts ausgelassen werden (locationBiaswird ebenfalls unterstützt).
Weitere Informationen
- Vollständigen Beispielcode ansehen
- Dokumentation für Text Search (New) ansehen
- Referenz zu
searchByText()ansehen