Как изменить масштаб в яндекс картах
Перейти к содержимому

Как изменить масштаб в яндекс картах

  • автор:

Возможно увеличить масштаб карты, когда она отображает раскрывшиеся метки кластера?

Пример того, как могут отображаться метки

Иногда при нажатии на метку кластера карта отображает его метки прямо на границе окна (пример ниже). Подскажите, возможно ли как-то отследить подобную ситуацию, чтобы уменьшить масштаб на единицу? Или, хотя бы, в любом случае уменьшить масштаб карты на единицу после отображения меток кластера?

Отслеживать
задан 24 мар 2023 в 15:36
7 2 2 бронзовых знака

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Включите кластеризатору учёт отступов useMapMargin , и задайте удобные вам отступы через заданных map.margin.Manager или сразу при настройке карты.

var myMap = new ymaps.Map('map', < center: [55.751574, 37.573856], margin: [50,50,50,50], zoom: 9 >), clusterer = new ymaps.Clusterer(< useMapMargin: true >) 

Для менеджера объектов всё делается аналогично.

var objectManager = new ymaps.ObjectManager(< clusterize: true, useMapMargin: true >); 

Но вообще useMapMargin по-умолчанию включен, специально включать его не требуется.

Пример на эту тему в песочнице Яндекса есть.

Как сделать масштабирование Яндекс.Карты при скрытии/отображении коллекции?

На яндекс картах есть две группы меток.
В зависимости от состояния радиокнопки (чекбокса) отображается одна из них.

Как увеличить/уменьшить масштаб карты, в центр метки, при переключении радиокнопки?
fiddle: https://jsfiddle.net/338za0mj/

  • Вопрос задан более трёх лет назад
  • 418 просмотров

Комментировать
Решения вопроса 1

0xD34F

0xD34F @0xD34F Куратор тега Яндекс.Карты

Для этого воспользуйтесь методами setBounds и getBounds. Типа так.

UPD. Вынесено из комментариев:

А можно регулировать масштаб? Сейчас максимально приближено. Можно установить значение zoom 15, например?

Можно проверять после вызова setBounds текущий зум, и если больше допустимого — устанавливать сколько надо. Типа так.

Ответ написан более трёх лет назад
Нравится 2 3 комментария

Jeka778

Евгений Жадько @Jeka778 Автор вопроса

Спасибо, то что нужно!
А можно регулировать масштаб? Сейчас максимально приближено. Можно установить значение zoom 15, например?

Как изменить размер яндекс карт?

Допустим, на большом размере экрана яндекс-карты имеют определенную ширину, а вот при уменьшении экрана надо, чтобы карта была на всю ширину . Пробовал ymaps задать width 100%, но не помогло, видимо, javascript код перекрывает. Как при низком разрешении задать ширину 100%?

  • Вопрос задан более трёх лет назад
  • 1534 просмотра

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

Решения вопроса 0

Ответы на вопрос 1

deepblack

Ответ написан более трёх лет назад

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

Нравится Комментировать

Ваш ответ на вопрос

Войдите, чтобы написать ответ

яндекс.карты

  • Яндекс.Карты

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

  • 1 подписчик
  • 23 апр.
  • 36 просмотров

wordpress

  • WordPress
  • +2 ещё

Как сделать автоматический выбор региона по IP в WordPress?

  • 1 подписчик
  • 22 апр.
  • 69 просмотров

Масштабирование Яндекс карты

Друзья, не могу разобраться и прошу помощи у Вас. Начну с кода (возможно, так будет правильно). Подскажите, какую функцию нужно добавить чтобы карта самостоятельно определяла масштаб где будут видны все метки карты ? Если нужна ещё какая-то информация пишите, я добавлю что требуется.

 function allPlacemarks() < var myMap = new ymaps.Map('allPlacemarks', < // ID блока с картой center: [55.76, 37.64], // Москва zoom: 12, controls: ['zoomControl', 'fullscreenControl'] >,< suppressMapOpenBlock: true, yandexMapDisablePoiInteractivity: true >), objectManager = new ymaps.ObjectManager(< // Чтобы метки начали кластеризоваться, выставляем опцию. clusterize: true, // ObjectManager принимает те же опции, что и кластеризатор. gridSize: 32 >); //отключаем зум колёсиком мышки myMap.behaviors.disable('scrollZoom'); //на мобильных устройствах. (проверяем по userAgent браузера) //if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) < //. отключаем перетаскивание карты //myMap.behaviors.disable('drag'); //>// Задаём опции кластеров objectManager.clusters.options.set(< // Установим дизайн метки по умолчанию: preset: 'islands#blueClusterIcons', // Установим балун кластера в виде карусели для удобства balloonContentLayout: 'cluster#balloonCarousel', // Устанавливаем максимальное количество элементов в нижней панели на одной странице clusterBalloonPagerSize: 5, // Устанавливаем режим открытия балуна. // В данном примере балун никогда не будет открываться в режиме панели. clusterBalloonPanelMaxMapArea: 0, // Устанавливаем ширину макета контента балуна. balloonContentLayoutWidth: 400, // Устанавливаем высоту макета контента балуна. balloonContentLayoutHeight: 300 >); // Подрубаем монитор, // будем отслеживать изменения в кластерах var activeObjectMonitor = new ymaps.Monitor(objectManager.clusters.state); // При клике на некластеризованные объекты получаем содержимое балуна objectManager.objects.events.add('click', function (e) < var objectId = e.get('objectId'); setBalloonData(objectId); >); // В кластеризованных объектах отслеживаем изменение выбранного объекта activeObjectMonitor.add('activeObject', function () < var objectId = activeObjectMonitor.get('activeObject').id; setBalloonData(objectId); >); // Проверяем, есть ли у выбранного объекта содержимое балуна function hasBalloonData(objectId) < return objectManager.objects.getById(objectId).properties.balloonContent; >// Получаем данные и устанавливаем содержимое балуна function setBalloonData(objectId) < if (!hasBalloonData(objectId)) < getBalloonData(objectId).done(function (data) < var object = objectManager.objects.getById(objectId); object.properties.balloonContent = data; // Открываем балун на этом элементе var objectState = objectManager.getObjectState(objectId); if (objectState.isClustered) < // Если это кластер objectManager.clusters.balloon.open(objectState.cluster.id); >else < // Если обычный объект objectManager.objects.balloon.open(objectId); >>); > > // Добавляем objectManager на карту myMap.geoObjects.add(objectManager); // Выполняем ajax-запрос к мини-модулю для вывода всех меток $.ajax(< url: dle_root + 'engine/ajax/controller.php', //url: dle_root + 'engine/ajax/ymaps/all.php', dataType: 'json', data: < mod: 'ymaps_all', // вместо allplacemarks можно прописать имя другого шаблона, содержащего в себе конфигурацию для вывода меток // сам шаблон с конфигом находится в папке ymaps/all preset: 'ajaxmap' >, >) .done(function (data) < // Если всё ок - добавим метки на карту objectManager.add(data); // "Отключим" прелодер. $('#allPlacemarks').removeClass('loader'); // Выплюнем в консольку данные, пришедшие от модуля: // console.log(data); // Эти переменные нужны для дальнейшего показа количества видимых на карте меток. var singleCounter = 0, singleCounterHidden = 0, clusterCounter = 0; // Пример организации обхода массива видимых меток objectManager.objects.each(function (object) < // В данный момент нас интересует конкретный геообъект var objectState = objectManager.getObjectState(object.id); if (objectState.isClustered) < // Если метка геообъекта находится в составе кластера - прибавим счётчик. clusterCounter++; >else < // Если метка не в кластере прибавим другой счётчик. singleCounterHidden++; if (objectState.isShown) < // Если метка не в кластере и показана в области // видимости карты - прибавим другой счётчик и // убавим счётчик всех объектов. Таким образом счётчик будет // показывать только скрытые объекты singleCounter++; singleCounterHidden--; >> >, myMap); // Ну и теперь можно выплюнуть собранные счётчики в консоль: console.log('Количество показаных единичных меток: ' + singleCounter); console.log('Количество невидимых единичных меток: ' + singleCounterHidden); console.log('Количество показаных меток, составе кластера: ' + clusterCounter); >) .fail(function () < console.log("error"); >); // Функция, осуществляющая запрос за данными балуна на сервер. function getBalloonData(objectId) < var dataDeferred = ymaps.vow.defer(); // Для получения новости используется модуль : // http://pafnuty.name/modules/156-ajax-full-story.html $.ajax(< url: dle_root + 'engine/ajax/full-story.php', type: 'GET', dataType: 'html', data: < newsId: objectId, // Обязательная переменная template: 'ajax/baloon' >, >) .done(function (data) < dataDeferred.resolve(data); >) .fail(function () < console.log("full-story error"); dataDeferred.resolve('error'); >); return dataDeferred.promise(); > >``` 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *