我从磁盘提供地图png文件,我在缩放级别15中有整个城市的磁贴png。我还有缩放级别为16-18的磁贴,但仅适用于某些区域。
我想设置图块层,这样当用户处于缩放级别18时,地图将显示第15级的缩放图块作为后备。
我尝试设置选项maxNativeZoom
,但对我不起作用。
这是我的代码:
offlineLayer = L.mapbox.tileLayer(tileJSON, {
minZoom: 8,
maxZoom: 18,
maxNativeZoom: 15
});
map.addLayer(offlineLayer, 'Offline', 1);
我可以使用某些选项使其正常工作,还是我需要以某种方式破解它?或者是否有一些示例代码?
答案 0 :(得分:3)
只是为了让人们知道我前段时间写过Leaflet.TileLayer.Fallback插件来解决这个确切的用例:
通过缩放后的缩放平铺替换丢失的平铺(404错误)。
在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。