Работа с местами в Google через Google Maps JavaScript API и библиотеку Places неизбежно связана с фильтрацией результатов по типам объектов. Типизация мест определяет, какие категории точек интереса возвращаются при поиске, автодополнении и запросах к сервису мест.
Каждое место в экосистеме Google Maps относится к одной или нескольким категориям. Эти категории называются place types и описывают функциональную или географическую сущность объекта:
restaurantcafehospitalschoollodgingstoretourist_attractionparkairporttrain_stationТипы используются для:
Типизация работает как фильтр верхнего уровня: сервис сначала находит кандидатов, затем применяет ограничения по типам.
Метод nearbySearch в PlacesService
позволяет ограничивать выдачу по типам через параметр
type.
const service = new google.maps.places.PlacesService(map);
service.nearbySearch(
{
location: { lat: 51.1694, lng: 71.4491 },
radius: 1500,
type: "restaurant"
},
callback
);
Особенности ограничений:
Пример поведения: при type: "restaurant" могут
возвращаться также заведения с подтипами вроде
meal_takeaway или food, если они
классифицированы системой как релевантные.
Метод textSearch использует параметр type
как мягкий фильтр:
service.textSearch(
{
query: "coffee",
type: "cafe"
},
callback
);
Ограничения:
Таким образом, тип здесь работает как приоритет сортировки, а не жёсткое ограничение.
Autocomplete в Places Library использует параметр types,
который ограничивает список предложений:
const autocomplete = new google.maps.places.Autocomplete(input, {
types: ["establishment"]
});
Основные ограничения:
допускается массив типов, но с ограниченной семантикой;
часто используется только один из режимов:
geocodeaddressestablishment(regions)(cities)точечные типы (например, restaurant) в
автодополнении работают не всегда напрямую и часто заменяются общим
establishment.
Особенность заключается в том, что Autocomplete работает не с финальными объектами, а с предсказаниями, поэтому фильтрация типов носит статистический характер.
Типы мест в системе Google Maps не являются строго иерархическими деревьями, но имеют перекрывающиеся категории.
Например:
restaurant ∈ food_and_drinkcafe ∈ food_and_drinktourist_attraction может пересекаться с
museumstore может включать подтипы book_store,
clothing_storeИз-за этого ограничения типов работают не как жёсткая фильтрация, а как семантическое сужение пространства поиска.
Не все типы доступны во всех методах API.
Типичные ограничения:
Примеры несовместимости:
train_station может не работать в Autocomplete;administrative_area_level_3 используется только в
геокодировании;Каждое место может иметь массив типов:
"types": ["restaurant", "food", "establishment"]
Особенности:
Логика фильтра:
Типы часто используются вместе с другими параметрами:
radiuslocationkeywordrankByОднако существуют ограничения:
rankBy: DISTANCE и keyword в некоторых
конфигурациях;type не может заменить текстовый поиск;Если фильтры противоречат друг другу:
Пример конфликта:
type: "hospital"keyword: "restaurant"В таком случае результаты либо будут пустыми, либо система отдаст приоритет типу в зависимости от метода.
В новых версиях Places API (v1) вводятся более точные поля:
includedPrimaryTypesexcludedPrimaryTypesОсобенности:
Пример логики:
restaurant, cafefast_foodТакой подход уменьшает неоднозначность, характерную для старого
type параметра.
Если ни одно место не соответствует типу:
Это поведение связано с приоритетом пользовательского запроса над фильтрами.
Система Places использует внутреннюю индексацию:
Это означает:
Ограничения типов влияют на:
Типизация выступает как основной механизм семантической фильтрации в Google Maps JavaScript API, определяя структуру взаимодействия с данными мест.