From 4627fc484c1697ca7e9f05f9e5d2d85341b526fe Mon Sep 17 00:00:00 2001
From: 徐旺旺 <11530253@qq.com>
Date: 星期四, 25 二月 2021 18:12:27 +0800
Subject: [PATCH] 修改图层控制

---
 src/main.js                                                     |    1 
 src/components/LayerController/modules/LcServiceLayerFilter.vue |   10 ++-
 src/conf/MapConfig.js                                           |    3 
 package.json                                                    |    2 
 src/conf/LayerSewers.js                                         |    4 +
 src/components/helpers/ServiceLayerHelper.js                    |  104 ++++++++++++++++------------------
 src/components/LayerController/modules/LcServiceLayer.vue       |   12 +++-
 src/Sgis.js                                                     |    2 
 src/store/modules/map.js                                        |   12 +++-
 9 files changed, 83 insertions(+), 67 deletions(-)

diff --git a/package.json b/package.json
index a9d5e32..ba42def 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
     "jquery": "^3.5.1",
     "js-cookie": "^2.2.0",
     "leaflet": "^1.6.0",
-    "leaflet-canvas-marker": "^0.2.0",
+    "leaflet-canvas-markers": "^1.0.6",
     "leaflet.markercluster": "^1.4.1",
     "lodash": "^4.17.10",
     "nprogress": "^0.2.0",
diff --git a/src/Sgis.js b/src/Sgis.js
index 264422a..6ae1b0a 100644
--- a/src/Sgis.js
+++ b/src/Sgis.js
@@ -4,7 +4,6 @@
 
 import Editable from '@components/plugin/Editable'
 import PathDrag from '@components/plugin/PathDrag'
-import CanvasIcon from '@components/plugin/CanvasMarkers'
 import MagicMarker from '@components/plugin/MagicMarker'
 import WmtsSupport from '@components/plugin/wmts_plugins'
 
@@ -21,7 +20,6 @@
   Editable.init(L) // 鍥惧眰缂栬緫
   PathDrag.init(L) // 璺緞鎷栨嫿
   MagicMarker.init(L) // 鍔ㄧ敾Marker
-  CanvasIcon.init(L) // 浣跨敤canvas缁樺埗Marker
   WmtsSupport.init(L) // 鎵╁睍锛屼娇鏀寔WMTS
   // CustomPopup.init(L) // 鑷畾涔夊脊鍑烘
   DashFlow.DashFlow(L) // 娴佸姩绾垮浘
diff --git a/src/components/LayerController/modules/LcServiceLayer.vue b/src/components/LayerController/modules/LcServiceLayer.vue
index 09ec4c4..9833b42 100644
--- a/src/components/LayerController/modules/LcServiceLayer.vue
+++ b/src/components/LayerController/modules/LcServiceLayer.vue
@@ -11,7 +11,8 @@
                                                                                                       :name="'wmsSublayers_'+item.code+'_'+itm.code"
                                                                                                       :checked="itm.checked"
                                                                                                       :value="itm.code"
-                                                                                                      @change="swWmsLayer(itm)"/>{{ itm.name }}
+                                                                                                      @change="swWmsLayer(item.url,itm)"/>{{
+                        itm.name }}
                     </div>
                 </div>
             </div>
@@ -56,9 +57,14 @@
         window.L.geoJSON(res).addTo(window.map)
       })
     },
-    swWmsLayer (itm) {
+    swWmsLayer (url, itm) {
       itm.checked = !itm.checked
-      this.updateWms()
+      if (itm.checked) {
+        window.serviceLayerHelper.loadGeojsonLayer(url, itm)
+      } else {
+        window.serviceLayerHelper.removeLayer(itm)
+      }
+      // this.updateWms()
     },
     swFilter (item) {
       this.layerFilterVisible = !this.layerFilterVisible
diff --git a/src/components/LayerController/modules/LcServiceLayerFilter.vue b/src/components/LayerController/modules/LcServiceLayerFilter.vue
index d9bad44..c4a6cef 100644
--- a/src/components/LayerController/modules/LcServiceLayerFilter.vue
+++ b/src/components/LayerController/modules/LcServiceLayerFilter.vue
@@ -7,7 +7,7 @@
                 </div>
                 <div class="content">
                     <div v-for="filter in item.filters" :key="filter.code">
-                        <input type="checkbox" :value="filter.code" :checked="filter.checked" @change="swSubFilter(filter)"><label
+                        <input type="checkbox" :value="filter.code" :checked="filter.checked" @change="swSubFilter(item.url,filter)"><label
                             :title="filter.name">{{filter.name}}</label>
                     </div>
                 </div>
@@ -58,9 +58,13 @@
       console.log(item)
       // window.serviceLayerHelper.loadLayers()
     },
-    swSubFilter (item) {
+    swSubFilter (url, item) {
       item.checked = !item.checked
-      console.log(item)
+      if (item.checked) {
+        window.serviceLayerHelper.loadGeojsonLayer(url, item)
+      } else {
+        window.serviceLayerHelper.removeLayer(item)
+      }
       // window.serviceLayerHelper.loadLayers()
     }
   }
diff --git a/src/components/helpers/ServiceLayerHelper.js b/src/components/helpers/ServiceLayerHelper.js
index cbfdedd..91bd842 100644
--- a/src/components/helpers/ServiceLayerHelper.js
+++ b/src/components/helpers/ServiceLayerHelper.js
@@ -3,7 +3,7 @@
  * 鍒涘缓鍥惧眰鐩稿叧鐨勭被
  */
 import AjaxUtils from '@/utils/AjaxUtils'
-import { GEOM_TYPE } from '../../conf/Constants'
+import store from '@/store'
 
 class ServiceLayerHelper {
   constructor (options) {
@@ -14,7 +14,7 @@
     this.tileLayersWMTSArray = [] // 鍒濆鐨刉MTS闆�
     this.tileLayersTileArray = [] // 鍒濆鐨凾ile闆�
     this.tileLayersWMSArray = [] // 鍒濆鐨刉MS闆�
-    this.geojsonArray = [] // 鍒濆鐨刧eojson闆�
+    this.geojsonArray = {} // 鍒濆鐨刧eojson闆�
     this.layerConfig = {}
     this.regex = /\{(.+?)\}/g // 鍖归厤{}
   }
@@ -51,73 +51,49 @@
           this.loadTileLayer(opt, isAddToMap)
           this.tileLayersTileArray.push(opt)
         } else if (opt.type === 'geojson') {
-          this.loadGeojson(opt)
+          this.loadGeojsonLayers(opt)
         }
       }
     }
   }
 
-  loadGeojson (options) {
+  loadGeojsonLayers (options) {
     var url = options.url
     var layers = options.layers
-    var matches = this.regex.exec(url)
     for (var i = 0; i < layers.length; i++) {
       var layer = layers[i]
-      var matchValue = layer[matches[1]]
       var checked = layer.checked
-      var geomtype = layer.geomtype
-      if (!checked) {
-        continue
+      if (checked) {
+        this.loadGeojsonLayer(url, layer)
       }
-      var newUrl = url.replace(this.regex, matchValue)
-      var that = this
+    }
+  }
+
+  loadGeojsonLayer (url, layer) {
+    var matches = this.regex.exec(url)
+    var matchValue = layer[matches[1]]
+    var code = layer.code
+    var newUrl = url.replace(this.regex, matchValue)
+    var that = this
+    if (!that.geojsonArray[code]) {
       AjaxUtils.GetDataAsynByUrl(newUrl, {}, function (res) {
-        switch (geomtype) {
-          case GEOM_TYPE.POINT :
-            that.loadPointGeojson(res)
-            break
-          case GEOM_TYPE.LINE :
-            that.loadLineGeojson(res)
-            break
-          case GEOM_TYPE.POLYGON :
-            break
-          default:
-            that.loadLineGeojson(res)
-            break
-        }
+        store.commit('setMapObj', res)
+        var layer = that.loadGeojson(res)
+        that.geojsonArray[code] = layer
       })
     }
   }
 
   /**
-   * 鍔犺浇鐐规暟鎹�
-   * @param res
-   */
-  loadPointGeojson (res) {
-    this.L.geoJSON(res.features, {
-      pointToLayer: function (geoJsonPoint, latlng) {
-        return this.L.canvasMarker(latlng,
-          {
-            radius: 20,
-            prevLatlng: this.L.latLng(51.503, -0.09), // previous point
-            img: {
-              url: './images/beng.png',
-              size: [20, 20],
-              rotate: 90
-            }
-          })
-      }
-    }).bindPopup(function (layer) {
-      // return layer.feature.properties.linenumber
-    }).addTo(this.map)
-  }
-
-  /**
-   * 鍔犺浇绾挎暟鎹�
-   * @param res
-   */
-  loadLineGeojson (res) {
-    this.L.geoJSON(res.features, {
+     * 鍔犺浇鐐规暟鎹�
+     * @param res
+     */
+  loadGeojson (res) {
+    var that = this
+    const featureGroup = that.L.featureGroup([], {
+      attribution: { id: '123' }
+    }).addTo(that.map)
+    that.L.geoJSON(res.features, {
       style: function (feature) {
         return {
           fill: true,
@@ -130,10 +106,30 @@
           dashSpeed: -10
         }
       },
-      minZoom: 10
+      pointToLayer: function (geoJsonPoint, latlng) {
+        return that.L.canvasMarker(latlng,
+          {
+            radius: 20,
+            img: {
+              url: 'assets/images/map/marker-icon.png',
+              size: [20, 20]
+            }
+          })
+      }
     }).bindPopup(function (layer) {
       // return layer.feature.properties.linenumber
-    }).addTo(this.map)
+    }).addTo(featureGroup)
+    featureGroup.bringToBack()
+    return featureGroup
+  }
+
+  removeLayer (item) {
+    var code = item.code
+    var layer = this.geojsonArray[code]
+    if (layer) {
+      this.map.removeLayer(layer)
+      delete this.geojsonArray[code]
+    }
   }
 
   /**
diff --git a/src/conf/LayerSewers.js b/src/conf/LayerSewers.js
index 01626a2..f6f45cd 100644
--- a/src/conf/LayerSewers.js
+++ b/src/conf/LayerSewers.js
@@ -98,6 +98,7 @@
     code: 'fsss',
     name: '闄勫睘璁炬柦',
     checked: false, // 榛樿閫変腑鐘舵��
+    url: APP_GIS_HOST_2 + '/layer/findLayer?layerName={sname}',
     filters: [
       {
         code: 'fourlink',
@@ -161,6 +162,7 @@
     code: 'hbss',
     name: '鐜繚璁炬柦',
     checked: false, // 榛樿閫変腑鐘舵��
+    url: APP_GIS_HOST_2 + '/layer/findLayer?layerName={sname}',
     filters: [
       {
         code: 'manhole',
@@ -217,6 +219,7 @@
     code: 'pk',
     name: '鎺掑彛',
     checked: false, // 榛樿閫変腑鐘舵��
+    url: APP_GIS_HOST_2 + '/layer/findLayer?layerName={sname}',
     filters: [
       {
         code: 'dischargeport',
@@ -231,6 +234,7 @@
     code: 'qyxx',
     name: '鍖哄煙淇℃伅',
     checked: false, // 榛樿閫変腑鐘舵��
+    url: APP_GIS_HOST_2 + '/layer/findLayer?layerName={sname}',
     filters: [
       {
         code: 'thirdpartypipe',
diff --git a/src/conf/MapConfig.js b/src/conf/MapConfig.js
index dccff74..fdaa00f 100644
--- a/src/conf/MapConfig.js
+++ b/src/conf/MapConfig.js
@@ -27,7 +27,8 @@
   inertia: true,
   zoomControl: false,
   attributionControl: false,
-  editable: true
+  editable: true,
+  preferCanvas: true
 }
 
 const mapConfig = {
diff --git a/src/main.js b/src/main.js
index 45c8a84..cf57dcb 100644
--- a/src/main.js
+++ b/src/main.js
@@ -11,6 +11,7 @@
 import 'leaflet/dist/leaflet.css'
 import L from 'leaflet'
 import 'leaflet.markercluster'
+import 'leaflet-canvas-markers'
 Vue.config.productionTip = false
 
 Vue.use(ElementUI, { size: 'small' })
diff --git a/src/store/modules/map.js b/src/store/modules/map.js
index c6b997e..6016809 100644
--- a/src/store/modules/map.js
+++ b/src/store/modules/map.js
@@ -14,12 +14,20 @@
   selectedServiceLayer: '', // 浣跨敤杩囨护鍣ㄦ椂锛岃鎵撳紑鐨刉MS鏈嶅姟鐨凜ODE
   serviceLayerFilters: {}, // 鏈嶅姟鍥惧眰鎺у埗杩囨护閰嶇疆
   checkedLayers: {}, // 閫変腑鍥惧眰瀵硅薄
+  // 鍥惧眰鏁版嵁
+  datas: {
+    sewers: []
+  },
   config: config,
   serviceLayers: config.mapConfig.Layers
 }
 const mutations = {
   setMapObj (state, map) {
     state.map = map
+  },
+  // 璁剧疆姹¢洦姘村浘灞傛暟鎹�
+  setSewersDatas (state, sewersDatas) {
+    state.datas.sewers = sewersDatas
   },
   setBasemapHelper (state, layerHelper) {
     state.basemapHelper = layerHelper
@@ -43,9 +51,7 @@
     state.showServiceLayerFilter = !state.showServiceLayerFilter
   }
 }
-const actions = {
-
-}
+const actions = {}
 export default {
   state,
   mutations,

--
Gitblit v1.8.0