Na tej stronie znajdziesz wyjaśnienie różnic między funkcjami wyszukiwania miejsc opartymi na tekście w klasie Place
(nowej) i PlacesService
(starszej) 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 miejsca, a także obsługuje pola danych o miejscach. - Metoda
findPlaceFromPhoneNumber()
, która umożliwia wyszukiwanie miejsca za pomocą numeru telefonu i obsługuje pola danych o miejscach. - Metoda
textSearch()
, która przyjmuje zapytanie tekstowe i zwraca listę wyników wyszukiwania.textSearch()
jest starszy i nie obsługuje pól danych o miejscach.
Nowa klasa Place
udostępnia metodę Place.searchByText()
, która umożliwia wyszukiwanie miejsc za pomocą zapytania tekstowego lub numeru telefonu. Pozwala też dostosowywać wyszukiwania za pomocą rozszerzonego wyboru regularnie aktualizowanych pól danych o miejscach i typów miejsc.
W tej tabeli opisano niektóre z głównych różnic między metodami wyszukiwania miejsc w klasie Place
a klasie 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 odpowiedzi google.maps.places.PlacesServiceStatus . |
Korzysta z obietnic i działa asynchronicznie. |
Wymaga sprawdzenia PlacesServiceStatus . |
Nie wymaga sprawdzania stanu, może używać standardowej obsługi błędów. |
Obsługuje tylko uczenie z uwzględnieniem lokalizacji. | Obsługuje ustawienie preferencji lokalizacji i ograniczenia dotyczące lokalizacji. |
Pola danych miejsca są sformatowane w sposób snake case. | Pola danych o miejscach są sformatowane w stylu „camel case”. |
Zwraca wynik dotyczący pojedynczego miejsca. | Zwraca do 20 wyników wyszukiwania miejsc. |
Ograniczone do stałego zbioru typów miejsc i pol danych o miejscach. | Zapewnia większą liczbę regularnie aktualizowanych typów miejsc oraz 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 określonych pól. | Zwraca tylko żądane pola danych o miejscu. |
Porównanie kodu
W tej sekcji porównujemy kod metod wyszukiwania tekstu, aby zilustrować różnice między usługą Places i klasą Place. Fragmenty kodu pokazują kod wymagany w każdym z odpowiednich interfejsów API, aby przesłać żądanie wyszukiwania tekstowego.
Usługa Miejsca (starsza wersja)
Poniższy fragment kodu pokazuje, jak za pomocą metody findPlaceFromQuery()
można wyszukiwać miejsca. Żądanie jest synchroniczne i zawiera sprawdzenie warunkowe PlacesServiceStatus
. Wymagane pola danych miejsca są określone w ciele żądania, które jest definiowane przed wysłaniem żą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
Wyszukaj tekst (nowa funkcja)
Poniższy fragment kodu pokazuje, jak za pomocą metody searchByText()
wyszukiwać miejsca. Żądanie jest asynchroniczne i nie wymaga sprawdzania stanu (można użyć standardowego sposobu obsługi błędów). W tym przykładzie żądanie zawiera parametr maxResultCount
o wartości 8 (wartość musi się mieścić w przedziale od 1 do 20). Ta funkcja przechodzi przez wyniki i dodaje znacznik dla każdego z nich, dostosowując granice mapy na podstawie położenia znaczników. Metoda searchByText()
używa operatora await
, dlatego można jej używać tylko wewnątrz 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 do miejsc, które są otwarte.minRating
, która umożliwia odfiltrowanie wyników poniżej określonego limitu (np. zwracanie tylko miejsc z 3 gwiazdkami lub więcej).locationRestriction
, który pomija wyniki spoza określonej lokalizacji (obsługiwany jest też parametrlocationBias
).