MapboxGL JS - 以较低的缩放级别显示 3d 建筑物

时间:2021-02-15 09:35:00

标签: javascript mapbox mapbox-gl-js mapbox-gl

我使用具有 mapbox://styles/mapbox/streets-v11 样式的 MapboxGL JS v2
我使用此代码在我的地图上显示 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,
    }
});

它按预期工作,如 this example 中所示。

现在,我想要以较低的缩放级别加载这些建筑物,例如 10 而不是 15
因此,我将 minzoom15 更改为 10,并将 interpolate 的内容更改为使用线性插值从 1015.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,
    }
});

不幸的是,它不起作用,看起来它仍在等待缩放级别 15 加载,而且我在互联网上没有找到任何使它起作用的东西。

1 个答案:

答案 0 :(得分:1)

似乎是在缩放级别 13 之后生成用于构建的图块集。

READ HERE

因此,当我们在低于 13 的缩放级别上查询 map queryRenderedFeatures({ layers: ["3d-buildings"] }); 时,地图上不会添加任何功能。但是一旦缩放级别大于 13,就会添加一些建筑特征。

截图缩放级别<13

enter image description here

截图缩放级别>13

enter image description here

更新

为了使其在缩放级别 10 到 15 之间工作,您必须使用 Tilesets CLI 创建自己的图块集,您必须在其中创建配方 json 并提供如下缩放级别:

{
   "version": 1,
   "layers": {
   "building_footprints": {
   "source": "mapbox://tileset-source/username/building-footprints",
   "minzoom": 10, //<---
   "maxzoom": 15
   }
 }
}

截图: enter image description here

Step by Step Creation

谢谢!

相关问题