如何在MAPBOX中调整窗口大小时同时拟合边界和设置最大边界?

问题描述 投票:-1回答:1

我们使用mapbox.fitBounds()来适应地图,而设置则使用mapbox.setMaxBounds(),这样可以避免平移。这在第一次加载时工作得很好。

但是在Window resize时,地图会被裁剪,并从最初设置的maxbounds中提取边界参考。我试图使用setTimeout来适应视口中的地图,使地图首先适应屏幕,然后从mapbox.getBounds()获取地图边界,并在mapbox.setMaxBounds()中设置数值。但这只是一个黑客。

有什么正确的方法吗?

请帮助......谢谢你。

mapbox mapbox-gl
1个回答
0
投票

希望大家都好...

经过许多天的斗争,我们能够找到完美的解决方案,为我自己的问题发布... ...

先说说

mapbox.fitBounds()是将给定的边界作为args来传递的方法,将拟合几何体(多边形等),使中心点位于中间。但它唯一没有提供的是不允许平移。

但是我们可以使用mapbox.setMaxBounds()来实现这一点,它允许我们对传递的边界进行约束。

但是在调整窗口大小时,Mapbox Map会根据内部逻辑改变边界,这将不再是最初的Passed bounds...。

为了在视口上贴合几何体,同时在窗口调整时不允许平移,我们使用了以下方法 调整观察者大小 来观察map的容器,并在它的回调中写了三行......。

  1. 设置map.setMaxBounds(null) /为null。
  2. set fitbounds(bounds). /u的几何体边界
  3. 从视口获取边界,使用

    让bnds = mapbox.getBounds();最后在map.setMaxBounds(bnds)中设置。

注意要把3. requestAnimationFrame 而不是setTimeout

希望能帮到你...

谢谢你的帮助...

© www.soinside.com 2019 - 2024. All rights reserved.