Na tej stronie wyjaśniamy różnice między funkcjami wyszukiwania miejsc na podstawie tekstu w
klasie Place (nowa) i
PlacesService
(starsza wersja) oraz podajemy kilka fragmentów kodu do porównania.
Starsza wersja PlacesService ma te metody wyszukiwania na podstawie tekstu:
- Metoda
findPlaceFromQuery(), która przyjmuje zapytanie tekstowe i zwraca pojedynczy wynik miejsca oraz obsługuje użycie pól danych miejsca. - Metoda
findPlaceFromPhoneNumber(), która umożliwia wyszukiwanie miejsca za pomocą numeru telefonu i obsługuje użycie pól danych miejsca. - Metoda
textSearch(), która przyjmuje zapytanie tekstowe i zwraca listę wyników miejsc.textSearch()jest starsza i nie obsługuje użycia pól danych miejsca.
Nowa klasa Place oferuje metodę Place.searchByText(), która umożliwia
wyszukiwanie miejsc za pomocą zapytania tekstowego lub numeru telefonu oraz dostosowywanie wyszukiwań za pomocą rozszerzonego wyboru regularnie aktualizowanych pól danych miejsca
i typów miejsc.
W tabeli poniżej znajdziesz niektóre z głównych różnic w metodach wyszukiwania miejsc
między klasą Place a PlacesService:
PlacesService (starsza wersja) |
Place (nowa) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| Ograniczone opcje zapytań. | Bardziej rozbudowane opcje zapytań. |
Wymaga użycia wywołania zwrotnego do obsługi obiektu wyników i
google.maps.places.PlacesServiceStatus odpowiedzi. |
Używa obietnic 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 preferencje lokalizacji. | Obsługuje preferencje lokalizacji i ograniczenia lokalizacji. |
| Pola danych miejsca są formatowane za pomocą notacji snake_case. | Pola danych miejsca są formatowane za pomocą notacji camelCase. |
| Zwraca pojedynczy wynik miejsca. | Zwraca maksymalnie 20 wyników miejsc. |
| Ogranicza się do stałego zestawu typów miejsc i pól danych miejsca. | Udostępnia rozszerzony wybór regularnie aktualizowanych typów miejsc i pól danych miejsca. |
textSearch() |
searchByText() |
| Zwraca wszystkie dostępne pola danych (a podzbiór obsługiwanych pól); nie można ograniczyć do określonych pól. | Zwraca tylko żądane pola danych miejsca. |
Porównanie kodu
W tej sekcji porównujemy kod metod wyszukiwania na podstawie tekstu, aby zilustrować różnice między usługą Places a klasą Place. Fragmenty kodu pokazują kod wymagany w każdym interfejsie API do wysłania żądania wyszukiwania na podstawie tekstu.
Usługa Places (starsza wersja)
Poniższy fragment kodu pokazuje, jak użyć metody findPlaceFromQuery() do wyszukania miejsca. Żądanie jest synchroniczne i zawiera warunkowe sprawdzenie PlacesServiceStatus. Potrzebne pola danych miejsca 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
Wyszukaj tekst (nowe)
Poniższy fragment kodu pokazuje, jak użyć metody searchByText() do wyszukania 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 maxResultCount równy 8 (wartość musi mieścić się w zakresie od 1 do 20). Ta funkcja przechodzi przez wyniki i dodaje znacznik dla każdego z nich, dostosowując granice mapy na podstawie pozycji znaczników. Ponieważ metoda searchByText() używa operatora await, 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, m.in.:
includedType, która umożliwia ograniczenie wyszukiwania do określonego typu miejsca.isOpenNow, która umożliwia ograniczenie wyszukiwania do miejsc, które są otwarte.minRating, która umożliwia odfiltrowanie wyników poniżej określonego limitu (np. zwracanie tylko miejsc z co najmniej 3 gwiazdkami).locationRestriction, która pomija wyniki poza określoną lokalizacją (obsługiwana jest teżlocationBias).
Więcej informacji
- Zobacz pełny przykładowy kod
- Zobacz dokumentację funkcji Wyszukaj tekst (nowe)
- Zobacz dokumentację
searchByText()