Mapbox.js - 在请求的缩放级别中缺少时,从较低缩放级别回退平铺图像

时间:2013-12-20 14:25:42

标签: leaflet mapbox

我从磁盘提供地图png文件,我在缩放级别15中有整个城市的磁贴png。我还有缩放级别为16-18的磁贴,但仅适用于某些区域。

我想设置图块层,这样当用户处于缩放级别18时,地图将显示第15级的缩放图块作为后备。

我尝试设置选项maxNativeZoom,但对我不起作用。

这是我的代码:

offlineLayer = L.mapbox.tileLayer(tileJSON, {
    minZoom: 8,
    maxZoom: 18,
    maxNativeZoom: 15
});
map.addLayer(offlineLayer, 'Offline', 1);

我可以使用某些选项使其正常工作,还是我需要以某种方式破解它?或者是否有一些示例代码?

2 个答案:

答案 0 :(得分:3)

只是为了让人们知道我前段时间写过Leaflet.TileLayer.Fallback插件来解决这个确切的用例:

  

通过缩放后的缩放平铺替换丢失的平铺(404错误)。

Demo page

在OP的情况下,您只需像往常一样指定maxZoom平铺图层选项,并且每当在当前缩放级别找到平铺图块时,插件将尝试用“父”平铺替换它。上一个缩放级别(适当缩放和剪裁以使其适合丢失的图块),依此类推,直到找到图块或达到minZoom

L.tileLayer.fallback(urlTemplate, {
  minZoom: 8,
  maxZoom: 18
});
  

免责声明:我是该插件的作者。

答案 1 :(得分:0)

当你说它对你不起作用的时候,我猜你用以上代码看到的是15级瓷砖,即使在16-18的缩放级别也是如此那些级别的瓷砖区域?这是maxNativeZoom的预期行为。 TileLayer为给定的缩放级别创建所有切片并映射边界并设置" src"到包含当前缩放级别的URL。如果当前缩放级别大于" maxNativeZoom"然后将URL中的缩放级别设置为" maxNativeZoom"。例如,src =" http://a.tile.openstreetmap.org/15/16368/10896.png"如果" maxNativeZoom"将用于缩放级别16-18。设置为15。

代码中没有逻辑可以检查该缩放级别的图块是否确实存在图像。

如果您的磁贴位于单个数据集中,那么您可以修改TileLayer中的代码以检查生成的URL的HTTP 404返回码,如果收到一个,则使用" maxNativeZoom&#34创建一个新URL ;。如果您的图块在多个数据集中(即一个用于缩放级别15或更少,另一个用于缩放级别16-18),那么我认为您必须编写支持多个数据集的TileLayer。