На этой странице объясняются различия между поиском поблизости, используемым в классе Place (новый) и в PlacesService (устаревший), а также приводятся фрагменты кода для сравнения.
- В устаревшей версии
PlacesServiceесть методnearbySearch(), который позволяет искать места в указанной области по ключевому слову или типу. - Класс
Placeимеет методsearchNearby(), который позволяет искать места в указанной области по типу места, используя расширенный набор полей данных о местах и типов мест для большей гибкости.
В таблице ниже перечислены некоторые основные различия в методах поиска поблизости между классом Place и PlacesService :
PlacesService (Legacy) | Place (Новое) |
|---|---|
nearbySearch() | searchNearby() |
PlaceSearchRequest | SearchNearbyRequest |
Для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus требуется использование функции обратного вызова. | Использует промисы и работает асинхронно. |
Требуется проверка PlacesServiceStatus . | Проверка состояния не требуется, можно использовать стандартную обработку ошибок. Подробнее . |
| Поддерживается только смещение в сторону местоположения. | Поддерживает предвзятость в отношении местоположения и ограничение выбора местоположения. |
| Возвращает все доступные поля данных ( подмножество поддерживаемых полей ); ограничение только определенными полями невозможно. | Возвращает только запрошенные поля данных о месте ; класс Place предлагает расширенный и регулярно обновляемый набор полей. |
| Ограничено фиксированным набором типов мест . | Получите доступ к расширенному и регулярно обновляемому выбору типов мест . |
| Поддерживается текстовый поиск по ключевому слову . | Поиск по тексту не поддерживается, используйте вместо него текстовый поиск (новый) . |
Сравнение кода
В этом разделе сравнивается код методов поиска поблизости, чтобы проиллюстрировать различия между службой Places и классом Place. Приведенные фрагменты кода показывают код, необходимый для выполнения текстового запроса поиска в каждом из соответствующих API.
Поиск поблизости (устаревшая версия)
Устаревшая функция поиска поблизости позволяет искать места в указанной области по ключевому слову или типу. Ограничение поиска с помощью полей данных о местах невозможно, поэтому каждый запрос возвращает все доступные поля. Следующий фрагмент кода демонстрирует вызов функции nearbySearch() для получения информации о ресторанах в Сиднее, Австралия. Запрос синхронный, использует функцию обратного вызова и включает обязательную проверку условия для 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,
});
}
Узнать больше
- См. документацию по устаревшей версии функции «Поиск поблизости».
- См. справочник по функции
searchNearby()
Поиск поблизости (новый)
Новая версия Nearby Search превосходит свою предшественницу по следующим параметрам:
- Возможность указать, в каких местах следует возвращать поля данных.
- Использование промисов, позволяющих осуществлять асинхронную работу.
- Нет необходимости проверять статус
PlacesService; вместо этого можно использовать стандартную обработку ошибок.
Приведённый ниже фрагмент кода демонстрирует функцию, которая выполняет запрос на поиск ресторанов поблизости. В этом примере показано использование параметра rankPreference для ранжирования результатов поиска по популярности (в предыдущей версии ранжирование задавалось с помощью параметра rankBy ). Поскольку метод searchNearby() использует оператор await , его можно использовать только внутри 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");
}
}
Узнать больше
- См. полный пример кода.
- См. документацию по функции «Поиск поблизости» (новая функция).
- См. справочник по функции
searchNearby()