From a5e288eead42db17f8715bc21326465648bc1c04 Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Wed, 27 Mar 2024 13:17:32 +0800
Subject: [PATCH] fix: 盐城热力图

---
 src/views/hotMap/index.vue |  344 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 231 insertions(+), 113 deletions(-)

diff --git a/src/views/hotMap/index.vue b/src/views/hotMap/index.vue
index 87e56fc..c20b9be 100644
--- a/src/views/hotMap/index.vue
+++ b/src/views/hotMap/index.vue
@@ -22,11 +22,10 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item>
-          <el-select
+          <!-- <el-select
             v-model="orgId"
             size="small"
             placeholder="���������"
-            disabled
             @change="regionData"
           >
             <el-option
@@ -35,7 +34,15 @@
               :label="item.name"
               :value="item.id"
             />
-          </el-select>
+          </el-select> -->
+          <el-cascader
+            v-model="orgId"
+            size="small"
+            :options="orgData"
+            :props="props"
+            clearable
+            @change="regionData"
+          />
         </el-form-item>
         <el-form-item>
           <el-radio-group
@@ -78,7 +85,7 @@
         class="buttomColorLine"
       />
       <Main
-        v-if="dateTimes.length > 0&&formInline.city!==''"
+        v-if="dateTimes.length > 0"
         :options="options"
         :date-times="dateTimes"
         :date-type="formInline.dayType"
@@ -89,7 +96,7 @@
 </template>
 
 <script>
-import dayjs from 'dayjs'
+// import dayjs from 'dayjs'
 import _ from 'lodash'
 import selectHour from './components/selectHour.vue'
 import Main from './components/timeLinePlay.vue'
@@ -102,11 +109,12 @@
       heatmap: null,
       markerClusterer: null,
       orgData: [],
-      orgId: 71,
+      props: { checkStrictly: true, label: 'name', value: 'id', children: 'children' },
+      orgId: [],
       city: '������',
       formInline: {
-        city: '���������',
-        cityCode: '210381',
+        city: '',
+        cityCode: '',
         dayType: 'hour',
         starTime: '',
         endTime: '',
@@ -118,13 +126,13 @@
         maxNumber: 500,
         src: require('@/assets/images/tl_PM10.png'),
         gradient: {
-          '0': '#12a112',
-          '0.1': '#12a112',
-          '0.3': '#feff01',
-          '0.5': '#fd8200',
-          '0.7': '#fd0001',
-          '0.84': '#95014b',
-          '1': '#7e0226'
+          0: '#12a112',
+          0.1: '#12a112',
+          0.3: '#feff01',
+          0.5: '#fd8200',
+          0.7: '#fd0001',
+          0.84: '#95014b',
+          1: '#7e0226'
         }},
       sensorArr: [
         { code: 'a34002',
@@ -132,91 +140,93 @@
           maxNumber: 500,
           src: require('@/assets/images/tl_PM10.png'),
           gradient: {
-            '0': '#12a112',
-            '0.1': '#12a112',
-            '0.3': '#feff01',
-            '0.5': '#fd8200',
-            '0.7': '#fd0001',
-            '0.84': '#95014b',
-            '1': '#7e0226'
+            0: '#12a112',
+            0.1: '#12a112',
+            0.3: '#feff01',
+            0.5: '#fd8200',
+            0.7: '#fd0001',
+            0.84: '#95014b',
+            1: '#7e0226'
           }},
         { code: 'a34004',
           name: 'PM2.5',
           maxNumber: 350,
           src: require('@/assets/images/tl_PM2.5.png'),
           gradient: {
-            '0': '#12a112',
-            '0.1': '#12a112',
-            '0.21': '#feff01',
-            '0.32': '#fd8200',
-            '0.42': '#fd0001',
-            '0.71': '#95014b',
-            '1': '#7e0226'
+            0: '#12a112',
+            0.1: '#12a112',
+            0.21: '#feff01',
+            0.32: '#fd8200',
+            0.42: '#fd0001',
+            0.71: '#95014b',
+            1: '#7e0226'
           } },
         { code: 'a21026',
           name: 'SO2',
-          maxNumber: 1000,
+          maxNumber: 150,
           src: require('@/assets/images/tl_SO2.png'),
           gradient: {
-            '0': '#12a112',
-            '0.05': '#12a112',
-            '0.15': '#feff01',
-            '0.47': '#fd8200',
-            '0.8': '#fd0001',
-            '0.9': '#95014b',
-            '1': '#7e0226'
-          } },
+            1: '#feff01',
+            0.3: '#12a112',
+          }
+        },
         { code: 'a21004',
           name: 'NO2',
-          maxNumber: 750,
+          maxNumber: 400,
           src: require('@/assets/images/tl_NO2.png'),
           gradient: {
-            '0': '#12a112',
-            '0.05': '#12a112',
-            '0.1': '#feff01',
-            '0.24': '#fd8200',
-            '0.37': '#fd0001',
-            '0.75': '#95014b',
-            '1': '#7e0226'
+            0: '#12a112',
+            0.1: '#12a112',
+            0.15: '#feff01',
+            0.19: '#feff01',
+            0.20: '#fd8200',
+            0.25: '#fd8200',
+            0.45: '#fd8200',
+            0.5: '#fd0001',
+            0.7: '#95014b',
+            1: '#7e0226'
           }},
         { code: 'a21005',
           name: 'CO',
           maxNumber: 48,
           src: require('@/assets/images/tl_CO.png'),
           gradient: {
-            '0.0': '#12a112',
-            '0.04': '#12a112',
-            '0.083': '#feff01',
-            '0.29': '#fd8200',
-            '0.5': '#fd0001',
-            '0.75': '#95014b',
-            '1': '#7e0226'
+            0.0: '#12a112',
+            0.04: '#12a112',
+            0.083: '#feff01',
+            0.29: '#fd8200',
+            0.5: '#fd0001',
+            0.75: '#95014b',
+            1: '#7e0226'
           }},
         { code: 'a05024',
           name: 'O3',
-          maxNumber: 1000,
+          maxNumber: 500,
           src: require('@/assets/images/tl_O3.png'),
           gradient: {
-            '0': '#12a112',
-            '0.16': '#12a112',
-            '0.2': '#feff01',
-            '0.3': '#fd8200',
-            '0.4': '#fd0001',
-            '0.8': '#95014b',
-            '1': '#7e0226'
+            0: '#12a112',
+            0.32: '#12a112',
+            0.33: '#feff01',
+            0.4: '#feff01',
+            0.41: '#fd8200',
+            0.6: '#fd8200',
+            0.61: '#fd0001',
+            0.8: '#fd0001',
+            0.9: '#95014b',
+            1: '#7e0226'
           } },
         { code: 'a99054',
           name: 'TVOC',
           maxNumber: 4,
           src: require('@/assets/images/tl_TVOCNew.png'),
           gradient: {
-            '0': '#12a112',
-            '0.12': '#12a112',
-            '0.25': '#feff01',
-            '0.375': '#fd8200',
-            '0.5': '#fd0001',
-            '0.75': '#95014b',
-            '1': '#7e0226'
+            0: '#12a112',
+            0.12: '#12a112',
+            0.25: '#feff01',
+            0.375: '#fd8200',
+            0.5: '#fd0001',
+            0.75: '#95014b',
+            1: '#7e0226'
           }}
       ],
       heatMapData: [],
@@ -225,6 +235,7 @@
         speed: 2
       },
       polygon: null,
+      districtSearch: null,
       dateTimes: [],
       activeItem: {},
       markerList: []
@@ -249,39 +260,31 @@
       },
       deep: true
     },
-    'formInline.city': {
-      handler: function (newVal, oldVal) {
-        console.log('newVal', newVal === '')
-        if (newVal !== '') {
-          this.init1()
-          if (!!this.formInline.starTime && !!this.formInline.endTime) {
-            this.onSubmit()
-          }
-        }
-      },
-      deep: true
-    },
+    // 'formInline.city': {
+    //   handler: function (newVal, oldVal) {
+    //     console.log('newVal', newVal === '')
+    //     if (newVal !== '') {
+    //       this.init1()
+    //       if (!!this.formInline.starTime && !!this.formInline.endTime) {
+    //         this.onSubmit()
+    //       }
+    //     }
+    //   },
+    //   deep: true
+    // },
     activeItem: {
       handler (newVal, oldVal) {
-        if (this.markerList.length > 0) {
-          console.log('2222', this.map.getAllOverlays('marker'))
-          this.map.remove(this.markerList)
-          this.markerList = []
-          // this.markerClusterer = null
-        }
-        this.getData(newVal.name)
+
       },
       deep: true
     }
   },
+  created () {
+  },
   mounted () {
-    let dataTime = dayjs().format('YYYY-MM-DD')
+    // let dataTime = dayjs().format('YYYY-MM-DD')
     this.getOrganizationId()
-    this.getData(`${dataTime} 00`)
-    this.$nextTick(() => {
-      this.initMap()
-      this.createHeatMap()
-    })
+    // this.getData(`${dataTime} 00`)
   },
 
   destroyed () {
@@ -307,6 +310,9 @@
     getDateFun (item) {
       console.log(item)
       this.activeItem = item
+      if (this.orgId.length > 0) {
+        this.getData(item.name)
+      }
     },
     getPollutant (data) {
       this.selectSensor = _.find(this.sensorArr, { name: data })
@@ -319,24 +325,31 @@
     },
     // ���������������
     initMap () {
+      let zoom = 10
+      if (this.formInline.cityCode === '320900') {
+        zoom = this.formInline.areName === 'dafengqu' ? 15 : 13
+      }
       var map = new AMap.Map('mapd', {
         resizeEnable: true,
-        zooms: [10, 10],
-        zoom: 10,
+        zoomEnable: false,
+        zoom: zoom
       })
       this.map = map
+      map.on('click', function (e) {
+        console.log('e.lnglat.getLng() + ', ' + e.lnglat.getLat()', e.lnglat.getLng() + ',' + e.lnglat.getLat())
+      })
       this.init1()
       // let that = this
     },
     init1 () { // ������������
       var that = this
-      this.map.setCity(this.formInline.city)
-      console.log('������', this.formInline.cityCode)
       if (that.polygon) {
         that.map.remove(that.polygon)
+        that.map.remove(that.districtSearch)
+        that.polygon = null
+        that.districtSearch = null
       }
-      console.log('that.polygon', that.polygon)
-      AMap.plugin('AMap.DistrictSearch', function () {
+      this.districtSearch = AMap.plugin('AMap.DistrictSearch', function () {
         new AMap.DistrictSearch({
           extensions: 'all',
           subdistrict: 0
@@ -347,9 +360,45 @@
             new AMap.LngLat(360, -90, true),
             new AMap.LngLat(360, 90, true)
           ]
-          var holes = result.districtList[0].boundaries
           var pathArray = [outer]
-          pathArray.push.apply(pathArray, holes)
+          let ycPoints = {
+            areas: [{ // ������1
+              rejectTexture: true, // ������������������������������������
+              path: [[
+                [120.06316306, 33.41753995999999],
+                [120.2617243421, 33.41753995999999],
+                [120.2617243421, 33.308387182],
+                [120.06316306, 33.308387182],
+                [120.06316306, 33.41753995999999]
+              ]]
+            }]
+          }
+
+          var holes = result.districtList[0].boundaries
+          console.log('that.formInline', that.formInline)
+          if (that.formInline.cityCode === '320900') {
+            // ������
+
+            that.map.setCenter([120.16, 33.36])
+            if (that.formInline.areName === 'dafengqu') {
+              that.map.setCenter([120.435345, 33.203704])
+              ycPoints = {
+                areas: [{ // ������1
+                  rejectTexture: true, // ������������������������������������
+                  path: [[ [120.41615942, 33.215693],
+                    [120.45416756599998, 33.215693],
+                    [120.45416756599998, 33.192137742599996],
+                    [120.41615942000003, 33.19213774259998],
+                    [120.41615942, 33.215693] ]]
+                }]
+              }
+            }
+            pathArray.push.apply(pathArray, ycPoints.areas[0].path)
+          } else {
+            pathArray.push.apply(pathArray, holes)
+            that.map.setCity(that.formInline.city)
+          }
+          // pathArray.push.apply(pathArray, holes)
           that.polygon = new AMap.Polygon({
             pathL: pathArray,
             strokeColor: 'red', // ������������������
@@ -367,7 +416,7 @@
         url: '/heatMap/query',
         method: 'get',
         params: {
-          id: this.orgId,
+          id: this.orgId[0],
           startTime: newVal,
           type: this.selectSensor.code,
           form: this.formInline.dayType
@@ -378,21 +427,59 @@
             if (this.heatmap === null) {
               this.createHeatMap()
             }
-            this.heatMapData = []
             this.heatMapData = res.data
+            this.dataProcessing(this.heatMapData)
             this.heatmap.setDataSet({
               data: this.heatMapData,
               max: this.selectSensor.maxNumber
             })
-            console.log('000', this.selectSensor.maxNumber)
-            console.log('1111', this.heatmap.getDataSet())
           } else {
+            this.map.remove(this.heatmap)
             this.heatmap = null
           }
         })
         .catch(err => {
           console.log(err)
         })
+    },
+    dataProcessing (heatMapData) {
+      // ���������������
+      console.log('this.heatMapData', this.heatMapData)
+      const max = heatMapData.reduce((prev, current) => (prev.count > current.count ? prev : current)).count
+
+      // so2
+      if (this.selectSensor.code === 'a21026') {
+        if (max > 150 && max <= 475) {
+          this.selectSensor.maxNumber = 475
+          this.heatmap.setOptions({
+            gradient: {
+              0.1: '#12a112',
+              0.2: '#feff01',
+              0.3: '#feff01',
+              0.32: '#fd8200',
+              0.4: '#fd8200',
+              1: '#fd8200'
+            }
+          })
+        }
+        if (max > 475 && max <= 1000) {
+          this.selectSensor.maxNumber = 1000
+          this.heatmap.setOptions({
+            gradient: {
+              0: '#12a112',
+              0.05: '#12a112',
+              0.15: '#feff01',
+              0.47: '#fd8200',
+              0.5: '#fd0001',
+              0.8: '#fd0001',
+              0.9: '#95014b',
+              1: '#7e0226'
+            }
+          })
+        }
+      } else if (this.selectSensor.code === 'a05024') {
+        if (max > 150 && max <= 475) {}
+      }
     },
     // ���������
     setMarkers (curData) {
@@ -491,7 +578,18 @@
         method: 'get'
       })
         .then(res => {
-          this.orgData = res.data
+          this.orgData = res.data.map(item => {
+            if (item.id === 73) {
+              item.children = [{
+                id: 'shiqu',
+                name: '������'
+              }, {
+                id: 'dafengqu',
+                name: '���������'
+              }]
+            }
+            return item
+          })
         })
         .catch(err => {
           console.log(err)
@@ -499,10 +597,12 @@
     },
     createHeatMap () {
       let that = this
+      let radius = this.formInline.areName === 'shiqu' ? 100 : 100
+      console.log('radius', radius)
       this.map.plugin(['AMap.Heatmap'], function () {
         // ���������heatmap������
         that.heatmap = new AMap.Heatmap(that.map, {
-          radius: 130, // ������������
+          radius: radius, // ������������
           opacity: [0.5, 1],
           gradient: that.selectSensor.gradient
         })
@@ -511,10 +611,16 @@
 
     onSubmit () {
       if (!!this.formInline.city && !!this.formInline.starTime && !!this.formInline.endTime) {
-        this.map.clearMap()
+        // this.map.clearMap()
+
         this.getDayListData()
+
+        if (this.map) {
+          this.map.destroy()
+        }
+        this.initMap()
+        this.createHeatMap()
         this.getData(this.formInline.starTime)
-        this.init1()
         // this.map.setZoom(12)
       } else {
         this.$message({
@@ -526,15 +632,27 @@
       }
     },
     regionData (id) {
-      let cityData = _.find(this.orgData, { id: id })
-      this.formInline.city = cityData.areaName
-      this.formInline.cityCode = cityData.areaCode
+      console.log('id', id)
+      let cityData = _.find(this.orgData, { id: id[0] })
+      if (id[0] === 73) {
+        if (id[1]) {
+          this.formInline.areName = id[1]
+        }
+        this.formInline.city = cityData.cityName
+        this.formInline.cityCode = String(cityData.cityCode)
+      } else {
+        this.formInline.city = cityData.areaName
+        this.formInline.cityCode = String(cityData.areaCode)
+      }
     },
     selectHourData (data) {
+      console.log('ccccc', this.formInline)
       if (data) {
         this.formInline.starTime = data[0]
         this.formInline.endTime = data[1]
-        this.getDayListData()
+        if (this.formInline.city) {
+          this.getDayListData()
+        }
       } else {
         this.formInline.starTime = ''
         this.formInline.endTime = ''

--
Gitblit v1.8.0