如何根据 geoJSON 属性的最大值进行插值。使用 Mapbox 绘画、圆圈颜色、数据驱动的表达式
How do I interpolate based on max value from geoJSON properties. Using Mapbox paint, circle-color, Data driven expressions
我在 React 项目中使用 Mapbox GL,并希望根据源 geoJSON 中的 属性 设置数据点的圆圈颜色。我的目标是将圆圈涂成绿色表示低值,红色表示高值。介于两者之间的任何东西都是颜色渐变。因此,例如,如果我的数据点的值范围从 0 到 100。0 应该是绿色,100 是红色,50 是琥珀色。
这是我尝试过的:
paint: {
'circle-radius': 10,
'circle-color': [
'let',
'maxVal',
['max', ['get', 'P1_H']],
[
'interpolate',
['linear'],
['get', 'P1_H'],
0,
'green',
['var', 'maxVal'],
'red'
]
]
}
但这给了我错误:
Input/output pairs for "interpolate" expressions must be defined using
literal numeric values (not computed expressions) for the input
values.
对我来说最大的问题是我无法提前知道源数据中的最大值是多少。可能是 20 也可能是 80,我只是不知道。所以硬编码数字对我不起作用。最小值也可能会改变,但现在我关注的是最大值。
所以我的问题是,如何根据所选 属性?
中具有最高值的特征来插入圆圈颜色
您的第一个问题是您似乎错误地使用了 var
,这会弄乱您的语法。你似乎不需要它,那为什么不呢:
paint: {
'circle-radius': 10,
'circle-color': [
'interpolate',
['linear'],
['get', 'P1_H'],
0, 'green',
MAXVAL,
'red'
]
]
}
你的第二个问题是 ['max']
没有按照你想要的方式工作。我认为您希望它会告诉您图层中所有值中的最大值。它没有。它告诉您函数调用中提供给它的值中的最大值。因此,您将不得不以其他方式计算我标记为 MAXVAL
的内容。
我在 React 项目中使用 Mapbox GL,并希望根据源 geoJSON 中的 属性 设置数据点的圆圈颜色。我的目标是将圆圈涂成绿色表示低值,红色表示高值。介于两者之间的任何东西都是颜色渐变。因此,例如,如果我的数据点的值范围从 0 到 100。0 应该是绿色,100 是红色,50 是琥珀色。
这是我尝试过的:
paint: {
'circle-radius': 10,
'circle-color': [
'let',
'maxVal',
['max', ['get', 'P1_H']],
[
'interpolate',
['linear'],
['get', 'P1_H'],
0,
'green',
['var', 'maxVal'],
'red'
]
]
}
但这给了我错误:
Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.
对我来说最大的问题是我无法提前知道源数据中的最大值是多少。可能是 20 也可能是 80,我只是不知道。所以硬编码数字对我不起作用。最小值也可能会改变,但现在我关注的是最大值。 所以我的问题是,如何根据所选 属性?
中具有最高值的特征来插入圆圈颜色您的第一个问题是您似乎错误地使用了 var
,这会弄乱您的语法。你似乎不需要它,那为什么不呢:
paint: {
'circle-radius': 10,
'circle-color': [
'interpolate',
['linear'],
['get', 'P1_H'],
0, 'green',
MAXVAL,
'red'
]
]
}
你的第二个问题是 ['max']
没有按照你想要的方式工作。我认为您希望它会告诉您图层中所有值中的最大值。它没有。它告诉您函数调用中提供给它的值中的最大值。因此,您将不得不以其他方式计算我标记为 MAXVAL
的内容。