tilelayer上的noWrap选项仅部分起作用

Ale*_*rij 1 leaflet mapbox

为了防止在最高缩放级别上出现多个重复的世界地图,我正在使用noWrap=true选项。它运作良好,但仅在地图的左侧(灰色区域),右侧仍显示额外的图块。这是为什么?

UPDATE1:看起来是特定Mapbox磁贴或其加载方式存在问题吗?在这里noWrap和https://{s}.tiles.mapbox.com/v3/ebrelsford.ho06j5h0/{z}/{x}/{y}.png

完美运行:NoWrap可以运行JSBIN链接

但是一旦我改变了使用样式加载图块的另一种方式

NoWrap损坏的JSBIN链接

我可以向右滚动但仍能获得图块

我打开了一个github问题,我怀疑这是库https://github.com/Leaflet/Leaflet/issues/5938的错误

在此处输入图片说明

ghy*_*ybs 5

这是某些Mapbox样式和noWrap代码中“不完全”使用选项的问题:(强调我的)

noWrap:图层是否包裹在子午线周围。如果为true,则GridLayer仅在低缩放级别下显示一次。当地图CRS不环绕时不起作用。可以与结合使用,bounds以防止请求超出CRS限制的图块。

  • noWrap,顾名思义,它告诉Leaflet不要复制“主要”世界。因此,Leaflet必须假设“主”世界是“无限”,并且它尝试将瓦片加载到各处,从而扩展了四叉树方案:与瓦片0/0/0一起(缩放为0),它尝试加载瓦片0 / 1 / 0、0 / -1 / 0等。
  • 由于某些原因,某些Mapbox样式会返回普通四叉树方案之外的图块图像:除了图块0/0/0外,您还可以获得0/1 / 0、0 / 2/0等图像。 ,这些“虚构”图块始终是相同的图形,重复着整个世界。因此,Leaflet看起来仍然包裹着瓷砖,而实际上却显示了不同的图像。Mapbox切片服务器在所有这些图像中提供相同的图形。

Tile Server添加但从Mapbox重复图形的图像

如果要告诉Leaflet不要扩展四叉树方案,则应指定在“主要”世界之外没有可用的图块。

因此,解决方案就是将Tile Layer bounds选项与以下选项一起使用noWrap

L.tileLayer(urlTemplate, {
  noWrap: true,
  bounds: [
    [-90, -180],
    [90, 180]
  ]
}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

更新的JS Bin:http : //jsbin.com/nokasukozo/1/edit?html, js,console, output