You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求:基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:05:42