Na tej stronie wyjaśniamy różnice między funkcjami wyszukiwania miejsc na podstawie tekstu w klasie Place (nowej) i PlacesService (starszej) oraz podajemy kilka fragmentów kodu do porównania.
Starsza wersja PlacesService ma te metody wyszukiwania tekstowego:
- Metoda
findPlaceFromQuery(), która przyjmuje zapytanie tekstowe i zwraca pojedynczy wynik dotyczący miejsca oraz obsługuje pola 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 miejsc.
Nowa klasa Place udostępnia metodę Place.searchByText(), która umożliwia wyszukiwanie miejsc za pomocą zapytania tekstowego lub numeru telefonu oraz dostosowywanie wyszukiwania za pomocą rozszerzonego wyboru regularnie aktualizowanych pól danych i typów miejsc.
W tabeli poniżej znajdziesz niektóre z głównych różnic między metodami wyszukiwania miejsc w klasach Place i PlacesService:
PlacesService (starsza wersja) |
Place (Nowość) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
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. |
Używa obiektów Promise i działa asynchronicznie. |
Wymaga sprawdzenia PlacesServiceStatus. |
Nie jest wymagane sprawdzanie stanu, można użyć standardowej obsługi błędów. Więcej informacji |
| Obsługuje tylko lokalizację. | Obsługuje lokalizację preferowaną i ograniczenie lokalizacji. |
| Pola danych miejsc są sformatowane przy użyciu zapisu snake_case. | Pola danych o miejscach są sformatowane przy użyciu camelCase. |
| Zwraca wynik dotyczący jednego miejsca. | Zwraca maksymalnie 20 wyników dotyczących 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ć do określonych pól. | Zwraca tylko żądane pola danych o miejscach. |
Porównanie kodu
W tej sekcji porównujemy kod metod wyszukiwania tekstowego, 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 tekstowego.
Places Service (starsza wersja)
Poniższy fragment kodu pokazuje, jak użyć metody findPlaceFromQuery() do wyszukiwania miejsca. Żądanie jest synchroniczne i zawiera sprawdzenie warunkowe w PlacesServiceStatus. Wymagane pola danych miejsca są określone w treści żądania, która jest definiowana przed wysłaniem rzeczywistego żą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
- Zobacz kompletny przykładowy kod
- Zobacz dokumentację
- Dokumentacja interfejsu
FindPlaceFromQueryRequest
Text Search (New)
Poniższy fragment kodu pokazuje, jak używać 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 parametr maxResultCount o wartości 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. 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 żądań w porównaniu z poprzednią wersją, w tym:
includedType, która umożliwia ograniczenie wyszukiwania do określonego typu miejsca.isOpenNow, który pozwala ograniczyć wyszukiwanie tylko do miejsc, które są otwarte.minRating, który umożliwia odfiltrowanie wyników poniżej określonego limitu (np. zwracanie tylko miejsc z co najmniej 3 gwiazdkami).locationRestriction, który pomija wyniki spoza określonej lokalizacji (obsługiwany jest też parametrlocationBias).
Więcej informacji
- Zobacz kompletny przykładowy kod
- Zobacz dokumentację dotyczącą wyszukiwania tekstowego (nowego)
- Zobacz dokumentację
searchByText()