Mapbox GL JS中的复合属性函数

时间:2017-03-15 16:14:48

标签: mapbox-gl-js

有没有办法在Mapbox GL JS的属性函数中使用多个属性?在CartoCSS中,我会做类似以下的事情:

.states {
    [name="California"] {
       "polygon-fill": "blue"
    },
    [name_abbrev="WA"] {
       "polygon-fill": "green"
    }
}

在Mapbox GL JS中,似乎我可以根据属性fill-color - 或 - name设置name_abbrev的样式,而不是两个属性的组合。例如:

'fill-color': {
    'property': 'name',
    'type': 'categorical',
    'stops': [
       ['California', 'blue']
    ]
},
'fill-color': {
    'property': 'name_abbrev',
    'type': 'categorical',
    'stops': [
       ['WA', 'green']
    ]
}

这导致第二个fill-color覆盖第一个,加利福尼亚只是绿色。

1 个答案:

答案 0 :(得分:1)

Mapbox GL不支持基于一个图层中的多个属性的样式。您可以重新设计数据,将基于您要设置样式的属性组合到一个图层中,或者您可以创建两个图层并使用过滤器来分隔要素,如果您的推理并非所有要素都具有某个图层/某些需要使用后备属性:类似

{
    ... layer metadata (id, source, source-layer, type, etc) ...
    'filter': ['has', 'name'],
    'paint': {
        'fill-color': {
            'property': 'name',
            'type': 'categorical',
            'stops': [
                ['California', 'blue']
            ]
        }
    }
},
{
    ... layer metadata (id, source, source-layer, type, etc) ...
    'filter': ['!has', 'name'],
    'paint': {
        'fill-color': {
            'property': 'name_abbrev',
            'type': 'categorical',
            'stops': [
                ['WA', 'green']
            ]
        }
    }
}