Клуб API Карт

Узнать виден ли маркер на карте

Дарья Миронова
16 апреля 2016, 11:25

Здравствуйте. У меня такая проблема. 

Сейчас у меня маркеры все появляются все в видимой части карты. Но если пользователь начнёт смещать карту, то многие маркеры уйдут из видимости. И у меня есть слева меню которые привязывается к маркерам. Как сделать чтобы при клике по меню если маркер не виден, то карта с текущим масштабом центрировалась к этому маркеру

5 комментариев
myMap.setCenter(myPlacemark.geometry.getCoordinates())
Дарья Миронова
16 апреля 2016, 22:30
dimik,
этот вариант мне не подойдет пожалуй. Мне именно центрировать надо если маркер не виден, а если он в поле видимости, то ничего не надо центрировать
Дарья Миронова,
Это то как надо центрировать, добавьте ещё проверку
if (ymaps.util.bounds.containsPoint(myMap.getBounds(), myPlacemark.geometry.getCoordinates())) {
...
}
Дарья Миронова
17 апреля 2016, 10:37
dimik,
ага спасибо, всё работает как надо:) Есть ещё один вопрос. А можно ли сделать чтобы если маркер не виден, то не к центру выставляло, а высчитывало сколько до ближайшего края надо и маркер бы появлялся с края карты. Хочу такой вариант сделать чтобы общая картина у пользователя была видна где какие маркеры находятся, т.к данный функционал у меня будет отрабатывать если пользователь карту подвигал самостоятельно, а затем опять начал проходится по списку маркеров
Дарья Миронова,
можно. вам придется рассчитать новый центр карты в глобальных пикселях, используя методы проекции карты
myMap.options.get('projection').toGlobalPixels(...)
https://tech.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/IProjection-docpage/#toGlobalPixels

и с учетом размера DOM-контейнера карты myMap.container.getSize()
https://tech.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/map.Container-docpage/#getSize

затем перевести этот центр в геокоординаты и передать в метод myMap.setCenter