Na tej stronie wyjaśniamy różnice między wyszukiwaniem w pobliżu w klasie Place (nowa) i PlacesService (starsza) oraz podajemy kilka fragmentów kodu do porównania.
- Starsza wersja
PlacesServicema metodęnearbySearch(), która umożliwia wyszukiwanie miejsc na określonym obszarze według słowa kluczowego lub typu. - Klasa
Placema metodęsearchNearby(), która umożliwia wyszukiwanie miejsc na określonym obszarze według typu miejsca. Wykorzystuje ona rozszerzony wybór pól danych i typów miejsc, co zapewnia większą elastyczność.
W tabeli poniżej znajdziesz niektóre z głównych różnic między metodami wyszukiwania w pobliżu w klasach Place i PlacesService:
PlacesService (starsza wersja) |
Place (Nowość) |
|---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
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ę preferowaną. | Obsługuje lokalizację preferowaną i ograniczenie lokalizacji. |
| 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 miejsca. Klasa Place oferuje rozszerzony i regularnie aktualizowany wybór pól. |
| Ograniczone do stałego zestawu typów miejsc. | Uzyskaj dostęp do rozszerzonego i regularnie aktualizowanego wyboru typów miejsc. |
| Obsługiwane wyszukiwanie tekstowe z użyciem słowa kluczowego. | Wyszukiwanie tekstowe nie jest obsługiwane. Zamiast tego użyj wyszukiwania tekstowego (nowego). |
Porównanie kodu
W tej sekcji porównujemy kod metod wyszukiwania w pobliżu, 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.
Wyszukiwanie w pobliżu (starsza wersja)
Starsza wersja wyszukiwania w pobliżu umożliwia wyszukiwanie miejsc na określonym obszarze według słowa kluczowego lub typu. Nie można ograniczyć wyszukiwania za pomocą pól danych o miejscu, więc w każdym żądaniu zwracane są wszystkie dostępne pola.
Poniższy fragment kodu pokazuje wywołanie nearbySearch(), które zwraca informacje o restauracjach w Sydney w Australii. Żądanie jest synchroniczne, używa wywołania zwrotnego i zawiera wymagane sprawdzenie warunkowe w 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ę dotyczącą starszej wersji wyszukiwania w pobliżu
- Zobacz dokumentację
searchNearby()
Wyszukiwanie w pobliżu (nowa wersja)
Nowa wersja wyszukiwania w pobliżu ulepsza poprzednią wersję w następujący sposób:
- możliwość określenia, które pola danych o miejscu mają być zwracane;
- użycie obiektów Promise, które umożliwiają działanie asynchroniczne;
- Nie trzeba sprawdzać stanu
PlacesService. Zamiast tego 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 restauracji. Ten przykład pokazuje, jak użyć opcji rankPreference, aby uszeregować wyniki 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 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");
}
}
Więcej informacji
- Zobacz kompletny przykładowy kod
- Zobacz dokumentację dotyczącą wyszukiwania w pobliżu (nowa wersja)
- Zobacz dokumentację
searchNearby()