Клуб API Карт

Ограничить зону поиска searchControl координатами (boundedBy)

Пост в архиве.

Не получается ограничить область поиска на карте стандартным элементом searchControl при помощи параметра boundedBy.

 

Задача - ограничить зону поиска элемента управления searchControl координатами, или, хотя бы, первоначальными границами окна.

    

var myMap = new ymaps.Map("YMapsID", {
            // Центр карты
            center: [59.93772, 30.313622],
            // Коэффициент масштабирования
            zoom: 10,
            behaviors: ["default", "scrollZoom"]
        }
   
   
    var mBounds = getBounds( //и еще кучу вариантов... =(
   
     myMap.controls
        // Кнопка изменения масштаба
        .add('zoomControl')
        // Список типов карты
        .add('typeSelector')
        // Поиск
        .add('searchControl', {boundedBy: mBounds})
        // Стандартный набор кнопок
        .add('mapTools');   

 

останавливается после .add('typeSelector')

 

Помогите, пожалуйста...

8 комментариев

 

var mBounds = getBounds();

а что такое getBounds()? Вы его из воздуха взяли?

 

.add('searchControl', {boundedBy: mBounds})

почему вы передаете опции для SearchControl-а в метод add? он принимает вторым параметром позицию контрола, а не опции

Тихонов Станислав
28 января 2016, 04:47

Прошу прощения, конечно же

    var mBounds = myMap.getBounds()

 

А по поводу того, как использовать boundedBy для компонента searchControl- то примеров не нашел. Поэтому помощи и прошу...

судя по документации, метод map.controls.add, принимает первым параметром объект или строковый ключ

controlIControl|StringЭлемент управления или его ключ.

По ключу он получает из хранилища контрол с дефолтными настройками, что не подходит, поэтому надо создать экземпляр нужного контрола и передать его в add,

Идем в control.SearchControl и смотрим какие опции он ждет в конструкторе:


useMapBounds
BooleanФлаг, позволяющий учитывать при поиске границы видимой области карты. При значении true, рассчитанная область видимости имеет больший приоритет, чем заданная через boundedBy.

итого:

myMap.controls.add(new ymaps.control.SearchControl({ useMapBounds : true }));

ну либо

myMap.controls.add(new ymaps.control.SearchControl({ boundedBy : myMap.getBounds() })); // но если область видимости карты изменится в контроле она останется старой, так что лучше useMapBounds

Тихонов Станислав
28 января 2016, 04:47

Спасибо за подсказку (B) - заработало так:

    mBounds = myMap.getBounds();
    searchControl = new ymaps.control.SearchControl({ boundedBy: mBounds });

 

myMap.controls
        // Кнопка изменения масштаба
        .add('zoomControl')
        // Список типов карты
        .add('typeSelector')
        // Поиск
        .add(searchControl)
        // Стандартный набор кнопок
        .add('mapTools');   

если по вьюпорту карты надо ограничить лучше использовать { useMapBounds : true }

Филипп Хлюпин
28 января 2016, 04:47

Добрый день! не работает useMapBounds : true

ищу "Люблин" карта сфокусированна на москву находит город такой в Польше

+ strictBounds: true

boundedBy не влияет на Suggestions?
В предлагаемых вариантах есть улицы из соседних (не входящих в boundedBy) поселений.
Можно как-то сделать чтобы в suggestions они не выпадали?