#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 }
Комментариев нет:
Отправить комментарий