На этой странице объясняются различия между функциями текстового поиска мест в классе Place
(новый) и PlacesService
(устаревший), а также приводятся некоторые фрагменты кода для сравнения.
Устаревшая PlacesService
имеет следующие методы текстового поиска:
- Метод
findPlaceFromQuery()
, который принимает текстовый запрос и возвращает результат одного места, а также поддерживает использование полей данных о месте. - Метод
findPlaceFromPhoneNumber()
, который позволяет искать место по номеру телефона и поддерживает использование полей данных о месте. - Метод
textSearch()
, который принимает текстовый запрос и возвращает список результатов мест.textSearch()
старше и не поддерживает использование полей данных о месте.
Новый класс Place
предлагает метод Place.searchByText()
, который позволяет искать места с помощью текстового запроса или номера телефона, а также позволяет настраивать поиск, используя расширенный выбор регулярно обновляемых полей данных о местах и типов мест.
В следующей таблице перечислены некоторые основные различия в методах поиска мест между классами Place
и PlacesService
:
PlacesService (устаревшая версия) | Place (Новое) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber() | searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest | SearchByTextRequest |
Ограниченные возможности запроса. | Более широкие возможности запроса. |
Требуется использование обратного вызова для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus . | Использует обещания и работает асинхронно. |
Требуется проверка PlacesServiceStatus . | Не требуется проверка статуса, можно использовать стандартную обработку ошибок. |
Поддерживается только смещение местоположения. | Поддерживает предвзятость местоположения и ограничение местоположения. |
Поля данных о месте отформатированы с использованием змеиного регистра. | Поля данных о местах отформатированы с использованием верблюжьего регистра. |
Возвращает одноместный результат. | Возвращает результаты до 20 мест. |
Ограничено фиксированным набором типов мест и полей данных о местах . | Предоставляет расширенный выбор регулярно обновляемых типов мест и полей данных о местах . |
textSearch() | searchByText() |
Возвращает все доступные поля данных ( подмножество поддерживаемых полей ); не может быть ограничено конкретными полями. | Возвращает только запрошенные поля данных о месте . |
Сравнение кода
В этом разделе сравнивается код методов текстового поиска, чтобы проиллюстрировать различия между службой Places и классом Place. Фрагменты кода показывают код, необходимый для каждого соответствующего API для выполнения текстового поискового запроса.
Служба мест (устаревшая версия)
В следующем фрагменте кода показано использование метода findPlaceFromQuery()
для поиска места. Запрос является синхронным и включает условную проверку PlacesServiceStatus
. Необходимые поля данных о месте указаны в теле запроса, который определяется до выполнения фактического запроса.
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);
}
});
}
Узнать больше
Текстовый поиск (новинка)
В следующем фрагменте кода показано использование метода searchByText()
для поиска мест. Запрос является асинхронным и не требует проверки статуса (можно использовать стандартную обработку ошибок). В этом примере запрос включает maxResultCount
, равный 8 (значение должно находиться в диапазоне от 1 до 20). Эта функция циклически перебирает результаты и добавляет маркер для каждого из них, корректируя границы карты в зависимости от положения маркеров. Поскольку метод searchByText()
использует оператор await
, его можно использовать только внутри 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");
}
}
Метод searchByText()
поддерживает гораздо больше вариантов запроса по сравнению с предыдущей версией, в том числе:
-
includedType
, который позволяет ограничить поиск определенным типом места. -
isOpenNow
, который позволяет ограничить поиск и возвращать только открытые места. -
minRating
, который позволяет отфильтровывать результаты ниже указанного предела (например, возвращать только места с тремя звездами и более). -
locationRestriction
, который пропускает результаты за пределами указанного местоположения (также поддерживаетсяlocationBias
).