【问题标题】:noWrap option on tilelayer is only partially workingtilelayer 上的 noWrap 选项仅部分工作
【发布时间】:2018-05-08 17:53:03
【问题描述】:

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

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

完美运行:NoWrap works JSBIN link

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

NoWrap broken JSBIN Link

我可以向右滚动,仍然可以看到图块

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

【问题讨论】:

    标签: leaflet mapbox


    【解决方案1】:

    这是某些 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 瓦片服务器在所有这些图像中提供相同的图形。

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

    因此,解决方案是简单地将 Tile Layer bounds 选项与 noWrap one 结合使用:

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

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

    【讨论】:

    • 感谢您提供如此详细的回答!像魅力一样工作。干杯。
    【解决方案2】:

    感谢 ghybs 的回答,但是您可以在地图层而不是 TileLayer 中设置 ma​​xBounds。此外,TileLayer 不再需要 noWrap。只需将maxBounds=[-90, -180],[90, 180]] 应用于您的地图图层,它应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多