From 4b275f2093954cc58bbc23e4fc67e67d6fe81c0b Mon Sep 17 00:00:00 2001 From: Riku <risaku@163.com> Date: 星期日, 13 七月 2025 22:46:35 +0800 Subject: [PATCH] 2025.7.13 污染动态溯源 --- src/model/Factor.js | 85 +++++++++++++++++++++++++++++++----------- 1 files changed, 63 insertions(+), 22 deletions(-) diff --git a/src/model/Factor.js b/src/model/Factor.js index f142012..5a720c1 100644 --- a/src/model/Factor.js +++ b/src/model/Factor.js @@ -1,6 +1,7 @@ import { Legend } from './Legend'; const _hMap = { + 19: [0, 1000], //NO 1: [0, 1000], //NO2 2: [0, 2000], //CO 3: [0, 1000], //H2S @@ -50,6 +51,7 @@ this.factorId; this.heights = []; //3d鍦板浘褰撳墠灞曠ず鍧愭爣鐐瑰搴旂殑楂樺害鏁扮粍 this.colors = []; // 3d鍦板浘褰撳墠灞曠ず鍧愭爣鐐瑰搴旂殑棰滆壊鏁扮粍 + this.bottomColors = []; //鏈�灏忓�煎搴旂殑鍥句緥鑹叉暟缁� this.bottomColor; //鏈�灏忓�煎搴旂殑鍥句緥鑹� this.min = -1; // 褰撳墠鏄剧ず鐨勬渶灏忓�� this.max = -1; // 褰撳墠鏄剧ず鐨勬渶澶у�� @@ -59,21 +61,32 @@ this.standardMax = -1; //鐩戞祴鍥犲瓙绫诲瀷瀵瑰簲鐨勬爣鍑嗘渶澶у�� this.legendType = Legend.S_TYPE; //鍥句緥妯″紡 + // this.legendType = Legend.D_TYPE; //鍥句緥妯″紡 - if (options != undefined) { - this.datas = options.datas; - this.heights = options.heights; - this.min = options.min; - this.max = options.max; - this.originMin = options.originMin; - this.originMax = options.originMax; + if (typeof options === 'object') { + for (const key in options) { + if (Object.prototype.hasOwnProperty.call(options, key)) { + const value = options[key]; + this[key] = value; + } + } - this.factorName = options.factorName; - this.factorId = options.factorId; - this.colors = options.colors; - this.bottomColor = options.bottomColor; - this.standardMin = options.standardMin; - this.standardMax = options.standardMax; + // this.datas = options.datas; + // this.heights = options.heights; + // this.min = options.min; + // this.max = options.max; + // this.originMin = options.originMin; + // this.originMax = options.originMax; + + // this.factorName = options.factorName; + // this.factorId = options.factorId; + // this.colors = options.colors; + // this.bottomColors = options.bottomColors; + // this.bottomColor = options.bottomColor; + // this.standardMin = options.standardMin; + // this.standardMax = options.standardMax; + + // this.legendType = options.legendType; } } @@ -124,12 +137,12 @@ this.heights = []; this.colors = []; this.datas.forEach((d) => { - var h = getFactorHeight(d.factorId, d.factorData, [this.min, this.max]); + let h = getFactorHeight(d.factorId, d.factorData, [this.min, this.max]); if (d.factorData == -1) { h = -1; } this.heights.push(h); - var c = Legend.getColor( + const c = Legend.getColor( this.factorName, this.legendType, d.factorData, @@ -137,6 +150,8 @@ this.max ); this.colors.push(c); + const b = Legend.getPreviousColor(this.factorName, this.legendType, c); + this.bottomColors.push(b); // this.heights.push(d.factorData) }); this.bottomColor = Legend.getColor( @@ -181,6 +196,7 @@ originMax: this.originMax, factorName: this.factorName, colors: this.colors, + bottomColors: this.bottomColors, bottomColor: this.bottomColor, standardMin: this.standardMin, standardMax: this.standardMax @@ -193,24 +209,49 @@ if (d1 == undefined || d2 == undefined) { return; } + let diffValue = d2.factorData - d1.factorData; + // 瀵逛簬椋庡悜鐭㈤噺鏉ヨ锛屽姩鐢荤殑鍙樺寲搴旇浠庝袱涓鍚戝す瑙掕緝灏忕殑閭d竴渚ц繘琛屽彉鍖� + if (this.factorName == 'WIND_DIRECTION') { + // 椋庡悜瑙掑害宸� + if (diffValue > 180) { + diffValue -= 360; + } else if (diffValue < -180) { + diffValue += 360; + } + } // 鍗曞抚鏁版嵁鍊肩殑宸�� - var dValue = { - factorData: (d2.factorData - d1.factorData) / count, - physicalQuantity: (d2.physicalQuantity - d2.physicalQuantity) / count + const dValue = { + factorData: diffValue / count + // physicalQuantity: (d2.physicalQuantity - d2.physicalQuantity) / count + }; + + // 椋庡悜鐭㈤噺淇 + const correct = (v) => { + if (this.factorName == 'WIND_DIRECTION') { + if (v < 0) { + return 360 + v; + } else if (v > 360) { + return v - 360; + } else { + return v; + } + } else { + return v; + } }; for (let i = 0; i < count - 1; i++) { var _data = { - factorData: d1.factorData + dValue.factorData * (i + 1), + factorData: correct(d1.factorData + dValue.factorData * (i + 1)), factorId: d1.factorId, factorName: d1.factorName, - physicalQuantity: - d1.physicalQuantity + dValue.physicalQuantity * (i + 1), + // physicalQuantity: + // d1.physicalQuantity + dValue.physicalQuantity * (i + 1), sensorId: d1.sensorId, statusList: d1.statusList }; if (!isDraw) { _data.factorData = -1; - _data.physicalQuantity = -1; + // _data.physicalQuantity = -1; } this.datas.push(_data); } -- Gitblit v1.9.3