From 2483e4562d0373ed571e7efd0d92890c7fdaec80 Mon Sep 17 00:00:00 2001
From: 徐旺旺 <11530253@qq.com>
Date: 星期四, 20 五月 2021 18:05:09 +0800
Subject: [PATCH] 修改图层控制逻辑
---
/dev/null | 117 -----------------------
src/components/LayerController/service/WmsLayerService.js | 44 ++++++--
src/components/LayerController/dataset/WmsLayerList.js | 18 ++-
src/components/LayerController/modules/LcServiceLayerFilter.vue | 30 ++++-
src/components/LayerController/service/LayerFactory.js | 19 +++
src/components/LayerController/modules/LcServiceLayer.vue | 35 +++++--
6 files changed, 112 insertions(+), 151 deletions(-)
diff --git a/src/components/LayerController/dataset/WmsLayerList.js b/src/components/LayerController/dataset/WmsLayerList.js
index fc0e782..3aaeb12 100644
--- a/src/components/LayerController/dataset/WmsLayerList.js
+++ b/src/components/LayerController/dataset/WmsLayerList.js
@@ -1,5 +1,8 @@
import clone from '../../../utils/utils'
+/**
+ * 缁勮wms鍔犺浇鎵�闇�鐨刲ayers浠ュ強filters鍙傛暟
+ */
class WmsLayerList {
constructor () {
// [{鍥惧眰鍚嶇О锛歔{typeName:xxx,filter:yyy}]}]
@@ -10,7 +13,7 @@
const typeName = config.typeName
const layerGroup = config.layerGroup || typeName
const filter = config.filter
- const index = config.index || 9
+ const index = config.index
if (layerGroup) {
this.addLayer(layerGroup, typeName, filter, index)
}
@@ -18,7 +21,6 @@
addLayer (layerGroup, typeName, filter, index) {
const layer = this._getLayer(layerGroup)
-
if (layer) {
const offset = this.indexOf(typeName, filter)
if (offset < 0) {
@@ -28,7 +30,11 @@
} else {
const layerConfig = {}
layerConfig[layerGroup] = [{ typeName: typeName, filter: filter || 'INCLUDE' }]
- this.layers.push(layerConfig)
+ if (index) {
+ this.layers[index] = layerConfig
+ } else {
+ this.layers.push(layerConfig)
+ }
}
}
@@ -36,7 +42,7 @@
const layers = this.layers
for (let i = 0; i < layers.length; i++) {
const lay = layers[i]
- if (lay[layer]) {
+ if (lay && lay[layer]) {
return lay
}
}
@@ -112,7 +118,9 @@
}
}
}
- cqlFilters.push(filters.join(' OR '))
+ if (filters.length > 0) {
+ cqlFilters.push(filters.join(' OR '))
+ }
}
return cqlFilters.join(';')
}
diff --git a/src/components/LayerController/modules/LcServiceLayer.vue b/src/components/LayerController/modules/LcServiceLayer.vue
index 4bd7e82..ef7dc4d 100644
--- a/src/components/LayerController/modules/LcServiceLayer.vue
+++ b/src/components/LayerController/modules/LcServiceLayer.vue
@@ -40,6 +40,11 @@
export default {
name: 'LcServiceLayer',
components: { LcServiceLayerFilter },
+ data () {
+ return {
+ changeList: []
+ }
+ },
computed: {
serviceLayers () {
return this.$store.state.map.serviceLayers.LayerSewersLine
@@ -51,8 +56,18 @@
swAllLayers (item) {
// eslint-disable-next-line no-debugger
item.checked = !item.checked
- this.toggleLayer(item)
- this.swLayers(item.layers, item.checked)
+ // this.toggleLayer(item)
+ if (item.layers && item.layers.length > 0) {
+ this.swLayers(item.layers, item.checked)
+ if (item.checked) {
+ window.layerFactory.showAll(this.changeList)
+ } else {
+ window.layerFactory.hideAll(this.changeList)
+ }
+ this.changeList = []
+ } else {
+ this.toggleLayer(item)
+ }
this.serviceLayers.forEach(function (item1, index1) {
if (item1.layers) {
item1.istrue = 0
@@ -99,14 +114,14 @@
})
// console.log(this.serviceLayers)
},
- swLayers (layers, checked) {
- if (layers) {
- for (let i = 0, len = layers.length; i < len; ++i) {
- var layer = layers[i]
- layer.checked = checked
- this.toggleLayer(layer)
- if (layer.layers) {
- this.swLayers(layer.layers, checked)
+ swLayers (configs, checked) {
+ if (configs) {
+ for (let i = 0, len = configs.length; i < len; ++i) {
+ var config = configs[i]
+ config.checked = checked
+ this.changeList.push(config)
+ if (config.layers) {
+ this.swLayers(config.layers, checked)
}
}
}
diff --git a/src/components/LayerController/modules/LcServiceLayerFilter.vue b/src/components/LayerController/modules/LcServiceLayerFilter.vue
index 7b06da4..22c701b 100644
--- a/src/components/LayerController/modules/LcServiceLayerFilter.vue
+++ b/src/components/LayerController/modules/LcServiceLayerFilter.vue
@@ -24,6 +24,7 @@
return {
visible: {},
layers: [],
+ changeList: [],
filterConfig: [] // 闄勫睘瑕佺礌
}
},
@@ -40,17 +41,28 @@
// eslint-disable-next-line no-debugger
item.checked = !item.checked
this.toggleLayer(item)
- this.swLayers(item.layers, item.checked)
+ if (item.layers && item.layers.length > 0) {
+ this.swLayers(item.layers, item.checked)
+ if (item.checked) {
+ window.layerFactory.showAll(this.changeList)
+ } else {
+ window.layerFactory.hideAll(this.changeList)
+ }
+ this.changeList = []
+ } else {
+ this.toggleLayer(item)
+ }
},
- swLayers (layers, checked) {
- if (layers) {
- for (let i = 0, len = layers.length; i < len; ++i) {
- var layer = layers[i]
- layer.checked = checked
- this.toggleLayer(layer)
- if (layer.layers) {
- this.swLayers(layer.layers, checked)
+ swLayers (configs, checked) {
+ if (configs) {
+ for (let i = 0, len = configs.length; i < len; ++i) {
+ const config = configs[i]
+ const layers = config.layers
+ this.changeList.push(config)
+ if (layers) {
+ this.swLayers(config, checked)
}
+ config.checked = checked
}
}
},
diff --git a/src/components/LayerController/service/LayerFactory.js b/src/components/LayerController/service/LayerFactory.js
index 68d8d64..c586a1c 100644
--- a/src/components/LayerController/service/LayerFactory.js
+++ b/src/components/LayerController/service/LayerFactory.js
@@ -106,6 +106,16 @@
return layer
}
+ showAll (configs) {
+ if (Array.isArray(configs)) {
+ for (let i = 0; i < configs.length; i++) {
+ const config = configs[i]
+ this.show(config)
+ }
+ this.wmsLayerService && this.wmsLayerService.addAll(configs)
+ }
+ }
+
/**
* 濡傛灉 瀛樺湪宸茬粡鍔犺浇浜嗙殑瀵硅薄锛屽氨鐩存帴鍔犲埌map
* 濡傛灉 涓嶅瓨鍦ㄥ垯 璋冪敤 addLayer 鍙� 閫昏緫绫荤殑init 杩涜鍒濆鍖栨搷浣�
@@ -128,6 +138,15 @@
this.wmsLayerService && this.wmsLayerService.add(config)
}
+ hideAll (configs) {
+ if (Array.isArray(configs)) {
+ for (let i = 0; i < configs.length; i++) {
+ this.hide(configs[i])
+ }
+ this.wmsLayerService && this.wmsLayerService.removeAll(configs)
+ }
+ }
+
hide (config) {
const code = config.code
const layer = this.layers[code]
diff --git a/src/components/LayerController/service/WmsLayerGroupService.js b/src/components/LayerController/service/WmsLayerGroupService.js
deleted file mode 100644
index 5e2599d..0000000
--- a/src/components/LayerController/service/WmsLayerGroupService.js
+++ /dev/null
@@ -1,117 +0,0 @@
-import AjaxUtils from '../../../utils/AjaxUtils'
-import { PIPELINE_WMS } from '../../../conf/Constants'
-
-/**
- * wms 鍥惧眰缁勭殑绠$悊
- */
-class WmsLayerGroupService {
- constructor (config) {
- this.config = config
- this.L = window.L
- // 瀛樻斁getfeatureinfo鐨勫浘灞傜粍
- this.featureGroup = this.L.featureGroup({})
- this.map = window.map
- this.popupComp = window.popupComp
- // {groupName:{url:'.../wms',layers:[]}}
- 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,
- maxZoom: 21,
- layers: k // todo
- }).addTo(this.layer).bringToFront()
- }z
- }
-
- init () {
- this.layer = this.L.featureGroup({}).addTo(this.map)
- this.initGroup(this.config)
- this.load()
- }
-
- hide (config) {
- const layerName = config.layerName
- for (var i = 0; i < this.groups.length; i++) {
- const group = this.groups[i]
- for (var k in group) {
- const v = group[k]
- const index = v.layers.indexOf(layerName)
- if (index >= 0) {
- delete v.layers[index]
- }
- }
- }
- }
-
- initGroup (config) {
- const groupName = this.config.groupName
- const layers = config.layers
- layers && this.initGroup(layers)
- for (var i = 0; i < config.length; i++) {
- const layerConfig = config[i]
- const layerName = layerConfig.layerName
- const group = this.groups[groupName]
- if (group) {
- group.layers.push(layerName)
- } else {
- this.groups[groupName] = {
- url: '',
- layers: [layerName]
- }
- }
- }
- }
-
- click (e) {
- this.featureGroup.clearLayers()
- 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()
- const params = {
- VERSION: '1.1.1',
- SERVICE: 'WMS',
- REQUEST: 'GetFeatureInfo',
- // bbox: bbox,
- FORMAT: 'image/png',
- INFO_FORMAT: 'application/json',
- TRANSPARENT: true,
- LAYERS: 'sewer:pipeline_group',
- QUERY_LAYERS: 'sewer:pipeline_group', // todo
- FEATURE_COUNT: 50,
- SRS: 'EPSG:4326',
- WIDTH: size.x,
- HEIGHT: size.y,
- EXCEPTIONS: 'application/vnd.ogc.se_inimage',
- X: Math.round(point.x),
- Y: Math.round(point.y),
- BBOX: this.map.getBounds().toBBoxString()
- }
-
- AjaxUtils.get4JsonDataByUrl(PIPELINE_WMS, params, (res) => {
- let features = res.data.features
- features = features[0]
- var myIcon = this.L.divIcon({ className: 'my-div-icon' })
- this.L.marker(features.geometry.coordinates.reverse(), {
- icon: myIcon
- }).addTo(this.featureGroup)
- .bindPopup((layer) => {
- this.popupComp.setDatas({ feature: features })
- this.popupComp.setShow()
- return this.popupComp.$el
- }, {
- className: 's-map-popup',
- minWidth: 300,
- closeButton: false,
- autoClose: false
- })
- .openPopup()
- })
- }
-}
-
-export default WmsLayerGroupService
diff --git a/src/components/LayerController/service/WmsLayerService.js b/src/components/LayerController/service/WmsLayerService.js
index b64e539..20f2af7 100644
--- a/src/components/LayerController/service/WmsLayerService.js
+++ b/src/components/LayerController/service/WmsLayerService.js
@@ -40,23 +40,47 @@
init () {
}
+ addAll (configs) {
+ for (let i = 0; i < configs.length; i++) {
+ const config = configs[i]
+ const layers = config.layers
+ if (layers) {
+ this.addAll(layers)
+ }
+ this.wmsLayerList.addConfig(config)
+ }
+ this.reload()
+ }
+
add (config) {
this.wmsLayerList.addConfig(config)
+ this.reload()
+ }
+
+ removeAll (configs) {
+ for (let i = 0; i < configs.length; i++) {
+ const config = configs[i]
+ const layers = config.layers
+ if (layers) {
+ this.removeAll(layers)
+ }
+ this.wmsLayerList.remove(config.typeName, config.filter)
+ }
+ this.reload()
+ }
+
+ remove (config) {
+ this.wmsLayerList.remove(config.typeName, config.filter)
+ this.reload()
+ }
+
+ reload () {
const layers = this.wmsLayerList.getLayers() || ''
const filter = this.wmsLayerList.getFilters() || ''
const params = {}
params.cql_filter = filter
params.layers = layers
- this.wmsLayer.setParams(params)
- }
-
- remove (config) {
- this.wmsLayerList.remove(config.typeName, config.filter)
- const layers = this.wmsLayerList.getLayers() || ''
- const filter = this.wmsLayerList.getFilters() || ''
- const params = { layers: layers }
- params.cql_filter = filter
- this.wmsLayer.setParams(params)
+ this.wmsLayer.setParams(params, false)
}
load () {
--
Gitblit v1.8.0