2016-06-27 4 views
5

Я использую листовку с MapBox, и я хотел бы установить вид карты так:листовка - Fitbounds и держать центр

  1. всех маркеры видны
  2. центр устанавливаются на определенный point

Легко делать каждый пункт отдельно с помощью setView и fitbounds, но я не знаю, как иметь оба одновременно, поскольку setView меняет границы и fitBounds меняет центр. Решение может заключаться в определении центра и масштабирования, но как я могу узнать, какой масштаб позволит увидеть все мои маркеры?

EDIT

Я реализовал решение, предложенное IvanSanchez и она работает, как ожидалось:

let ne=leafletBounds.getNorthEast(); 
let sw=leafletBounds.getSouthWest(); 
let neSymetric=[ne.lat + (center.lat - ne.lat)*2, ne.lng + (center.lng - ne.lng)*2]; 
let swSymetric=[sw.lat +(center.lat - sw.lat)*2, sw.lng + (center.lng - sw.lng)*2]; 
leafletBounds.extend(L.latLngBounds(swSymetric, neSymetric)); 

ответ

3

Получите свои границы и создать второй экземпляр L.Bounds с применением точечной симметрии вдоль центральной точки вы хотите. Создайте новый L.Bounds, содержащий исходные оценки и симметричные границы. Запустите fitBounds() с этим.

+0

Спасибо, это простое и эффективное решение! – DevLR

0

Я нашел другое решение. Вы можете просто вызвать map.panTo ([lat, lng]) после того, как вы скорректировали свою карту с помощью fitBound(). Я использую VueJs и называю это в hook() lifecycle.

Я устанавливаю границы, чтобы вы могли видеть местоположение пользователя, а также географическую функцию далеко, но затем я использую panTo, так что реальное местоположение пользователя находится в центре карты после fitBounds. Кажется, он работает до сих пор.