From 7d02699a0b2d425f3f9f3dd6af872bbc1d352710 Mon Sep 17 00:00:00 2001 From: 徐旺旺 <11530253@qq.com> Date: 星期二, 20 四月 2021 11:46:36 +0800 Subject: [PATCH] 图层控制BUG修改 --- /dev/null | 25 ------ src/components/BaseNav/pipeline/AffiliatedFacilities.vue | 2 src/components/LayerController/logic/PipeLineAnimal.js | 13 +++ src/components/LayerController/service/WfsLayerService.js | 3 src/components/LayerController/logic/Company.js | 8 +- src/components/LayerController/service/LayerFactory.js | 146 ++++++++++++++--------------------- src/utils/utils.js | 23 +++++ 7 files changed, 102 insertions(+), 118 deletions(-) diff --git a/src/components/BaseNav/pipeline/AffiliatedFacilities.vue b/src/components/BaseNav/pipeline/AffiliatedFacilities.vue index 71806b6..050491f 100644 --- a/src/components/BaseNav/pipeline/AffiliatedFacilities.vue +++ b/src/components/BaseNav/pipeline/AffiliatedFacilities.vue @@ -3,7 +3,7 @@ <div class="affiliatedFacilities"> <el-dialog custom-class="affiliatedFacilities-dialog" - :title="facilitiesParameter.properties.pipename" + :title="facilitiesParameter && facilitiesParameter.properties.pipename" :visible.sync="dialogVisible" :append-to-body="true" :modal="false" diff --git a/src/components/LayerController/logic/Company.js b/src/components/LayerController/logic/Company.js index 6c68380..f88c2e9 100644 --- a/src/components/LayerController/logic/Company.js +++ b/src/components/LayerController/logic/Company.js @@ -9,9 +9,9 @@ module.exports = function () { /** - * 杩斿洖marker瀵硅薄鏁扮粍 - * @param L leaflet瀵硅薄 - */ + * 杩斿洖marker瀵硅薄鏁扮粍 + * @param L leaflet瀵硅薄 + */ this.init = async (layer, L) => { // const SolidWasteIcon = this.SolidWasteIcon() this.animalService = new AnimalService({ @@ -19,7 +19,7 @@ layer: layer }) const res = await mapApi.getCompany() - // console.log(res) + console.log(res) const data = res.Result.DataInfo || {} for (let i = 0; i < data.length; i++) { // console.log(data[i]) diff --git a/src/components/LayerController/logic/PipeLineAnimal.js b/src/components/LayerController/logic/PipeLineAnimal.js index e9cabbe..8726b4a 100644 --- a/src/components/LayerController/logic/PipeLineAnimal.js +++ b/src/components/LayerController/logic/PipeLineAnimal.js @@ -7,6 +7,9 @@ module.exports = function () { this.init = () => { + } + + this.create = () => { const layers = LayerPipeLines.layers for (var i = 0; i < layers.length; i++) { const config = layers[i] @@ -42,12 +45,22 @@ for (var i = 0; i < layers.length; i++) { const config = layers[i] const code = config.code + const styles = config.styles // window.layerFactory.show(config) const layer = window.layerFactory.layers[code] if (layer) { if (layer.eachLayer) { layer.eachLayer(function (layer) { layer.resetStyle() + var newStyles = Object.assign(STYLES, styles) + layer.setStyle({ + fill: newStyles.FILL, + weight: newStyles.WEIGHT, + fillColor: newStyles.FILL_COLOR, + color: newStyles.COLOR, + fillOpacity: newStyles.FILL_OPACITY, + opacity: newStyles.OPACITY + }) }) } } diff --git a/src/components/LayerController/service/EventLayerService.js b/src/components/LayerController/service/EventLayerService.js deleted file mode 100644 index a8916df..0000000 --- a/src/components/LayerController/service/EventLayerService.js +++ /dev/null @@ -1,25 +0,0 @@ -import { logicMapper } from '../../../conf/Constants' - -class EventLayerService { - constructor (config) { - this.L = window.L - this.map = window.map - this.config = config - } - - init () { - // 寮曞叆 鍏宠仈鐨刯s锛屽湪constant.js涓牴鎹甤onfig閰嶇疆鐨刬d寰楀埌澶勭悊js - const id = this.config.code - const checked = this.config.checked - const file = logicMapper[id] - if (!file) { - console.log('鎵句笉鍒伴�昏緫澶勭悊js!!!' + id) - } else { - var BusiLayer = require('../logic/' + file) - var busiLayer = new BusiLayer() - checked ? busiLayer.init(this.config) : busiLayer.destory(this.config) - } - } -} - -export default EventLayerService diff --git a/src/components/LayerController/service/LayerFactory.js b/src/components/LayerController/service/LayerFactory.js index 9b05042..4b2814e 100644 --- a/src/components/LayerController/service/LayerFactory.js +++ b/src/components/LayerController/service/LayerFactory.js @@ -1,13 +1,13 @@ import WfsLayerService from './WfsLayerService' -import BusiLayerService from './BusiLayerService' import WmsLayerService from './WmsLayerService' -import EventLayerService from './EventLayerService' import { clone } from '../../../utils/utils' +import { logicMapper } from '../../../conf/Constants' class LayerFactory { constructor (options) { this.L = options.L this.map = window.map this.layers = {} + this.layersLogic = {} } init (layerConfig) { @@ -17,14 +17,66 @@ var config = layerConfig[i] var layers = config.layers var childLayer = config.childLayer + var checked = config.checked layers && this.init(config.layers) childLayer && this.init(config.childLayer) - var checked = config.checked - checked && this.load(config) - checked && this.toggleZoomByConfig(config) + this.loadLogic(config) + this.toggleZoomByConfig(config) + checked && this.show(config) } } + } + + loadLogic (config) { + var code = config.code + var wfs = config.wfs + var wms = config.wms + + const file = logicMapper[code] + var logic = this.layersLogic[code] + if (!logic) { + if (file) { + var BusiLayer = require('../logic/' + file) + logic = new BusiLayer() + } else if (wfs) { + logic = new WfsLayerService(config) + } else if (wms) { + logic = new WmsLayerService(config) + } + } + this.layersLogic[code] = logic + return logic + } + + addLayer (config) { + var code = config.code + var logic = this.loadLogic(config) + var layer = (logic && logic.initLayer && logic.initLayer((this.L))) || this.L.featureGroup({}) + layer.addTo(this.map) + this.layers[code] = layer + return layer + } + + show (config) { + var layer = this.layers[config.code] + var logic = this.loadLogic(config) + if (layer) { + if (!this.map.hasLayer(layer)) { + layer.addTo(this.map) + } + } else { + logic && logic.init(this.addLayer(config), this.L) + } + logic && logic.create && logic.create() + } + + hide (config) { + const code = config.code + const layer = this.layers[code] + layer && this.map.removeLayer(layer) + const logic = this.loadLogic(config) + logic && logic.destory && logic.destory() } /** @@ -63,65 +115,9 @@ } } - load (config) { - var code = config.code - var wfs = config.wfs - var wms = config.wms - var url = config.url - var checked = config.checked - // 鍒ゆ柇鏄惁宸茬粡鍔犺浇杩囷紝鍔犺浇杩囧氨 鐩存帴寰楀埌瀵硅薄璋冪敤 鏄剧ず鍑芥暟 - var layer = this.layers[code] - // todo if鏄笉鏄お澶氫簡 - if (checked) { - if ((wfs || wms || url)) { - if (layer) { - this.show(code) - } else { - layer = this.L.featureGroup({}).addTo(this.map) - this.layers[code] = layer - } - } - // 2. 鍒ゆ柇绫诲瀷 - if (wfs) { - // 3. 瀹炰緥鍖栧叿浣搒ervice - var wfsLayerService = new WfsLayerService(config) - wfsLayerService.init(layer) - this.setZIndex(layer) - } else if (wms) { - var wmsLayerService = new WmsLayerService(config) - wmsLayerService.init(layer) - } else if (url) { - var busiLayerService = new BusiLayerService(config) - busiLayerService.init(layer) - } - } - var eventLayerService = new EventLayerService(config) - eventLayerService.init() - } - - show (config) { - var layer = this.layers[config.code] - if (layer) { - layer.addTo(this.map) - this.setZIndex(layer) - } else { - this.load(config) - } - } - - hide (config) { - var layer = this.layers[config.code] - layer && this.map.removeLayer(layer) - // this.load(config) - } - - toggle (code) { - - } - /** * - * 鏍规嵁浼犵殑 feature瀵硅薄瀹氫綅 + * 鏍规嵁浼犵殑 feature瀵硅薄瀹氫綅锛� * @param code * @param feature */ @@ -134,7 +130,7 @@ break case 'MultiLineString': var coordinates = feature.geometry.coordinates - point = clone(coordinates[parseInt(coordinates.length / 2)][0]) + point = coordinates[parseInt(coordinates.length / 2)][0] break } window.map.flyTo(point.reverse(), 15) @@ -189,30 +185,6 @@ layer.eachLayer(function (layer) { console.log(layer) }) - } - } - - /** - * todo 杩欓噷鏃犳晥锛岃矊浼兼槸鍥犱负geojson鍔犺浇鍒板湴鍥句篃鏄釜layergroup - * - * 璁剧疆index,绾垮湪鏈�涓嬮潰锛岀偣鍦ㄤ笂闈� - * @param layerGroup 鍥惧眰缁� - */ - setZIndex (layer) { - if (Array.isArray(layer)) { - for (var i = 0; i < layer.length; i++) { - this.setZIndex(layer[i]) - } - } else { - if (layer.getLayers) { - this.setZIndex(layer.getLayers()) - } else { - if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) { - layer.bringToBack && layer.bringToBack() - } else { - layer.bringToFront && layer.bringToFront() - } - } } } } diff --git a/src/components/LayerController/service/WfsLayerService.js b/src/components/LayerController/service/WfsLayerService.js index e1bd4a5..cb0a4bf 100644 --- a/src/components/LayerController/service/WfsLayerService.js +++ b/src/components/LayerController/service/WfsLayerService.js @@ -3,6 +3,7 @@ */ import { STYLES } from '../../../conf/Constants' import AjaxUtils from '../../../utils/AjaxUtils' +import { setZIndex } from '../../../utils/utils' class WfsLayerService { constructor (config) { @@ -75,7 +76,7 @@ .on('mouseover', (e) => this.mouseOverListener(e, layer)).on('mouseout', (e) => this.mouseOutListener(e, layer)) } }).addTo(this.layer) - window.layerFactory.setZIndex(geojsonLayer) + setZIndex(geojsonLayer) } mouseOverListener (e, layer) { diff --git a/src/utils/utils.js b/src/utils/utils.js index 4fbfed4..ef770cb 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -56,4 +56,27 @@ return o } +/** + * + * 璁剧疆index,绾垮湪鏈�涓嬮潰锛岀偣鍦ㄤ笂闈� + * @param layerGroup 鍥惧眰缁� + */ +export function setZIndex (layer) { + if (Array.isArray(layer)) { + for (var i = 0; i < layer.length; i++) { + setZIndex(layer[i]) + } + } else { + if (layer.getLayers) { + setZIndex(layer.getLayers()) + } else { + if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) { + layer.bringToBack && layer.bringToBack() + } else { + layer.bringToFront && layer.bringToFront() + } + } + } +} + export default clone -- Gitblit v1.8.0