В экосистеме Google Maps JavaScript API на базе Google Maps Platform существуют два близких по назначению механизма работы с пользовательским вводом: Autocomplete и SearchBox. Оба инструмента предназначены для преобразования текстового запроса в географические объекты, однако различаются по уровню абстракции, модели данных, управлению запросами и степени контроля над результатом.
Autocomplete представляет собой механизм предсказания мест (place predictions) на основе частично введённого текста. Его ключевая цель — по мере ввода пользователя формировать список структурированных предложений, связанных с конкретными объектами Places API.
Autocomplete существует в двух формах:
Autocomplete (виджет, привязанный к input)AutocompleteService (низкоуровневый сервис без UI)Autocomplete не выполняет полноценный поиск по карте. Вместо этого он:
place predictions)place_idgetPlaceDetails для
получения полной информацииРезультаты Autocomplete содержат:
description — человекочитаемое названиеplace_id — уникальный идентификатор объектаstructured_formatting — разбивка строкиtypes — тип объекта (geocode, establishment, address и
др.)SearchBox представляет собой более высокоуровневый компонент, ориентированный на выполнение текстового поиска по Places API с возвратом результатов, приближенных к классическому поиску.
SearchBox:
SearchBox:
PlacesResultAutocomplete строится вокруг двухступенчатой модели:
Autocomplete → place predictionsPlace Details → полная информацияЭто позволяет:
SearchBox использует одноступенчатую модель:
Результаты уже содержат базовую информацию, что уменьшает необходимость дополнительного запроса, но снижает гибкость.
{
description: "Berlin, Germany",
place_id: "ChIJAVkDPzdOqEcRcDteW0YgIQQ",
types: ["locality", "political"]
}
Дальнейший шаг обязателен:
placesService.getDetails({ placeId })
{
name: "Berlin",
geometry: {
location: { lat: 52.52, lng: 13.405 }
},
place_id: "ChIJAVkDPzdOqEcRcDteW0YgIQQ",
formatted_address: "Berlin, Germany"
}
Детализация часто уже включена.
AutocompleteSessionToken)Особенность: пользовательская сессия объединяет серию запросов в одну биллинговую единицу, снижая стоимость и повышая релевантность.
Autocomplete позволяет задавать:
bounds — ограничение географической областиlocationBias — смещение результатаcomponentRestrictions — фильтрация по странеtypes — ограничение типа объектовПример:
const autocomplete = new google.maps.places.Autocomplete(input, {
types: ["geocode"],
componentRestrictions: { country: "de" },
bounds: germanyBounds
});
SearchBox также поддерживает bounds, но:
const autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.addListener("place_changed", () => {
const place = autocomplete.getPlace();
});
const service = new google.maps.places.AutocompleteService();
service.getPlacePredictions(
{ input: "Ber", types: ["(cities)"] },
callback
);
const searchBox = new google.maps.places.SearchBox(input);
searchBox.addListener("places_changed", () => {
const places = searchBox.getPlaces();
});
| Характеристика | Autocomplete | SearchBox |
|---|---|---|
| Тип результата | Предсказания | Полные места |
| place_id | Да | Да |
| Геометрия | Нет (до details) | Частично |
| Адрес | Нет | Да |
| Тип фильтрации | Жёсткая | Мягкая |
| Доп. запрос | Обязателен | Часто не нужен |
Autocomplete ориентирован на:
SearchBox ориентирован на:
Событие:
place_changedРезультат:
getPlace())Событие:
places_changedРезультат:
Autocomplete фактически является интерфейсом к:
SearchBox работает ближе к:
Разница заключается в уровне абстракции:
Autocomplete приводит к проектированию интерфейсов с:
SearchBox приводит к интерфейсам:
Autocomplete и SearchBox не являются взаимозаменяемыми компонентами. Различие заключается не только в UI, но и в архитектуре обработки данных:
Эта разница определяет поведение всей системы взаимодействия с географическими данными в Google Maps Platform, включая стоимость запросов, точность данных и стратегию интеграции в приложения.