На этой странице объясняются различия между функциями текстового поиска мест в классе Place
(новый) и PlacesService
(устаревший), а также приводятся некоторые фрагменты кода для сравнения.
Устаревший PlacesService
имеет следующие методы текстового поиска:
- Метод
findPlaceFromQuery()
, который принимает текстовый запрос и возвращает один результат по месту, а также поддерживает использование полей данных о месте. - Метод
findPlaceFromPhoneNumber()
, который позволяет искать место по номеру телефона и поддерживает использование полей данных о месте. - Метод
textSearch()
, который принимает текстовый запрос и возвращает список результатов мест.textSearch()
устарел и не поддерживает использование полей данных мест.
Новый класс Place
предлагает метод Place.searchByText()
, который позволяет искать места с помощью текстового запроса или номера телефона, а также позволяет настраивать поиск с помощью расширенного набора регулярно обновляемых полей данных о местах и типов мест.
В следующей таблице перечислены некоторые основные различия в методах поиска мест между классом Place
и PlacesService
:
PlacesService (устаревший) | Place (Новое) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber() | searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest | SearchByTextRequest |
Ограниченные возможности запроса. | Более расширенные возможности запроса. |
Требуется использование обратного вызова для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus . | Использует Promises и работает асинхронно. |
Требуется проверка PlacesServiceStatus . | Проверка статуса не требуется, можно использовать стандартную обработку ошибок. |
Поддерживает только смещение местоположения. | Поддерживает смещение местоположения и ограничение местоположения. |
Поля данных о месте отформатированы с использованием Snake Case. | Поля данных о месте форматируются с использованием CamelCase. |
Возвращает результат в одном месте. | Возвращает результаты до 20 мест. |
Ограничено фиксированным набором типов мест и полей данных о местах . | Предоставляет расширенный выбор регулярно обновляемых типов мест и полей данных о местах . |
textSearch() | searchByText() |
Возвращает все доступные поля данных ( подмножество поддерживаемых полей ); нельзя ограничить конкретными полями. | Возвращает только запрошенные поля данных о месте . |
Сравнение кодов
В этом разделе сравнивается код для методов текстового поиска, чтобы проиллюстрировать различия между Places Service и классом 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
).
Узнать больше
- Посмотреть полный пример кода
- См. документацию по текстовому поиску (новый)
- См. справочник
searchByText()