接合 nowrap 时设置地图边界/边缘

setting map boundary / edge when nowrap is engaged

有什么办法可以调整地图的边界,使俄罗斯的右边缘不会出现在左边吗?您可以在图像中看到我有一个覆盖俄罗斯的 MultiPolygon 区域,但地图和覆盖层是分开的。如果可能的话,我希望这个国家的那一小块地方在右边!

地图错误一侧的俄罗斯边缘:

欢迎来到 SO!

如果你的多边形是蓝色区域,那么恐怕你必须重构你的数据才能达到你想要的效果(将左边的区域移到右边,就像它被缝合回俄罗斯大陆一样).

您的数据(可能是 GeoJSON?)包含一个单独的多边形,其经度在 [-180, -120] 范围内。 Leaflet 别无选择,只能将其显示在地图左侧,独立于 noWrap 选项。

因此您需要深入研究您的数据,并为该多边形的每个节点添加 360 度经度,以便它们现在位于 [180, 300] 范围内。

或者以某种方式在你的代码中引入一个 "detection" ,它会自动为边界 and/or 中心很远的形状执行经度加法(假设在 [-180, -120] 经度范围)。 Leaflet 不会开箱即用地自动执行该操作。

注意:noWrap 选项是为了让您的图块层不加载 "central" 世界之外的图块(以避免显示世界的多个副本)。但在你的情况下,你 想要 在 "adjacent copy of the world" 上显示俄罗斯/西伯利亚的一部分,所以你可能想删除该选项,否则你的多边形将不在在任何底图上。

我能想到的解决方法是使用 maxBounds 属性,您可以将默认边界与 minZoom: 1 一起稍微向右移动。如果缩小到很远/向外平移,这不会阻止用户在短时间内多次看到这个世界,正如它所说:

... bouncing the user back when he tries to pan outside the view

var map = L.map('map',{ 
  maxBounds:[ [-90, -160], [90, 200] ],
  minZoom: 1
  }).setView([66.058, 189.459], 4);

Demo