Клуб API Карт

SearchControl не работает кнопка "Найти"

scam87
6 октября 2014, 16:47

SearchControl не работает при нажатие на кнопку "Найти", если указать ему strictBounds равный true.
Если strictBounds выставить в false, то всё ок.

При этом автодополнение в указанной прямоугольной области работает как нужно.

8 комментариев
Подписаться на комментарии к посту

Версия АПИ?

strictBound имеет смысл только при установленной опции boundedBy. Вы ее задаете?

Приведите код создания и добавления контрола

Ну конечно задаю!
Передаю массив массивов [ [], [] ] в boundedBy.
В автодополнение всё выводится как надо!
Остался на работе, завтра выложу. 

var center, boundedBy;

$.ajax({

  'url': 'http://geocode-maps.yandex.ru/1.x/',

  'dataType': 'json',

  'async': false,

  'data': {

    geocode: 'МО',

    results: 1,

    format: 'json'

  },

  'success': function(data){

    var geo_object = data['response']['GeoObjectCollection']['featureMember'][0]['GeoObject'];

    center = geo_object['Point']['pos'].split(' ').reverse();

    var envelope = geo_object['boundedBy']['Envelope'];

    boundedBy = [

      envelope['lowerCorner'].split(' ').reverse(),

      envelope['upperCorner'].split(' ').reverse()

    ];

  }

});

 

if(!center){ center = [55.76, 37.64]; }

 

map = new ymaps.Map('map', {center: center, // МО

  zoom: 10, behaviors:['default', 'scrollZoom'], controls: ['zoomControl', 'rulerControl']}, {});

map.setBounds(boundedBy);

 

var options = {noPlacemark: true, resultsPerPage: 5};

if(boundedBy){

  $.extend(options, {boundedBy: boundedBy

    //, strictBounds: true

  });

}

var searchControl = new ymaps.control.SearchControl({options: options});

map.controls.add(searchControl, { right: 10, top: 10  });

Хинт:

Совершенно адовое геокодирование через jQuery.ajax со всеми этими сплитами и реверсами можно заменить на вызов ymaps.geocode 

Я глубоко не вдавался в суть, но скорее всего вам надо проверить что попадает в boundedBy. Думаю, там массив массивов строк, а должен быть – чисел

спасибо, помогло!
преобразовал строковое представление в числовое через parseFloat и всё заработало!

через geocoder не разобрался как работать.
во первых ошибку мне выдаёт, что что-то там в xml не так.
во вторых как из него boundedBy мне потом для контрола взять?!

ymaps.geocode('Москва', { results: 1 })

.then(function (res) {

    console.log(res.geoObjects.get(0).properties.get('boundedBy'));

});