【问题标题】:Mapbox - Update data-driven styling in sessionMapbox - 在会话中更新数据驱动的样式
【发布时间】:2018-10-14 07:01:01
【问题描述】:

在 Mapbox 的网站上有几个关于数据驱动样式的tutorials,但没有一个解决如何在会话中更新现有的数据驱动样式(在 Mapbox Studio 中创建)。例如,假设我想创建一个按地区着色的美国各州等值线。然后用户选择“人口颜色”,状态的颜色会相应更新。

我发现了一些resources 可以通过添加所有州的geojson 然后执行map.addLayer 来实现这一点,但是我正在使用的geojson(人口普查区域)太大而无法添加到前端,所以我需要更改现有层的数据驱动样式(或找到类似的解决方法)。数据必须是来自 mapbox studio 的持久化瓦片集,用户根据 geojson 属性更新数据着色。

任何想法或示例将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    在运行时更新数据驱动的样式非常简单。您只需拨打map.setPaintProperty。

    我通常使用一个生成属性值的函数来实现这一点。像这样的:

    function fillColorByPopulation(min, max) {
        return {
            property: 'pop',
            stops: [
                [min, 'red'],
                [max, 'blue']
            ],
            type: 'exponential'
        }
    }
    function updateStyle(prop) {
        if (prop === 'population') {
            map.setPaintStyle('regions', 'fill-color', fillColorByPopulation(data.minpopulation, data.maxpopulation));
        } else {
            map.setPaintStyle('regions', 'fill-color', 'transparent');
        }
    }
    

    我通常不会在 Mapbox Studio 中创建任何数据驱动的样式。用 Javascript 创建它们更简单。

    【讨论】:

    • 引用的数据在哪里?我不清楚data 用于设置止点之外的着色的位置。换句话说,这是假设数据已经附加到瓦片集了吗?
    • 对不起,这是一种伪代码。通常,我的图块集存在于 mapbox.com 中,但我会单独计算一些统计数据,包括最小值、最大值、颜色箱等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多