Na tej stronie znajdziesz wyjaśnienie różnic między wyszukiwaniem w pobliżu używanym w klasie Place
(nowa) a PlacesService
(starsza) oraz fragmenty kodu do porównania.
- Starsza wersja usługi
PlacesService
zawiera metodęnearbySearch()
, która umożliwia wyszukiwanie miejsc w określonym obszarze według słowa kluczowego lub typu. - Klasa
Place
ma metodęsearchNearby()
, która umożliwia wyszukiwanie miejsc w określonym obszarze według typu miejsca. W tym celu możesz skorzystać z rozszerzonego wyboru pól danych miejsc i typów miejsc, aby zwiększyć elastyczność.
W tej tabeli opisano niektóre główne różnice między metodami wyszukiwania w pobliżu w klasie Place
i PlacesService
:
PlacesService (starsza wersja) |
Place (Nowy) |
---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
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. |
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 miejscach. Klasa Place zawiera rozszerzony i regularnie aktualizowany zestaw pól. |
Ograniczony do stałego zestawu typów miejsc. | Dostęp do powiększonego i regularnie aktualizowanego wyboru typów miejsc. |
Obsługiwane wyszukiwanie tekstowe z słowem kluczowym. | Wyszukiwanie tekstowe nie jest obsługiwane. Zamiast tego użyj opcji Wyszukiwanie tekstowe (nowa). |
Porównanie kodu
W tej sekcji porównujemy kod metod wyszukiwania w pobliżu, 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.
Wyszukiwanie w pobliżu (starsza wersja)
Starsza funkcja wyszukiwania w pobliżu umożliwia wyszukiwanie miejsc w określonym obszarze według słowa kluczowego lub typu. Nie można ograniczać wyszukiwania za pomocą pól danych o miejscach, dlatego wszystkie dostępne pola są zwracane z każdym żądaniem.
Poniższy fragment kodu pokazuje wywołanie funkcji nearbySearch()
, aby zwrócić informacje o restauracjach w Sydney w Australii. Żądanie jest synchroniczne, używa wywołania zwrotnego i zawiera wymagany sprawdzający warunek w przypadku PlacesServiceStatus
.
let map;
let service;
function initMap() {
const sydney = new google.maps.LatLng(-33.867, 151.195);
map = new google.maps.Map(document.getElementById("map"), {
center: sydney,
zoom: 15,
});
const request = {
location: sydney,
radius: '500',
type: ['restaurant']
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
// Helper function to create markers.
function createMarker(place) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
title: place.name,
});
}
Więcej informacji
- Zobacz dokumentację starszej wersji wyszukiwania w pobliżu
- Zobacz materiał referencyjny
searchNearby()
Wyszukiwanie w pobliżu (nowość)
Nowa wersja wyszukiwania w pobliżu jest lepsza od poprzedniej pod tymi względami:
- Możliwość określenia, które pola danych o miejscach mają być zwracane.
- Używanie obietnic, które umożliwiają działanie asynchroniczne.
- Nie trzeba sprawdzać stanu
PlacesService
; można użyć standardowej obsługi błędów.
Poniższy fragment kodu pokazuje funkcję, która wysyła żądanie wyszukiwania w pobliżu dotyczące restauracji. Ten przykład pokazuje użycie opcji rankPreference
do sortowania wyników wyszukiwania według popularności (w poprzedniej wersji ranking jest określany za pomocą opcji rankBy
). Metoda searchNearby()
używa operatora await
, dlatego można jej używać tylko w ramach funkcji async
.
async function nearbySearch() {
// Restrict within the map viewport.
let center = new google.maps.LatLng(52.369358, 4.889258);
const request = {
// Required parameters.
fields: ["displayName", "location", "businessStatus"],
locationRestriction: {
center: center,
radius: 500,
},
// Optional parameters.
includedPrimaryTypes: ["restaurant"],
maxResultCount: 5,
rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
language: "en-US",
region: "us",
};
const { places } = await google.maps.places.Place.searchNearby(request);
if (places.length) {
console.log(places);
// Create a new bounds, which will be extended with each result.
const bounds = new google.maps.LatLngBounds();
// Loop through and get all the results.
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");
}
}