From c9c25dd594b58557d3b2f41acbad9de70d341c4f Mon Sep 17 00:00:00 2001 From: chenyabin <Chenab123!> Date: 星期四, 15 四月 2021 18:18:49 +0800 Subject: [PATCH] 右侧图片放大 --- src/components/LayerController/service/LayerFactory.js | 131 +++++++++++++++++++++++++++++++++++++------ 1 files changed, 113 insertions(+), 18 deletions(-) diff --git a/src/components/LayerController/service/LayerFactory.js b/src/components/LayerController/service/LayerFactory.js index b617ae5..d475fb6 100644 --- a/src/components/LayerController/service/LayerFactory.js +++ b/src/components/LayerController/service/LayerFactory.js @@ -1,6 +1,7 @@ import WfsLayerService from './WfsLayerService' import BusiLayerService from './BusiLayerService' import WmsLayerService from './WmsLayerService' +import EventLayerService from './EventLayerService' class LayerFactory { constructor (options) { @@ -12,7 +13,7 @@ init (layerConfig) { // 1. 閬嶅巻layer config if (layerConfig) { - for (var i = 0, l = layerConfig.length; i < l; i++) { + for (var i = 0; i < layerConfig.length; i++) { var config = layerConfig[i] var layers = config.layers var childLayer = config.childLayer @@ -21,6 +22,43 @@ var checked = config.checked checked && this.load(config) + checked && this.toggleZoomByConfig(config) + } + } + } + + /** + * 鎺у埗鏄剧ず鐨勭骇鍒� + * @param layerConfig + */ + initEvent (layerConfig) { + this.map.on('zoomend ', (e) => this.toggleZoomByLayer(layerConfig)) + } + + 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.toggleZoomByConfig(config) + } + } else { + this.toggleZoomByConfig(layerConfig) + } + } + + toggleZoomByConfig (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) } } } @@ -30,30 +68,35 @@ var wfs = config.wfs var wms = config.wms var url = config.url + var checked = config.checked // 鍒ゆ柇鏄惁宸茬粡鍔犺浇杩囷紝鍔犺浇杩囧氨 鐩存帴寰楀埌瀵硅薄璋冪敤 鏄剧ず鍑芥暟 var layer = this.layers[code] - if (!layer) { - layer = this.L.featureGroup({}).addTo(this.map) + // 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) - } - if (wms) { + } else if (wms) { var wmsLayerService = new WmsLayerService(config) wmsLayerService.init(layer) - } - // 璇锋眰涓氬姟鏁版嵁鎺ュ彛 - if (url) { + } else 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) } + var eventLayerService = new EventLayerService(config) + eventLayerService.init() } show (config) { @@ -69,18 +112,70 @@ hide (config) { var layer = this.layers[config.code] layer && this.map.removeLayer(layer) + this.load(config) } toggle (code) { } + flyByLayerId (code, id) { + const layer = this.layers[code] + + if (layer.eachLayer) { + layer.eachLayer(function (layer) { + const layers = layer.getLayers() + for (var i = 0; i < layers.length; i++) { + const lay = layers[i] + const feature = lay.feature + lay.closePopup() + if (feature.id === id) { + lay.openPopup() + break + } + } + }) + } + /* for (var k in this.layers) { + var layerGroup = this.layers[k] + layerGroup.eachLayer(function (layer) { + console.log(layer) + console.log(layer.getAttribution()) + }) + var layers = layerGroup.getLayers() + if (layers) { + for (var m = 0; m < layers.length; m++) { + var layer = layers[m] + console.log(layer) + console.log(layer.getLayerId(val.id)) + /!* var feature = layer.feature + if (feature.id === layerId) { + this.map.flyToBounds(bound) + return layer + } *!/ + } + } + } */ + return null + } + + findLayerById (layer, id) { + const layers = layer.getLayers + if (layers) { + this.findLayerById(layer.getLayers(), id) + } else { + layer.eachLayer(function (layer) { + console.log(layer) + }) + } + } + /** - * todo 杩欓噷鏃犳晥锛岃矊浼兼槸鍥犱负geojson鍔犺浇鍒板湴鍥句篃鏄釜layergroup - * - * 璁剧疆index,绾垮湪鏈�涓嬮潰锛岀偣鍦ㄤ笂闈� - * @param layerGroup 鍥惧眰缁� - */ + * todo 杩欓噷鏃犳晥锛岃矊浼兼槸鍥犱负geojson鍔犺浇鍒板湴鍥句篃鏄釜layergroup + * + * 璁剧疆index,绾垮湪鏈�涓嬮潰锛岀偣鍦ㄤ笂闈� + * @param layerGroup 鍥惧眰缁� + */ setZIndex (layer) { if (Array.isArray(layer)) { for (var i = 0; i < layer.length; i++) { @@ -91,9 +186,9 @@ this.setZIndex(layer.getLayers()) } else { if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) { - layer.bringToBack() + layer.bringToBack && layer.bringToBack() } else { - layer.bringToFront() + layer.bringToFront && layer.bringToFront() } } } -- Gitblit v1.8.0