Na tej stronie znajdziesz wyjaśnienie różnic między funkcjami wyszukiwania miejsc na podstawie tekstu w klasie Place
(nowa) i PlacesService
(starsza) oraz fragmenty kodu do porównania.
Starsza wersja PlacesService
ma te metody wyszukiwania oparte na tekście:
- Metoda
findPlaceFromQuery()
, która przyjmuje zapytanie tekstowe i zwraca pojedynczy wynik dotyczący miejsca oraz obsługuje użycie pól danych o miejscu. - Metoda
findPlaceFromPhoneNumber()
, która umożliwia wyszukiwanie miejsca za pomocą numeru telefonu i obsługuje pola danych o miejscu. - Metoda
textSearch()
, która przyjmuje zapytanie tekstowe i zwraca listę wyników dotyczących miejsc.textSearch()
jest starsza i nie obsługuje pól danych o miejscu.
Nowa klasa Place
oferuje metodę Place.searchByText()
, która umożliwia wyszukiwanie miejsc za pomocą zapytania tekstowego lub numeru telefonu, a także dostosowywanie wyszukiwań za pomocą rozszerzonego wyboru regularnie aktualizowanych pól danych o miejscach i typów miejsc.
W tabeli poniżej znajdziesz główne różnice w metodach wyszukiwania miejsc między klasą Place
a PlacesService
:
PlacesService (starsza wersja) |
Place (Nowy) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
Ograniczone opcje zapytań. | Więcej opcji zapytań. |
Wymaga użycia wywołania zwrotnego do obsługi obiektu wyników i google.maps.places.PlacesServiceStatus odpowiedzi. |
Korzysta z obiektów Promise i działa asynchronicznie. |
Wymaga sprawdzenia PlacesServiceStatus . |
Nie wymaga sprawdzania stanu, można użyć standardowej obsługi błędów. Więcej informacji |
Obsługuje tylko określanie lokalizacji. | Obsługuje preferencje lokalizacyjne i ograniczenia lokalizacyjne. |
Pola danych o miejscach są formatowane za pomocą notacji snake case. | Pola danych o miejscu są sformatowane w notacji camel case. |
Zwraca pojedynczy wynik miejsca. | Zwraca do 20 wyników wyszukiwania miejsc. |
Ograniczone do stałego zestawu typów miejsc i pól danych o miejscach. | Zapewnia rozszerzony wybór regularnie aktualizowanych typów miejsc i pól danych o miejscach. |
textSearch() |
searchByText() |
Zwraca wszystkie dostępne pola danych (podzbiór obsługiwanych pól); nie można ograniczyć go do konkretnych pól. | Zwraca tylko żądane pola z danymi o miejscach. |
Porównanie kodu
W tej sekcji porównujemy kod metod wyszukiwania tekstowego, aby zilustrować różnice między usługą Miejsca a klasą Place. Fragmenty kodu pokazują kod wymagany w poszczególnych interfejsach API do wysyłania żądań wyszukiwania tekstowego.
Usługa Miejsca (starsza wersja)
Poniższy fragment kodu pokazuje użycie metody findPlaceFromQuery()
do wyszukiwania miejsca. Żądanie jest synchroniczne i zawiera sprawdzanie warunkowe w przypadku PlacesServiceStatus
. Wymagane pola danych o miejscu są określone w treści żądania, która jest definiowana przed wysłaniem właściwego żądania.
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);
}
});
}
Więcej informacji
Wyszukiwanie tekstowe (nowość)
Poniższy fragment kodu pokazuje, jak użyć metody searchByText()
do wyszukiwania miejsc. Żądanie jest asynchroniczne i nie wymaga sprawdzania stanu (można użyć standardowej obsługi błędów). W tym przykładzie żądanie zawiera wartość maxResultCount
= 8 (wartość musi mieścić się w przedziale od 1 do 20). Ta funkcja przechodzi w pętli przez wyniki i dodaje znacznik dla każdego z nich, dostosowując granice mapy na podstawie pozycji znaczników. Metoda searchByText()
korzysta z operatora await
, dlatego można jej używać tylko w funkcji async
.
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");
}
}
Metoda searchByText()
obsługuje znacznie więcej opcji żądania niż poprzednia wersja, w tym:
includedType
, która pozwala ograniczyć wyszukiwanie do określonego typu miejsca.isOpenNow
, która pozwala ograniczyć wyszukiwanie tylko do otwartych miejsc.minRating
, która umożliwia odfiltrowanie wyników poniżej określonego limitu (np. zwracanie tylko miejsc z oceną 3 gwiazdki lub wyższą).locationRestriction
, który pomija wyniki spoza określonej lokalizacji (obsługiwany jest też parametrlocationBias
).
Więcej informacji
- Zobacz pełny przykładowy kod
- Zobacz dokumentację wyszukiwania tekstowego (nowa wersja)
- Zobacz
searchByText()
materiał referencyjny