我有一个带有geojson数据源支持的叶绿体地图。该数据集包含每个国家两个不同年份的数据,填充颜色基于JSON中的一个属性。这是我的addLayer代码目前,它工作得很好。
map.addLayer({
id: 'emissions',
type: 'fill',
source: {
type: 'geojson',
data: './data.json'
},
paint: {
'fill-color': {
property: 'total_2014',
type: 'exponential',
base: 0.99999,
stops: [
[3, "hsl(114, 66%, 53%)"],
[2806634, "hsl(0, 64%, 51%)"]
]
},
'fill-opacity': 1
}
});
我希望能够以编程方式切换json属性上的填充颜色是基于,和表达式似乎是明显的方式这样做,但是下面的代码失败的错误layers.emission .paint.fill-color。属性:期望字符串,找到数组。
...
paint: {
'fill-color': {
property: ['get', propName], // propName var is e.g. 'total_2014'
type: 'exponential',
base: 0.99999,
stops: [
[3, "hsl(114, 66%, 53%)"],
[2806634, "hsl(0, 64%, 51%)"]
]
},
'fill-opacity': 1
}
...
有办法实现我的目标吗?我对使用Mapbox GL JS非常陌生,所以如果这是一个基本问题,请道歉。
为了防止其他人遇到这个要求,我找到了一个解决方法,即直接更新map的style属性。这不是一个确切的答案,因为这种方法不使用表达式,但是mapbox区分源和应用更改的性能非常快,符合我的要求。
function loadDataForYear(year) {
const style = map.getStyle();
style.layers.find(({ id }) => id === "emissions").paint['fill-color']['property'] = 'total_' + year;
map.setStyle(style);
}