Mar*_*arc 7 javascript mapbox mapbox-gl mapbox-gl-js
我使用带有样式的MapboxGL JS v2mapbox://styles/mapbox/streets-v11。
我使用此代码在我的地图上显示3D 建筑物:
map.addLayer({
'id': '3d-buildings',
'source': 'composite',
'source-layer': 'building',
'filter': ['==', 'extrude', 'true'],
'type': 'fill-extrusion',
'minzoom': 15,
'paint': {
'fill-extrusion-color': '#666',
'fill-extrusion-height': ['interpolate', ['linear'], ['zoom'], 15, 0, 15.05, ['get', 'height']],
'fill-extrusion-base': ['interpolate', ['linear'], ['zoom'], 15, 0, 15.05, ['get', 'min_height']],
'fill-extrusion-opacity': 0.9,
}
});
Run Code Online (Sandbox Code Playgroud)
它按预期工作,如本例所示。
现在,我想要的是以较低的缩放级别加载这些建筑物,例如10而不是15。
所以,我minzoom从15改为10,并且我也interpolate将使用线性插值的东西从10改为15.05。
这是最终的代码:
map.addLayer({
'id': '3d-buildings',
'source': 'composite',
'source-layer': 'building',
'filter': ['==', 'extrude', 'true'],
'type': 'fill-extrusion',
'minzoom': 10,
'paint': {
'fill-extrusion-color': '#666',
'fill-extrusion-height': ['interpolate', ['linear'], ['zoom'], 10, 0, 15.05, ['get', 'height']],
'fill-extrusion-base': ['interpolate', ['linear'], ['zoom'], 10, 0, 15.05, ['get', 'min_height']],
'fill-extrusion-opacity': 0.9,
}
});
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用,看起来它仍然在等待加载缩放级别 15,而且我在互联网上没有找到任何使它工作的东西。
似乎用于构建的图块集是在缩放级别 13 后生成的。
因此,当我们查询map queryRenderedFeatures({ layers: ["3d-buildings"] });低于 13 的缩放级别时,地图上不会添加任何功能。但一旦缩放级别大于 13,就会添加一些建筑功能。
截图缩放级别<13
截图缩放级别>13
更新
为了使其在缩放级别 10 到 15 范围内工作,您必须使用Tilesets CLI创建自己的图块集,其中您必须制作配方 json 并必须提供缩放级别,例如:
{
"version": 1,
"layers": {
"building_footprints": {
"source": "mapbox://tileset-source/username/building-footprints",
"minzoom": 10, //<---
"maxzoom": 15
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!