Как сделать автоматическое панорамирование всплывающего маркера MapboxGL, чтобы он был полностью виден на карте?

#mapbox-gl #mapbox-gl-js

#mapbox-gl #mapbox-gl-js

Вопрос:

У меня есть маркер и всплывающее окно, которое я использую, которое открывается при нажатии на маркер. У исходного API Mapbox была autoPan настройка, а у MapboxGL ее нет. Как мне заставить это работать?

Ответ №1:

Если я правильно понимаю, autoPan убедитесь, что всплывающее окно отображается на карте при его открытии. Для достижения этой цели вы можете использовать map.flyTo() или map.jumpTo() перейти к местоположению всплывающего окна.

рабочий пример: https://jsfiddle.net/Ltypbkdc /

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

1. Вы правы, autoPan убедившись, что всплывающее окно видно. Проблема, о которой я говорю, заключается в том, что если маркер находится в самом верхнем правом углу карты, и пользователь открывает всплывающее окно, мне нужно точно рассчитать, в какие координаты переместить карту (вверх и вправо), чтобы всплывающее окно стало видимым. Не только это, но и должно быть какое-то преобразование пикселей в координаты, если размер всплывающего окна динамический.

Ответ №2:

Чтобы включить автоматическое панорамирование всплывающих окон, все, что вам нужно сделать, это не указывать привязку всплывающего окна.

Из документов:

привязка

Строка, указывающая часть всплывающего окна, которая должна быть расположена ближе всего к координате, задается с помощью Popup#setLngLat . Варианты «центр», «сверху», «снизу», «слева», «справа», «сверху слева», «сверху справа», «снизу слева» и «снизу справа» . Если не установлено, привязка будет установлена динамически, чтобы гарантировать, что всплывающее окно попадает в контейнер карты с предпочтением «снизу».

https://docs.mapbox.com/mapbox-gl-js/api/markers/#popup