Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Как ограничить область поиска в Яндекс Картах?

#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 }

Комментариев нет:

Отправить комментарий