#javascript #yandex_maps_api
Как можно ограничить область поиска на Яндекс Картах? То есть, чтобы искал в отдельном прямоугольнике, заданным координатами, либо отдельно по городу? Я пробовал сделать так, эффекта ноль (пример взят из документации Яндекс.Карт) myMap.setBounds([ /* Координаты юго-западного угла области просмотра карты */ [56.366411 , 60.032195], /* Координаты северо-восточного угла области просмотра карты */ [56.584157, 60.463256] ], { // Включить проверку доступного // диапазона масштабов (исключает // возможность попасть в "серые тайлы") checkZoomRange: true, // Можно анимировать перемещение карты duration: 500 } ); var myGeocoder = ymaps.geocode( /* Строка с адресом, который нужно геокодировать */ "Екатеринбург", { /* Опции поиска: - область поиска */ boundedBy: myMap.getBounds(), // - искать только в этой области strictBounds: true, // - требуемое количество результатов results: 1 }); /* После того, как поиск вернул результат, вызывается callback-функция */ myGeocoder.then(function (res) { /* Размещение полученной коллекции геообъектов на карте */ myMap.geoObjects.add(res.geoObjects); });
Ответы
Ответ 1
Все работает как описано в документации. Может у вас в заданном прямоугольнике нету искомого объекта. В этом случае ничего не будет найдено и не будет добавлено меток на карту. Я попробовал найти объект, который явно присутствует на карте и он нашелся. Вот, для примера, поиск улицы Ленина в некоторых городах (сначала думал искать площадь Ленина, но Челябинск оказался настолько суров что там такой площади нету). ymaps.ready(function() { var myMap, cityList, lookAtLenin; myMap = new ymaps.Map('map', { center: [56.70, 60.20], zoom: 10 }); cityList = new ymaps.control.ListBox({ data: { content: 'Выбрать город' }, items: [ new ymaps.control.ListBoxItem({ data: { content: 'Екатеринбург' }, options: { selectOnClick: false } }), new ymaps.control.ListBoxItem({ data: { content: 'Москва' }, options: { selectOnClick: false } }), new ymaps.control.ListBoxItem({ data: { content: 'Челябинск' }, options: { selectOnClick: false } }), ] }); cityList.get(0).events.add('click', function() { lookAtLenin('Екатеринбург'); }); cityList.get(1).events.add('click', function() { lookAtLenin('Москва'); }); cityList.get(2).events.add('click', function() { lookAtLenin('Челябинск'); }); myMap.controls.add(cityList, { floatIndex: 0 }); lookAtLenin = function(city) { var cityCenter = { 'Екатеринбург': [56.79, 60.61], 'Москва': [55.66, 37.64], 'Челябинск': [55.15, 61.50] }; myMap.setCenter(cityCenter[city], 9, { checkZoomRange: true, duration: 500 }).then(function(res) { return ymaps.geocode('ул. Ленина', { boundedBy: myMap.getBounds(), strictBounds: true, results: 1 }); }).then(function(res) { myMap.geoObjects.add(res.geoObjects); }); }; });Ответ 2
У меня заработало, когда убрал из кода примера кусок: , { // Включить проверку доступного // диапазона масштабов (исключает // возможность попасть в "серые тайлы") checkZoomRange: true, // Можно анимировать перемещение карты duration: 500 }
Комментариев нет:
Отправить комментарий