Explorar el Código

测风塔风向玫瑰图

xusl hace 7 meses
padre
commit
9283034bbd

+ 142 - 2
cpp-admin/src/main/java/com/cpp/web/controller/stationDataQuery/WindTowerStatusDataController.java

@@ -82,9 +82,17 @@ public class WindTowerStatusDataController {
         List<BigDecimal> ws80List = new ArrayList<>();
         List<BigDecimal> ws90List = new ArrayList<>();
         List<BigDecimal> ws100List = new ArrayList<>();
+        List<BigDecimal> wdHubHeightList = new ArrayList<>();
+        List<BigDecimal> wd10List = new ArrayList<>();
+        List<BigDecimal> wd30List = new ArrayList<>();
+        List<BigDecimal> wd50List = new ArrayList<>();
+        List<BigDecimal> wd60List = new ArrayList<>();
+        List<BigDecimal> wd70List = new ArrayList<>();
+        List<BigDecimal> wd80List = new ArrayList<>();
+        List<BigDecimal> wd90List = new ArrayList<>();
+        List<BigDecimal> wd100List = new ArrayList<>();
         LinkedHashMap<String, List> wsMap = new LinkedHashMap<>();
 
-
         Long momentTime = 5 * 60 * 1000L;
         for (Long tempTime = startTime; tempTime <= endTime; tempTime = tempTime + momentTime) {
             // 设置时间
@@ -95,30 +103,48 @@ public class WindTowerStatusDataController {
                 // 风速轮毂
                 BigDecimal wsHubHeight = windTowerStatusData.getWsHubHeight();
                 wsHubHeightList.add(wsHubHeight);
+                // 轮毂风向
+                wdHubHeightList.add(windTowerStatusData.getWdHubHeight());
                 // ws10
                 BigDecimal ws10 = windTowerStatusData.getWs10();
                 ws10List.add(ws10);
+                // wd10
+                wd10List.add(windTowerStatusData.getWd10());
                 // ws30
                 BigDecimal ws30 = windTowerStatusData.getWs30();
                 ws30List.add(ws30);
+                // wd30
+                wd30List.add(windTowerStatusData.getWd30());
                 // ws50
                 BigDecimal ws50 = windTowerStatusData.getWs50();
                 ws50List.add(ws50);
+                // wd50
+                wd50List.add(windTowerStatusData.getWd50());
                 // ws60
                 BigDecimal ws60 = windTowerStatusData.getWs60();
                 ws60List.add(ws60);
+                // wd60
+                wd60List.add(windTowerStatusData.getWd60());
                 // ws70
                 BigDecimal ws70 = windTowerStatusData.getWs70();
                 ws70List.add(ws70);
+                // wd70
+                wd70List.add(windTowerStatusData.getWd70());
                 // ws80
                 BigDecimal ws80 = windTowerStatusData.getWs80();
                 ws80List.add(ws80);
+                // wd80
+                wd80List.add(windTowerStatusData.getWd80());
                 // ws90
                 BigDecimal ws90 = windTowerStatusData.getWs90();
                 ws90List.add(ws90);
+                // wd90
+                wd90List.add(windTowerStatusData.getWd90());
                 // ws100
                 BigDecimal ws100 = windTowerStatusData.getWs100();
                 ws100List.add(ws100);
+                // wd100
+                wd100List.add(windTowerStatusData.getWd100());
             }
             else{
                 // 风速轮毂
@@ -141,7 +167,6 @@ public class WindTowerStatusDataController {
                 ws100List.add(null);
             }
         }
-
         wsMap.put("轮毂风速", wsHubHeightList);
         wsMap.put("10米风速", ws10List);
         wsMap.put("30米风速", ws30List);
@@ -156,6 +181,121 @@ public class WindTowerStatusDataController {
         returnMap.put("tableList", talbeList);
         returnMap.put("wsTime", timeList);
         returnMap.put("wsMap", wsMap);
+
+        LinkedHashMap<String, Float[]> wdMap = new LinkedHashMap<>();
+        Float[] wdHubHeightRate = getCalcWd(wdHubHeightList);
+        Float[] wd10Rate = getCalcWd(wd10List);
+        Float[] wd30Rate = getCalcWd(wd30List);
+        Float[] wd50Rate = getCalcWd(wd50List);
+        Float[] wd60Rate = getCalcWd(wd60List);
+        Float[] wd70Rate = getCalcWd(wd70List);
+        Float[] wd80Rate = getCalcWd(wd80List);
+        Float[] wd90Rate = getCalcWd(wd90List);
+        Float[] wd100Rate = getCalcWd(wd100List);
+        wdMap.put("轮毂风向", wdHubHeightRate);
+        wdMap.put("10米风向", wd10Rate);
+        wdMap.put("30米风向", wd30Rate);
+        wdMap.put("50米风向", wd50Rate);
+        wdMap.put("60米风向", wd60Rate);
+        wdMap.put("70米风向", wd70Rate);
+        wdMap.put("80米风向", wd80Rate);
+        wdMap.put("90米风向", wd90Rate);
+        wdMap.put("100米风向", wd100Rate);
+        returnMap.put("wdMap", wdMap);
+
         return R.ok(returnMap);
     }
+
+    /**
+     * 计算风向
+     * @return
+     */
+    private Float[] getCalcWd(List<BigDecimal> wdList){
+        int[] frequency16 = new int[16];
+        Float[] frequency16Rate = new Float[16];
+        for(BigDecimal b: wdList){
+            if(b!=null){
+                float wdfloat = b.floatValue();
+                //N 北 0 348.76-11.25
+                if( (wdfloat>=348.76F && wdfloat<=360F) || (wdfloat>=0 && wdfloat<= 11.25)){
+                    frequency16[0]++;
+                }
+                //NNE 北东北 22.5 11.26-33.75
+                if(wdfloat>=11.26F && wdfloat<=33.75F){
+                    frequency16[15]++;
+                }
+                //NE 东北 45 33.76-56.25
+                if(wdfloat>=33.76F && wdfloat<=56.25F){
+                    frequency16[14]++;
+                }
+                //ENE 东东北 67.5 56.26-78.75
+                if(wdfloat>=56.26F && wdfloat<=78.75F){
+                    frequency16[13]++;
+                }
+                //E 东 90 78.76-101.25
+                if(wdfloat>=78.76F && wdfloat<=101.25F){
+                    frequency16[12]++;
+                }
+                //ESE 东东南 112.5 101.26-123.75
+                if(wdfloat>=101.26F && wdfloat<=123.75F){
+                    frequency16[11]++;
+                }
+                //SE 东南 135 123.76-146.25
+                if(wdfloat>=123.76F && wdfloat<=146.25F){
+                    frequency16[10]++;
+                }
+                //SSE 南东南 157.5 146.26-168.75
+                if(wdfloat>=146.26F && wdfloat<=168.75F){
+                    frequency16[9]++;
+                }
+                //S 南 180 168.76-191.25
+                if(wdfloat>=168.76F && wdfloat<=191.25F){
+                    frequency16[8]++;
+                }
+                //SSW 南西南 202.5 191.26-213.75
+                if(wdfloat>=191.26F && wdfloat<=213.75F){
+                    frequency16[7]++;
+                }
+                //SW 西南  225 213.76-236.25
+                if(wdfloat>=213.76F && wdfloat<=236.25F){
+                    frequency16[6]++;
+                }
+                //WSW 西西南 247.5 236.26-258.75
+                if(wdfloat>=236.26F && wdfloat<=258.75F){
+                    frequency16[5]++;
+                }
+                //W 西 270 258.76-281.25
+                if(wdfloat>=258.76F && wdfloat<=281.25F){
+                    frequency16[4]++;
+                }
+                //WNW 西西北 295.5 281.26-303.75
+                if(wdfloat>=281.26F && wdfloat<=303.75F){
+                    frequency16[3]++;
+                }
+                //NW 西北 315 303.76-326.25
+                if(wdfloat>=303.76F && wdfloat<=326.25F){
+                    frequency16[2]++;
+                }
+                //NNW 北西北 337.5 326.26-348.
+                if(wdfloat>=326.26F && wdfloat<=348.75F){
+                    frequency16[1]++;
+                }
+            }
+        }
+        BigDecimal sumToltal= new BigDecimal(0);
+        for(int wdf:frequency16){
+            BigDecimal b = new BigDecimal(wdf);
+            sumToltal = sumToltal.add(b);
+        }
+
+        for(int i =0; i<frequency16.length;i++){
+            if(frequency16[i] ==0){
+                frequency16Rate[i]= 0f;
+            }else{
+                BigDecimal dividend = new BigDecimal(frequency16[i]);
+                frequency16Rate[i] =dividend.divide(sumToltal,2, BigDecimal.ROUND_HALF_UP).floatValue();
+            }
+        }
+        return frequency16Rate;
+    }
 }

+ 12 - 41
cpp-ui/src/views/stationDataQuery/windtowerstatusdata/index.vue

@@ -743,8 +743,9 @@ export default {
 
         let wsMap = response.data.wsMap
         let wsTime = response.data.wsTime
+        let wdMap = response.data.wdMap
         this.wsDraw(wsTime,wsMap)
-
+        this.wdDraw(wdMap);
 
         this.loading = false
       }).catch(() => {
@@ -896,21 +897,11 @@ export default {
         _this.wsChart.resize();
       });
     },
-    wdDraw(wdData) {
+    wdDraw(wdMap) {
       this.wdChart = echarts.init(document.getElementById('wdcharts'))
       const option = {
         backgroundColor: 'transparent',
         color: ['#4A99FF', '#4BFFFC', '#ff654a', '#edff4a', '#65ff4a', '#4affea', '#894aff', '#d84aff', '#ff4aae'],
-        title: {
-          top: 20,
-          text: '测风塔风向玫瑰图\n\n50米主风向:' + this.wd50 + '\n70米主风向:' + this.wd70,
-          textStyle: {
-            fontWeight: 'normal',
-            fontSize: 16,
-            color: '#000'
-          },
-          left: '1%'
-        },
         legend: {
           top: 20,
           width: 50,
@@ -992,38 +983,18 @@ export default {
             data: []
           }
         ],
-        props: {
-          wdData: {
-            type: Object
-          },
-          wd70: {
-            type: String
-          },
-          wd50: {
-            type: String
-          },
-          thFormat: {
-            type: Array
-          }
-        },
       }
       var index = 0;
-      for (var key in wdData) {
-        var keyName = '';
-        for (let thFormatKey in this.thFormat) {
-          if (key == thFormatKey) {
-            keyName = this.thFormat[thFormatKey];
-          }
-        }
-        option.legend.data.push(keyName)
-        if (index > 3) {
-          option.legend.selected[keyName] = false
+      for (var key in wdMap) {
+        option.legend.data.push(key)
+        if (key=='轮毂风向') {
+          option.legend.selected[key] = true
         } else {
-          option.legend.selected[keyName] = true
+          option.legend.selected[key] = false
         }
         var wd = new Object
-        wd.name = keyName
-        wd.value = wdData[key]
+        wd.name = key
+        wd.value = wdMap[key]
         wd.connectNulls = true
         wd.itemStyle = this.itemStyle[index].itemStyle
         wd.areaStyle = this.itemStyle[index].areaStyle
@@ -1031,10 +1002,10 @@ export default {
         index++;
       }
 
-      this.chart.setOption(option, true)
+      this.wdChart.setOption(option, true)
       var _this = this
       window.addEventListener("resize", function () {
-        _this.chart.resize();
+        _this.wdChart.resize();
       });
     },
   },