From 68b02f600f315550d69289c5980fc2f182ec5439 Mon Sep 17 00:00:00 2001
From: ChenZeping02609 <chenzeping02609@163.com>
Date: 星期三, 12 五月 2021 15:13:38 +0800
Subject: [PATCH] Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop

---
 src/components/LayerController/service/WmsLayerService.js      |   76 +++++++++---------
 src/conf/layers/LayerPipeLines.js                              |   30 +++++--
 src/conf/layers/LayerFsss.js                                   |    8 +-
 src/components/LayerController/dataset/WmsLayerList.js         |   70 +++++++++++++++++
 src/conf/layers/LayerHbss.js                                   |   13 +-
 src/components/LayerController/service/LayerFactory.js         |    2 
 src/components/LayerController/service/WmsLayerGroupService.js |   27 +++---
 7 files changed, 153 insertions(+), 73 deletions(-)

diff --git a/src/components/LayerController/dataset/WmsLayerList.js b/src/components/LayerController/dataset/WmsLayerList.js
new file mode 100644
index 0000000..af11119
--- /dev/null
+++ b/src/components/LayerController/dataset/WmsLayerList.js
@@ -0,0 +1,70 @@
+
+class WmsLayerList {
+  constructor () {
+    // {鍥惧眰鍚嶇О锛歔{typeName:xxx,filter:yyy}]}
+    this.layers = []
+  }
+
+  addConfig (config) {
+    const typeName = config.typeName
+    const layerGroup = config.layerGroup || typeName
+    const filter = config.filter
+    if (layerGroup) {
+      this.addLayer(layerGroup, typeName, filter)
+    }
+  }
+
+  addLayer (layerGroup, typeName, filter) {
+    const layers = this.layers
+    const layer = layers[layerGroup]
+    if (layer) {
+      layers[layerGroup].push({ typeName: typeName, filter: filter || 'INCLUDE' })
+    } else {
+      layers[layerGroup] = [{ typeName: typeName, filter: filter || 'INCLUDE' }]
+    }
+  }
+
+  remove (typeName, filter) {
+    const layers = this.layers
+    for (const k in layers) {
+      if (k === typeName) {
+        delete this.layers[k]
+        break
+      }
+      for (let i = 0; i < layers[k].length; i++) {
+        const layer = layers[k][i]
+        if (typeName === layer.typeName && filter === layer.filter) {
+          this.layers[k].splice(i, 1)
+          if (this.layers[k].length === 0) {
+            delete this.layers[k]
+          }
+          break
+        }
+      }
+    }
+  }
+
+  getLayers () {
+    const layers = this.layers
+    const _layers = []
+    for (const k in layers) {
+      _layers.push(k)
+    }
+    return _layers.join(',')
+  }
+
+  getFilters () {
+    const layers = this.layers
+    const cqlFilters = []
+    for (const k in layers) {
+      const filters = []
+      for (let i = 0; i < layers[k].length; i++) {
+        filters.push(layers[k][i].filter)
+      }
+      cqlFilters.push(filters.join(' OR '))
+    }
+    return cqlFilters.join(';')
+  }
+}
+
+export default WmsLayerList
diff --git a/src/components/LayerController/service/LayerFactory.js b/src/components/LayerController/service/LayerFactory.js
index f781247..0a661d6 100644
--- a/src/components/LayerController/service/LayerFactory.js
+++ b/src/components/LayerController/service/LayerFactory.js
@@ -36,7 +36,7 @@
         var childLayer = config.childLayer
         var checked = config.checked
         /* if (config.groupName) {
-          const wmsGroupLayerService = new WmsGroupLayerService(config)
+          const wmsGroupLayerService = new WmsLayerGroupService(config)
           wmsGroupLayerService.init()
           continue
         } */
diff --git a/src/components/LayerController/service/WmsGroupLayerService.js b/src/components/LayerController/service/WmsLayerGroupService.js
similarity index 97%
rename from src/components/LayerController/service/WmsGroupLayerService.js
rename to src/components/LayerController/service/WmsLayerGroupService.js
index 81e0e18..6f948d5 100644
--- a/src/components/LayerController/service/WmsGroupLayerService.js
+++ b/src/components/LayerController/service/WmsLayerGroupService.js
@@ -4,7 +4,7 @@
 /**
  * wms 鍥惧眰缁勭殑绠$悊
  */
-class WmsGroupLayerService {
+class WmsLayerGroupService {
   constructor (config) {
     this.config = config
     this.L = window.L
@@ -13,8 +13,18 @@
     this.map = window.map
     this.popupComp = window.popupComp
     // {groupName:{url:'.../wms',layers:[]}}
-    this.groups = []
     this.map.on('click', (e) => this.click(e))
+  }
+
+  load () {
+    for (var k in this.groups) {
+      console.log(k)
+      this.L.tileLayer.wms(PIPELINE_WMS, {
+        format: 'image/png', // 杩斿洖鐨勬暟鎹牸寮�
+        transparent: true,
+        layers: k // todo
+      }).addTo(this.layer).bringToFront()
+    }
   }
 
   init () {
@@ -53,17 +63,6 @@
           layers: [layerName]
         }
       }
-    }
-  }
-
-  load () {
-    for (var k in this.groups) {
-      console.log(k)
-      this.L.tileLayer.wms(PIPELINE_WMS, {
-        format: 'image/png', // 杩斿洖鐨勬暟鎹牸寮�
-        transparent: true,
-        layers: k // todo
-      }).addTo(this.layer).bringToFront()
     }
   }
 
@@ -114,4 +113,4 @@
   }
 }
 
-export default WmsGroupLayerService
+export default WmsLayerGroupService
diff --git a/src/components/LayerController/service/WmsLayerService.js b/src/components/LayerController/service/WmsLayerService.js
index fe4ba3c..999783e 100644
--- a/src/components/LayerController/service/WmsLayerService.js
+++ b/src/components/LayerController/service/WmsLayerService.js
@@ -1,7 +1,7 @@
 import AjaxUtils from '../../../utils/AjaxUtils'
 import { PIPELINE_WMS } from '../../../conf/Constants'
 import Popup from '@views/popup/Popup'
-import List from '../../../utils/List'
+import WmsLayerList from '../dataset/WmsLayerList'
 
 /**
  * todo 寰楄�冭檻涓�涓浘灞傞厤缃簡澶氫釜 wmsLayers鐨勬儏鍐�
@@ -28,57 +28,59 @@
     // 瀛樻斁getfeatureinfo鐨勫浘灞傜粍
     this.featureGroup = this.L.featureGroup({}).addTo(this.map)
 
-    this.layers = new List()
-    this.filters = new List()
+    this.wmsLayerList = new WmsLayerList()
     for (var i = 0; i < layersConfig.length; i++) {
       const config = layersConfig[i]
-      const typeName = config.typeName
-      if (typeName) {
-        this.layers.add(config.index, typeName)
-        if (config.filter) {
-          this.filters.addEnd(config.filter)
-        }
-      }
+      this.wmsLayerList.addConfig(config)
     }
+    this.load()
   }
 
   init () {
-    if (this.layers) {
-      this.load(this.layers)
-      this.clickListener()
-    }
+    this.clickListener()
   }
 
   add (config) {
-    const typeName = config.typeName
-    if (typeName) {
-      if (!this.layers.contains(typeName)) {
-        this.layers.add(config.index, typeName)
-        if (config.filter) {
-          this.filters.addEnd(config.filter)
-        }
-        this.wmsLayer.setParams({ cql_filter: this.filters.join(' and ') })
-      }
+    this.wmsLayerList.addConfig(config)
+    const layers = this.wmsLayerList.getLayers()
+    const filter = this.wmsLayerList.getFilters()
+    const params = {}
+    if (filter) {
+      params.cql_filter = filter
     }
+    if (layers) {
+      params.layers = layers
+    }
+    this.wmsLayer.setParams(params)
   }
 
   remove (config) {
     console.log(config)
-    const typeName = config.typeName
-    this.layers.remove(typeName)
-    if (config.filter) {
-      this.filters.remove(config.filter)
+    this.wmsLayerList.remove(config.typeName, config.filter)
+    const layers = this.wmsLayerList.getLayers()
+    const filter = this.wmsLayerList.getFilters()
+    const params = { layers: layers }
+    if (filter) {
+      params.cql_filter = filter
     }
-    this.wmsLayer.setParams({ cql_filter: this.filters.join(' and ') })
+    this.wmsLayer.setParams(params)
   }
 
-  load (layers) {
-    this.wmsLayer = this.L.tileLayer.wms(PIPELINE_WMS, {
+  load () {
+    const layers = this.wmsLayerList.getLayers()
+    const filter = this.wmsLayerList.getFilters()
+    const params = {
       format: 'image/png', // 杩斿洖鐨勬暟鎹牸寮�
       transparent: true,
-      layers: 'sewer:pipesegment', // this.layers.join(','),
-      cql_filter: this.filters.join(' and ')
-    }).addTo(this.map)
+      BBOX: this.map.getBounds().toBBoxString()
+    }
+    if (layers) {
+      params.layers = layers
+    }
+    if (filter.length > 0) {
+      params.cql_filter = filter
+    }
+    this.wmsLayer = this.L.tileLayer.wms(PIPELINE_WMS, params).addTo(this.map)
   }
 
   clickListener () {
@@ -88,11 +90,11 @@
       var point = this.map.latLngToContainerPoint(e.latlng, this.map.getZoom())
       var size = this.map.getSize()
       // const bbox = this.L.latLngBounds(this.L.latLng(e.latlng.lng, e.latlng.lat)).toBBoxString()
-
-      if (this.layers.length() > 0) {
+      const layers = this.wmsLayerList.getLayers()
+      if (layers.length > 0) {
         const params = Object.assign({
-          LAYERS: this.layers.join(','),
-          QUERY_LAYERS: this.layers.join(','),
+          LAYERS: layers,
+          QUERY_LAYERS: layers,
           WIDTH: size.x,
           HEIGHT: size.y,
           X: Math.round(point.x),
diff --git a/src/conf/layers/LayerFsss.js b/src/conf/layers/LayerFsss.js
index 6cc183a..b0e4350 100644
--- a/src/conf/layers/LayerFsss.js
+++ b/src/conf/layers/LayerFsss.js
@@ -1,8 +1,8 @@
 /**
  * 鍖哄煙
  */
-import { PIPELINE_WFS, SERVICE_TYPE } from '../Constants'
-const WFS_URL = PIPELINE_WFS
+import { SERVICE_TYPE } from '../Constants'
+
 export const LayerFsss = {
   code: 'sewersFsss',
   name: '闄勫睘璁炬柦',
@@ -46,7 +46,7 @@
       sname: 'PipeRack',
       minZoom: 16,
       type: SERVICE_TYPE.WMS,
-      typeName: WFS_URL + '?TYPENAME=绠℃灦',
+      typeName: 'sewer:piperack',
       checked: false
     },
     {
@@ -55,7 +55,7 @@
       sname: 'PipeGallery',
       minZoom: 16,
       type: SERVICE_TYPE.WMS,
-      typeName: '?TYPENAME=绠″粖',
+      typeName: 'sewer:pipegallery',
       checked: false
     },
     {
diff --git a/src/conf/layers/LayerHbss.js b/src/conf/layers/LayerHbss.js
index dafb46d..f93be09 100644
--- a/src/conf/layers/LayerHbss.js
+++ b/src/conf/layers/LayerHbss.js
@@ -1,8 +1,7 @@
 /**
  * 鍖哄煙
  */
-import { PIPELINE_WFS, SERVICE_TYPE } from '../Constants'
-const WFS_URL = PIPELINE_WFS
+import { SERVICE_TYPE } from '../Constants'
 export const LayerHbss = {
   code: 'sewersHbss',
   name: '鐜繚璁炬柦',
@@ -35,7 +34,7 @@
       sname: '闃茬伀鍫�',
       minZoom: 16,
       type: SERVICE_TYPE.WMS,
-      wfs: WFS_URL + '?TYPENAME=闃茬伀鍫�',
+      typeName: 'sewer:firedike',
       checked: false
     },
     {
@@ -43,7 +42,7 @@
       name: '闆嗘按姹�',
       sname: '闆嗘按姹�',
       minZoom: 16,
-      wfs: WFS_URL + '?TYPENAME=闆嗘按姹�',
+      typeName: 'sewer:collectingbasin',
       checked: false,
       type: SERVICE_TYPE.WMS,
       icon: 'sewers/闆嗘按姹�.png'
@@ -53,7 +52,7 @@
       name: '鎴祦闂�',
       sname: '鎴祦闂�',
       type: SERVICE_TYPE.WMS,
-      wfs: WFS_URL + '?TYPENAME=鎴祦闂�',
+      typeName: 'sewer:collectingbasin',
       checked: false
     },
     {
@@ -62,7 +61,7 @@
       sname: '婧㈡祦鍫�',
       minZoom: 16,
       type: SERVICE_TYPE.WMS,
-      wfs: WFS_URL + '?TYPENAME=婧㈡祦鍫�',
+      typeName: 'ewer:overflowweir',
       checked: false
     },
     {
@@ -72,7 +71,7 @@
       minZoom: 16,
       checked: false,
       type: SERVICE_TYPE.WMS,
-      wfs: WFS_URL + '?TYPENAME=闅旀补姹�',
+      typeName: 'ewer:oilseparator',
       icon: 'sewers/闅旀补姹�.png'
     }
   ]
diff --git a/src/conf/layers/LayerPipeLines.js b/src/conf/layers/LayerPipeLines.js
index d3de90e..cf545c9 100644
--- a/src/conf/layers/LayerPipeLines.js
+++ b/src/conf/layers/LayerPipeLines.js
@@ -19,7 +19,8 @@
       sname: '绠$綉',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       icon: 'sewers/闆ㄦ按绾�.png',
       color: '#0070ff',
       minZoom: 13,
@@ -36,7 +37,8 @@
       sname: '浜嬫晠姘�',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       minZoom: 13,
       filter: 'mediumtype = \'浜嬫晠姘碶'',
       index: 1
@@ -47,7 +49,8 @@
       sname: '鍚补姹℃按',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       minZoom: 13,
       color: '#ffaa00',
       filter: 'mediumtype = \'鍚补姹℃按\'',
@@ -63,7 +66,8 @@
       sname: '鍚洂姹℃按',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       minZoom: 13,
       filter: 'mediumtype = \'鍚洂姹℃按\'',
       index: 1
@@ -74,7 +78,8 @@
       sname: '鍚⒈姹℃按',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       filter: 'mediumtype = \'鍚⒈姹℃按\'',
       minZoom: 10,
       index: 1
@@ -85,7 +90,8 @@
       sname: '鍚~姹℃按',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       filter: 'mediumtype = \'鍚~姹℃按\'',
       minZoom: 10,
       index: 1
@@ -96,7 +102,8 @@
       sname: '鐢熸椿姹℃按',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       filter: 'mediumtype = \'鐢熸椿姹℃按\'',
       minZoom: 13,
       index: 1
@@ -107,7 +114,8 @@
       sname: '鍑�鍖栨按',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       filter: 'mediumtype = \'鍑�鍖栨按\'',
       minZoom: 13,
       index: 1
@@ -117,7 +125,8 @@
       name: '寰幆姘�',
       sname: '寰幆姘�',
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       filter: 'mediumtype = \'寰幆姘碶'',
       checked: false,
       minZoom: 13,
@@ -129,7 +138,8 @@
       sname: '鐢熶骇姹℃按',
       checked: false,
       type: SERVICE_TYPE.WMS,
-      typeName: 'sewer:pipeline,sewer:pipenetwork,sewer:pipesegment',
+      layerGroup: 'sewer:pipeline_group',
+      typeName: 'sewer:pipeline',
       filter: 'mediumtype = \'鐢熶骇姹℃按\'',
       minZoom: 13,
       color: '#a8a800',

--
Gitblit v1.8.0