javascript - 如何根据 geoJSON 属性的最大值进行插值。使用 Mapbox 绘制、圆形颜色、数据驱动表达式
问题描述
我在 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'
]
]
}
但这给了我错误:
“插值”表达式的输入/输出对必须使用输入值的文字数值(非计算表达式)来定义。
对我来说最大的问题是我不提前知道源数据中的最大值是多少。可能是20,也可能是80,我只是不知道。所以硬编码一个数字对我不起作用。最小值也可能会改变,但现在我专注于最大值。所以我的问题是,如何根据所选属性中具有最高值的特征插入圆形颜色?
解决方案
您的第一个问题是您似乎使用var
不正确,并且弄乱了您的语法。你似乎不需要它,所以为什么不只是:
paint: {
'circle-radius': 10,
'circle-color': [
'interpolate',
['linear'],
['get', 'P1_H'],
0, 'green',
MAXVAL,
'red'
]
]
}
你的第二个问题是['max']
它不能按照你想要的方式工作。我想你希望它会告诉你图层中所有值的最大值。它没有。它告诉您在函数调用中提供给它的值中的最大值。因此,您将不得不计算我以MAXVAL
其他方式标记的内容。
推荐阅读
- python - 如何通过 python Lambda 询问物联网设备
- oracle-apex - Apex 分面搜索自动生成行 nuber
- multithreading - 工作流系统与多线程解决 lambda 超时限制
- restful-url - 如果 API 不是纯粹做 CRUD,如何命名 RESTful 地址
- azure - 系统分配的托管标识的 Azure ARM 角色分配第一次运行失败
- angular - 打字稿输入问题,Observable.next 方法未正确输入
- php - Laravel 8 - 干预/图像 - 未定义类型“图像”
- javascript - 从 iframe 传递 URL 参数
- r - 如何通过匹配来自另一个数据帧的整个列中的字符串来检索一个数据帧中的值?
- apache-kafka - 我应该如何将 clickhouse 连接到 Kafka?