javascript - 无法在 Mapbox GL 中添加楼层

标签 javascript html mapbox-gl-js mapbox-gl

我想使用 MapBox GL 为每个建筑物添加 2 或 3 层楼,但是当我尝试使用 addlayer 时,颜色被覆盖,但没有添加任何层或楼层。已经被这个问题困扰了一段时间了。

我想要建筑物中地板的 3D 挤压。

也尝试将其放入按钮单击中,但仍然没有返回预期结果。

    <!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' />
    <title></title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.39.1/mapbox-gl.js'></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.39.1/mapbox-gl.css' rel='stylesheet' />
    <style>
        body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>

</head>
<body>

<div id='map'>
</div>
<script>
mapboxgl.accessToken = 'pk.eyJ1IjoiZGFuc3dpY2siLCJhIjoiY2l1dTUzcmgxMDJ0djJ0b2VhY2sxNXBiMyJ9.25Qs4HNEkHubd4_Awbd8Og';
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v9',
    center: [-87.61694, 41.86625],
    zoom: 15.99,
    pitch: 40,
    bearing: 20
});

map.on('load', function() {

    map.addLayer({
        'id': 'room-extrusion10',
        'type': 'fill-extrusion',
        'source': 'composite',
        'source-layer': 'building',
        'paint': {
            'fill-extrusion-color': 'blue',
            'fill-extrusion-height': {
                'type': 'identity',
                'property': 'height'
            },
            'fill-extrusion-base': {
                'type': 'identity',
                'property': 'max_height'
            },
            'fill-extrusion-opacity': 1
        }
    });

    map.addLayer({
        'id': 'room-extrusion11',
        'type': 'fill-extrusion',
        'source': 'composite',
        'source-layer': 'building',
        'paint': {
            'fill-extrusion-color': 'red',
            'fill-extrusion-height': {
                'type': 'identity',
                'property': 'height'
            },
            'fill-extrusion-base': {
                'type': 'identity',
                'property': 'min_height'
            },
            'fill-extrusion-opacity': 1
        }
    },'room-extrusion10');

});
</script>

</body>
</html>

最佳答案

fill-extrusion-heightfill-extrusion-base是控制填充拉伸(stretch)特征的下部和上部高度(以米为单位)的绘制属性。在您的示例中,它们的样式为 identity functions基于来自 OpenStreetMap 的建筑物高度数据(在 Mapbox Streets 数据源中),使它们模仿真实世界的建筑物形状(与映射的效果一样好)。为了创建仅跨越一层的填充挤出层,您需要 fill-extrusion-height: 3 (或者无论您认为一层楼有多高,以米为单位)和 fill-extrusion-base: 0 为第一层;第二个是 height=6 和 base=3,依此类推。

请注意,在 Mapbox GL JS 的所有已发布版本中,多个填充拉伸(stretch)层 don't render correctly彼此尊重。这是fixed在 master 中,并将包含在本月的下一个版本中。

关于javascript - 无法在 Mapbox GL 中添加楼层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042192/

相关文章:

javascript - 没有什么等待吗?使用空的等待来分解大型同步函数

javascript - 如何合并两个数组,类似于对象的下划线扩展方法

javascript - 使用 CSS 动画提升 div

mapbox - 与旧的 Mapbox.js 相比,Mapbox GL JS 性能较差

reactjs - 为什么我在 Mapbox GL 中设置了我的数据集要素 ID 却未定义它们?

javascript拼接

javascript - 如何以响应方式使下面的文本位于框的中心?

Mapbox - 完全禁用聚类

html - CSS:使容器适合屏幕

html图片在大型菜单上