From 3d7cb6aa38722ecf35f29ed880fdcc7efecbf323 Mon Sep 17 00:00:00 2001 From: 徐旺旺 <11530253@qq.com> Date: 星期三, 14 四月 2021 09:34:26 +0800 Subject: [PATCH] 点击定位 --- src/components/LayerController/service/LayerFactory.js | 174 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 125 insertions(+), 49 deletions(-) diff --git a/src/components/LayerController/service/LayerFactory.js b/src/components/LayerController/service/LayerFactory.js index e7a585c..593b5fd 100644 --- a/src/components/LayerController/service/LayerFactory.js +++ b/src/components/LayerController/service/LayerFactory.js @@ -1,4 +1,3 @@ -import store from '@/store' import WfsLayerService from './WfsLayerService' import BusiLayerService from './BusiLayerService' import WmsLayerService from './WmsLayerService' @@ -10,52 +9,102 @@ this.layers = {} } - init () { + init (layerConfig) { // 1. 閬嶅巻layer config - var layerConfig = store.state.map.serviceLayers.LayerSewersLine - for (var i = 0, l = layerConfig.length; i < l; i++) { - var config = layerConfig[i] - var layers = config.layers - for (var j = 0; j < layers.length; j++) { - var childConfig = layers[j] - var code = childConfig.code - var wfs = childConfig.wfs - var wms = childConfig.wms - var url = childConfig.url - // 鍒ゆ柇鏄惁宸茬粡鍔犺浇杩囷紝鍔犺浇杩囧氨 鐩存帴寰楀埌瀵硅薄璋冪敤 鏄剧ず鍑芥暟 - var layer = this.layers[code] - if (!layer) { - layer = this.L.featureGroup({}).addTo(this.map) - // 2. 鍒ゆ柇绫诲瀷 - if (wfs) { - // 3. 瀹炰緥鍖栧叿浣搒ervice - var wfsLayerService = new WfsLayerService(childConfig) - wfsLayerService.init(layer) - } - if (wms) { - var wmsLayerService = new WmsLayerService(childConfig) - wmsLayerService.init(layer) - } - // 璇锋眰涓氬姟鏁版嵁鎺ュ彛 - if (url) { - var busiLayerService = new BusiLayerService(childConfig) - busiLayerService.init(layer) - } - layer ? (this.layers[code] = layer) : console.log('LayerFactory锛歯ewLayer is null锛宲lease check !!!') - } else { - this.show(code) - } + if (layerConfig) { + for (var i = 0; i < layerConfig.length; i++) { + var config = layerConfig[i] + var layers = config.layers + var childLayer = config.childLayer + layers && this.init(config.layers) + childLayer && this.init(config.childLayer) + + var checked = config.checked + checked && this.load(config) + checked && this.toggleZoomByConfnig(config) } } } - show (code) { - var _layer = this.layers[code].addTo(this.map) - this.setZIndex(_layer) + /** + * 鎺у埗鏄剧ず鐨勭骇鍒� + * @param layerConfig + */ + initEvent (layerConfig) { + this.map.on('zoomend ', (e) => this.toggleZoomByLayer(layerConfig)) } - hide (code) { + toggleZoomByLayer (layerConfig) { + var config = layerConfig + if (Array.isArray(layerConfig)) { + for (var i = 0, l = layerConfig.length; i < l; i++) { + config = layerConfig[i] + var layers = config.layers + var childLayer = config.childLayer + layers && this.toggleZoomByLayer(layers) + childLayer && this.toggleZoomByLayer(childLayer) + this.toggleZoomByConfnig(config) + } + } else { + this.toggleZoomByConfnig(layerConfig) + } + } + + toggleZoomByConfnig (config) { + const zoom = this.map.getZoom() + var checked = config.checked + if (checked && config.minZoom) { + if (zoom > config.minZoom) { + this.show(config) + } else { + this.hide(config) + } + } + } + + load (config) { + var code = config.code + var wfs = config.wfs + var wms = config.wms + var url = config.url + // 鍒ゆ柇鏄惁宸茬粡鍔犺浇杩囷紝鍔犺浇杩囧氨 鐩存帴寰楀埌瀵硅薄璋冪敤 鏄剧ず鍑芥暟 var layer = this.layers[code] + if (!layer) { + layer = this.L.featureGroup({}).addTo(this.map) + // 2. 鍒ゆ柇绫诲瀷 + if (wfs) { + // 3. 瀹炰緥鍖栧叿浣搒ervice + var wfsLayerService = new WfsLayerService(config) + wfsLayerService.init(layer) + this.setZIndex(layer) + } + if (wms) { + var wmsLayerService = new WmsLayerService(config) + wmsLayerService.init(layer) + } + // 璇锋眰涓氬姟鏁版嵁鎺ュ彛 + if (url) { + var busiLayerService = new BusiLayerService(config) + busiLayerService.init(layer) + } + layer ? (this.layers[code] = layer) : console.log('LayerFactory锛歯ewLayer is null锛宲lease check !!!') + } else { + this.show(code) + } + } + + 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) } @@ -63,18 +112,45 @@ } + flyByLayerId (layerId, bound) { + for (var k in this.layers) { + var layerGroup = this.layers[k] + var layers = layerGroup.getLayers() + if (layers) { + for (var m = 0; m < layers.length; m++) { + var layer = layers[m] + console.log(layer.toGeoJSON()) + /* var feature = layer.feature + if (feature.id === layerId) { + this.map.flyToBounds(bound) + return layer + } */ + } + } + } + return null + } + /** - * 璁剧疆index,绾垮湪鏈�涓嬮潰锛岀偣鍦ㄤ笂闈� - * @param layerGroup 鍥惧眰缁� - */ - setZIndex (layerGroup) { - var layers = layerGroup.getLayers() - if (layers.length > 0) { - var layer = layers[0] - if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) { - layerGroup.bringToBack() + * 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 { - layerGroup.bringToFront() + if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) { + layer.bringToBack && layer.bringToBack() + } else { + layer.bringToFront && layer.bringToFront() + } } } } -- Gitblit v1.8.0