请求:基于Arduino二进制数据实现Thingsboard多边形颜色切换
解决方案
原代码存在的问题
- 重复定义变量
states1,覆盖了之前的数组元素引用 - 第一个
if-else分支执行return后会直接终止函数,后续的条件判断永远不会触发,无法实现多个多边形的颜色切换
正确实现方式
在Thingsboard图片地图组件中,每个多边形的颜色需要通过独立的颜色函数配置,以下是针对你的需求的两种实现方案:
方案1:单个多边形独立配置(推荐)
针对每个多边形,编写对应索引的颜色判断函数(注意:JavaScript数组为0起始索引,请根据Arduino发送的数组对应关系调整索引):
- 第1个多边形对应数组第1个值:
var states = dsData[dsIndex]['states']; var state = states[0]; return state === 1 ? "red" : "green";
- 第2个多边形对应数组第2个值:
var states = dsData[dsIndex]['states']; var state = states[1]; return state === 1 ? "red" : "green";
- 第3个多边形对应数组第3个值:
var states = dsData[dsIndex]['states']; var state = states[2]; return state === 1 ? "red" : "green";
- 第4个多边形对应数组第4个值:
var states = dsData[dsIndex]['states']; var state = states[3]; return state === 1 ? "red" : "green";
方案2:通用复用函数(可选)
如果想复用颜色判断逻辑,可以先定义一个通用函数,再在每个多边形的颜色配置中调用:
// 通用颜色判断函数,传入数组索引获取对应颜色 function getPolygonColor(index) { var states = dsData[dsIndex]['states']; // 处理数组越界情况,默认返回绿色 var state = states[index] !== undefined ? states[index] : 0; return state === 1 ? "red" : "green"; }
然后在各多边形的颜色函数中调用:
- 第1个多边形:
return getPolygonColor(0); - 第2个多边形:
return getPolygonColor(1); - 第3个多边形:
return getPolygonColor(2); - 第4个多边形:
return getPolygonColor(3);
关键提示
- 确认Arduino发送的
states数组索引与多边形的对应关系,若你的数组[1,1,1,0,0]中第一个元素对应第一个多边形,务必使用states[0]而非原代码中的states[1]。 - 每个多边形的颜色函数是独立执行的,无法在单个函数中返回多个多边形的颜色值。
内容的提问来源于stack exchange,提问作者Ande Mandoyi
相关产品推荐
相关产品推荐

