From 243c4782ce378d9238a60ae8cd41723657675d69 Mon Sep 17 00:00:00 2001 From: wangrui <zephyrs0894@163.com> Date: 星期四, 24 十二月 2020 15:43:49 +0800 Subject: [PATCH] 服务图层,动态生成 --- src/conf/MapConfig.js | 322 +++++++++++++++++++++++++++++++++++ src/views/MapTemplate.vue | 10 + src/components/helpers/ServiceLayerHelper.js | 59 +++++- src/components/LayerController/modules/LcServiceLayer.vue | 119 +++++++++++++ 4 files changed, 493 insertions(+), 17 deletions(-) diff --git a/src/components/LayerController/modules/LcServiceLayer.vue b/src/components/LayerController/modules/LcServiceLayer.vue new file mode 100644 index 0000000..d855b87 --- /dev/null +++ b/src/components/LayerController/modules/LcServiceLayer.vue @@ -0,0 +1,119 @@ +<template> + <div class="inner-panel"> + <div class="tile-panel"> + <div v-for="item in serviceTileLayerList" :key="item.code"><input type="checkbox" :value="item.name" @change="swTileLayer"/></div> + </div> + <div class="wmts-panel"> + <div v-for="item in serviceWmtsLayerList" :key="item.code"><input type="checkbox" :value="item.name" @change="swWmtsLayer"/></div> + </div> + <div class="wms-panel"> + <div v-for="item in serviceWmsLayerList" :key="item.code" class="layerbox"> + <div><input type="checkbox" name="wmsLayer" :value="item.code" @change="swAllLayers"/>{{item.name}}</div> + <div class="layerbox-item"> + <div class="basemap-layer-item" v-for="itm in item.layers" :key="itm.code"><input type="checkbox" name="wmsSublayers" :value="item.code" @change="swAllLayers"/>{{itm.sname}}</div> + </div> + </div> + </div> + </div> +</template> + +<script> +import { mapState, mapMutations } from "vuex"; +export default { + name: "LcServiceLayer", + components: {}, + data() { + return { + selectedLineLayer: [], // 閫変腑鐨勭绾垮浘灞� + selectedSubsidiaryLayer: [], // 閫変腑鐨勯檮灞炶绱� + serviceTileLayerList: [], // Tile鍥惧眰鍒楄〃 + serviceWmtsLayerList: [], // Wmts鍥惧眰鍒楄〃 + serviceWmsLayerList: [] // 鍥惧眰鍒楄〃 + }; + }, + computed: { + ...mapState({ + serviceLayerHelper: (state) => { + return state.serviceLayerHelper; + }, + }), + }, + mounted() { + // console.log('03姝ラ锛�', this.helper) + }, + methods: { + ...mapMutations([]), + swAllLayers(){ + + }, + swTileLayer(){ + console.log('璇ILE鏂规硶鏈疄鐜帮紒') + }, + swWmtsLayer(){ + console.log('璇MTS鏂规硶鏈疄鐜帮紒') + }, + swWmsLayer(){ + + }, + updateServiceLayerList(){ + // eslint-disable-next-line no-debugger + // debugger + let tileCfg = this.serviceLayerHelper.getTileLayers() + this.serviceTileLayerList = [] + for(let i = 0,len = tileCfg.length; i < len; ++i) { + if(tileCfg[i].config.inLegend){ + console.log(tileCfg[i]) + } + } + let wmtsCfg = this.serviceLayerHelper.getWmtsLayers() + this.serviceWmtsLayerList = [] + for(let i = 0,len = wmtsCfg.length; i < len; ++i) { + if(wmtsCfg[i].config.inLegend){ + console.log(wmtsCfg[i]) + } + } + let wmsCfg = this.serviceLayerHelper.getWmsLayers() + this.serviceWmsLayerList = [] + for(let i = 0,len = wmsCfg.length; i < len; ++i) { + if(wmsCfg[i].config.inLegend){ + this.serviceWmsLayerList.push(wmsCfg[i].config) + } + } + } + }, + watch: { + serviceLayerHelper(newVal) { + if (newVal != null) { + this.updateServiceLayerList(); + } + }, + }, +}; +</script> + +<style scoped lang="less"> +.inner-panel { + display: flex; + justify-content: center; + align-items: center; + + .wms-panel{ + display:flex; + flex-flow: column; + .layerbox{ + width: 100%; + display:flex; + flex-flow: column; + + .layerbox-item{ + display:flex; + flex-flow: row; + .basemap-layer-item{ + width: 50%; + } + } + } + } +} + +</style> diff --git a/src/components/helpers/ServiceLayerHelper.js b/src/components/helpers/ServiceLayerHelper.js index 9f9140e..b571d98 100644 --- a/src/components/helpers/ServiceLayerHelper.js +++ b/src/components/helpers/ServiceLayerHelper.js @@ -8,7 +8,9 @@ this.map = options.map this.L = options.L this.tileLayersMap = new Map() - this.tileLayersArray = [] + this.tileLayersWMSArray = [] + this.tileLayersWMTSArray = [] + this.tileLayersTileArray = [] this.mapConfig = {} } @@ -30,11 +32,11 @@ for(let i = 0, len = mapConfig.mapConfig.ServiceLayers.length; i < len; ++i) { let opt = mapConfig.mapConfig.ServiceLayers[i] if(opt.type === 'wmts') { - this.loadWmtsLayer(opt, isAddToMap) + this.loadWmtsLayer(opt, isAddToMap, mapConfig.mapConfig.ServiceLayers[i]) }else if(opt.type === 'wms') { - this.loadWmsLayer(opt, isAddToMap) + this.loadWmsLayer(opt, isAddToMap, mapConfig.mapConfig.ServiceLayers[i]) }else if(opt.type === 'tile') { - this.loadTileLayer(opt, isAddToMap) + this.loadTileLayer(opt, isAddToMap, mapConfig.mapConfig.ServiceLayers[i]) } } } @@ -44,28 +46,30 @@ * @param {}} options * @param {*} isAddToMap */ - loadWmtsLayer(options, isAddToMap = true) { + loadWmtsLayer(options, isAddToMap = true, config) { const layer = this.L.tileLayer(options.url, options.option); - + layer.config = config + if(isAddToMap) { layer.addTo(this.map) } this.tileLayersMap.set(options.code, layer) - this.tileLayersArray.push(layer) + this.tileLayersWMTSArray.push(layer) } /** * 寰�鍦板浘涓姞鍏ヤ竴涓猈MS鏈嶅姟 * @param {}} options * @param {*} isAddToMap */ - loadWmsLayer(options, isAddToMap = true) { + loadWmsLayer(options, isAddToMap = true, config) { const layer =this.L.tileLayer.wms(options.url, options.option); - + layer.config = config + if(isAddToMap) { layer.addTo(this.map) } this.tileLayersMap.set(options.code, layer) - this.tileLayersArray.push(layer) + this.tileLayersWMSArray.push(layer) } /** @@ -73,7 +77,7 @@ * @param {}} options * @param {*} isAddToMap */ - loadTileLayer(options, isAddToMap = true) { + loadTileLayer(options, isAddToMap = true, config) { const layer =this.L.tileLayer(options.url, { layers: options.layers || 'all',//country format: options.format || "image/png", @@ -83,12 +87,13 @@ minZoom: options.minZoom || 1, zoomOffset: options.zoomOffset || 0 }); + layer.config = config if(isAddToMap) { layer.addTo(this.map) } this.tileLayersMap.set(options.code , layer) - this.tileLayersArray.push(layer) + this.tileLayersTileArray.push(layer) } /** * 闅愯棌鏈嶅姟鍥惧眰 @@ -112,10 +117,36 @@ } /** - * 鑾峰彇鎵�鏈夌殑鏈嶅姟鍥惧眰 + * 鑾峰彇鎵�鏈夌殑TILE鏈嶅姟鍥惧眰 */ getTileLayers(){ - return this.tilelayersArray + return this.tileLayersTileArray + } + /** + * 鑾峰彇鎵�鏈夌殑WMTS鏈嶅姟鍥惧眰 + */ + getWmtsLayers(){ + return this.tileLayersWMTSArray + } + /** + * 鑾峰彇鎵�鏈夌殑WMS鏈嶅姟鍥惧眰 + */ + getWmsLayers(){ + return this.tileLayersWMSArray + } + + /** + * 閫氳繃code鏌ユ壘WMS鐨勬湇鍔¢厤缃� + * @param {} code wms鏈嶅姟閰嶇疆鐨刢ode + */ + getWMSConfig(code){ + let mc = this.mapConfig + for(let i = 0, len = mc.mapConfig.ServiceLayers.length; i < len; ++i) { + if(code == mc.mapConfig.ServiceLayers[i].code && mc.mapConfig.ServiceLayers[i].type === 'wms'){ + return mc.mapConfig.ServiceLayers[i] + } + } + return null } } export default ServiceLayerHelper diff --git a/src/conf/MapConfig.js b/src/conf/MapConfig.js index 17c3b02..1eeab68 100644 --- a/src/conf/MapConfig.js +++ b/src/conf/MapConfig.js @@ -17,6 +17,12 @@ // 鑷畾涔変富鏈洪厤缃� const BLUEMAP_HOST = APP_GIS_HOST // 鍏徃鍙戝竷鐨勫湴鍥炬湇鍔★紝鐢ㄤ簬娴嬭瘯鐨勫湴鍧� +// 鍑犱綍绫诲瀷甯搁噺 +const GEOM_POINT = 'POINT' +const GEOM_POLYLINE = 'POLYLINE' +const GEOM_POLYGON = 'POLYGON' +console.log(GEOM_POINT, GEOM_POLYLINE, GEOM_POLYGON) + const mapOptions = { crs: L.CRS.EPSG4326, minZoom: 3, @@ -200,17 +206,19 @@ icon_deactived: '', type:'wmts', url: APP_GIS_HOST + '/server/ogcserver/whp_guojie/wmts?x={x}&y={y}&z={z}', + inLegend: false, option:{ zoomOffset: 1 } }, { code:'pipeline', - name:'绠$綉', + name:'绠$綉鏁版嵁', icon_actived: '', icon_deactived: '', type:'wms', url: APP_GIS_HOST_PIPELINE + '/server/ogcserver/PipeLine/wms?version=1.1.1', + inLegend: true, option:{ layers:'all', styles:'', // Comma-separated list of WMS styles. @@ -219,7 +227,317 @@ version:'1.1.1', // Version of the WMS service to use crs:L.CRS.EPSG4326, // Coordinate Reference System to use for the WMS requests, defaults to map CRS. Don't change this if you're not sure what it means. uppercase:false - } + }, + layers:[ + { + code:'rainline', + name:'闆ㄦ按绾�', + sname:'闆ㄦ按', + filter:{} + }, + { + code:'rainline', + name:'鍚补姹℃按绾�', + sname:'鍚补姹℃按', + filter:{} + }, + { + code:'rainline', + name:'鍚洂姹℃按绾�', + sname:'鍚洂姹℃按', + filter:{} + }, + { + code:'rainline', + name:'鍚⒈姹℃按绾�', + sname:'鍚⒈姹℃按', + filter:{} + }, + { + code:'rainline', + name:'鎺掑彛', + sname:'鎺掑彛', + filter:{} + }, + { + code:'rainline', + name:'浜嬫晠姘寸嚎', + sname:'浜嬫晠姘�', + filter:{} + }, + { + code:'rainline', + name:'寰幆姘寸嚎', + sname:'寰幆姘�', + filter:{} + }, + { + code:'rainline', + name:'鍑�鍖栨按绾�', + sname:'鍑�鍖栨按', + filter:{} + }, + { + code:'rainline', + name:'鐢熸椿姹℃按', + sname:'鐢熸椿姹℃按', + filter:{} + }, + { + code:'rainline', + name:'鍖哄煙淇℃伅', + sname:'鍖哄煙淇℃伅', + filter:{} + }, + ], + filtersGroup:[ + { + code:'fsss', + name:'闄勫睘璁炬柦', + filters:[ + { + code:'鍥涢��', + name:'鍥涢��', + sname:'', + geom: GEOM_POINT + }, + { + code:'涓夐��', + name:'涓夐��', + sname:'', + geom: GEOM_POINT + }, + { + code:'绠℃灦(澧�)', + name:'绠℃灦(澧�)', + sname:'', + geom: GEOM_POINT + }, + { + code:'绠″粖(甯�)', + name:'绠″粖(甯�)', + sname:'', + geom: GEOM_POINT + }, + { + code:'娴佸悜', + name:'娴佸悜', + sname:'', + geom: GEOM_POINT + }, + { + code:'绠$綉', + name:'绠$綉', + sname:'', + geom: GEOM_POINT + }, + { + code:'闃�闂�', + name:'闃�闂�', + sname:'', + geom: GEOM_POINT + }, + { + code:'寮ご', + name:'寮ご', + sname:'', + geom: GEOM_POINT + }, + ] + }, + { + code:'hbss', + name:'鐜繚璁炬柦', + filters:[ + { + code:'绐ㄤ簳', + name:'绐ㄤ簳', + sname:'', + geom: GEOM_POINT + }, + { + code:'闃茬伀鍫�', + name:'闃茬伀鍫�', + sname:'', + geom: GEOM_POINT + }, + { + code:'闆ㄧ瀛�', + name:'闆ㄧ瀛�', + sname:'', + geom: GEOM_POINT + }, + { + code:'婧㈡祦鍫�', + name:'婧㈡祦鍫�', + sname:'', + geom: GEOM_POINT + }, + { + code:'鎴祦闂�', + name:'鎴祦闂�', + sname:'', + geom: GEOM_POINT + }, + { + code:'闆嗘按姹�(缃�)', + name:'闆嗘按姹�(缃�)', + sname:'', + geom: GEOM_POINT + }, + { + code:'闅旀补姹�', + name:'闅旀补姹�', + sname:'', + geom: GEOM_POINT + }, + ] + }, + { + code:'pk', + name:'鎺掑彛', + filters:[ + { + code:'鎺掓斁鍙�', + name:'鎺掓斁鍙�', + sname:'', + geom: GEOM_POINT + } + ] + }, + { + code:'qyxx', + name:'鍖哄煙淇℃伅', + filters:[ + { + code:'绗笁鏂圭閬�', + name:'绗笁鏂圭閬�', + sname:'', + geom: GEOM_POINT + }, + { + code:'娑堥槻鍗曚綅', + name:'娑堥槻鍗曚綅', + sname:'', + geom: GEOM_POINT + }, + { + code:'搴旀�ョ墿璧�', + name:'搴旀�ョ墿璧�', + sname:'', + geom: GEOM_POINT + }, + { + code:'绀句細涓撲笟搴旀�ユ晳鎻撮槦浼�', + name:'绀句細涓撲笟搴旀�ユ晳鎻撮槦浼�', + sname:'', + geom: GEOM_POINT + }, + { + code:'缁存姠淇槦浼�', + name:'缁存姠淇槦浼�', + sname:'', + geom: GEOM_POINT + }, + { + code:'鍖婚櫌', + name:'鍖婚櫌', + sname:'', + geom: GEOM_POINT + }, + { + code:'鑷劧淇濇姢鍖�', + name:'鑷劧淇濇姢鍖�', + sname:'', + geom: GEOM_POINT + }, + { + code:'姘翠綋', + name:'姘翠綋', + sname:'', + geom: GEOM_POINT + }, + { + code:'鏁忔劅鐩爣', + name:'鏁忔劅鐩爣', + sname:'', + geom: GEOM_POINT + }, + { + code:'鐜鐩戞祴鍗曚綅', + name:'鐜鐩戞祴鍗曚綅', + sname:'', + geom: GEOM_POINT + }, + { + code:'鐩戞祴鐐规薄鏌撶墿鎸囨爣淇℃伅', + name:'鐩戞祴鐐规薄鏌撶墿鎸囨爣淇℃伅', + sname:'', + geom: GEOM_POINT + }, + { + code:'鎺掓斁鍙e懆杈圭幆澧冩晱鎰熶俊鎭�', + name:'鎺掓斁鍙e懆杈圭幆澧冩晱鎰熶俊鎭�', + sname:'', + geom: GEOM_POINT + }, + { + code:'娉�', + name:'娉�', + sname:'', + geom: GEOM_POINT + }, + { + code:'娑蹭綅璁�', + name:'娑蹭綅璁�', + sname:'', + geom: GEOM_POINT + }, + { + code:'娴侀噺璁�', + name:'娴侀噺璁�', + sname:'', + geom: GEOM_POINT + }, + { + code:'瑙嗛鐩戞帶閰嶇疆', + name:'瑙嗛鐩戞帶閰嶇疆', + sname:'', + geom: GEOM_POINT + }, + { + code:'鍦ㄧ嚎鐩戞祴璁惧閰嶇疆', + name:'鍦ㄧ嚎鐩戞祴璁惧閰嶇疆', + sname:'', + geom: GEOM_POINT + }, + { + code:'鍙噧姘斾綋鎶ヨ璁惧閰嶇疆', + name:'鍙噧姘斾綋鎶ヨ璁惧閰嶇疆', + sname:'', + geom: GEOM_POINT + }, + { + code:'H2S娴撳害鎶ヨ璁惧閰嶇疆', + name:'H2S娴撳害鎶ヨ璁惧閰嶇疆', + sname:'', + geom: GEOM_POINT + }, + { + code:'绠$嚎鐐�', + name:'绠$嚎鐐�', + sname:'', + geom: GEOM_POINT + }, + { + code:'绠℃', + name:'绠℃', + sname:'', + geom: GEOM_POINT + } + ] + } + ] } ] } diff --git a/src/views/MapTemplate.vue b/src/views/MapTemplate.vue index 0d5cabd..2c19186 100644 --- a/src/views/MapTemplate.vue +++ b/src/views/MapTemplate.vue @@ -3,6 +3,8 @@ <div id="map" ref="rootmap"></div> <sgis-layer-controller :preset="'warningPreset'"> <lc-basemap></lc-basemap> + <div class="barline"></div> + <lc-service-layer></lc-service-layer> </sgis-layer-controller> <monitor-panel></monitor-panel> </div> @@ -14,12 +16,13 @@ import mapConfig from '@/conf/MapConfig' import SgisLayerController from '@components/LayerController/LayerController' import LcBasemap from '@components/LayerController/modules/LcBaseMap' +import LcServiceLayer from '@components/LayerController/modules/LcServiceLayer' import MonitorPanel from '@components/panel/MonitorPanel' import { mapMutations } from 'vuex' export default { name: 'MapTemplate', - components: {SgisLayerController, MonitorPanel, LcBasemap}, + components: {SgisLayerController, MonitorPanel, LcBasemap, LcServiceLayer}, data(){ return { basemapHelper: {}, @@ -73,5 +76,10 @@ height: 100%; width: 100%; } + .barline{ + width: 100%; + height: 1px; + background-color: #0661AE; + } } </style>> -- Gitblit v1.8.0