From 3f3adb45c6c8c37567122dd9e361f14d88516b3b Mon Sep 17 00:00:00 2001 From: Surpriseplus <845948745@qq.com> Date: 星期三, 22 三月 2023 15:03:46 +0800 Subject: [PATCH] 综合展示图层管理页面及数据加载优化 --- src/api/api.js | 4 src/views/Tools/LayerTree.vue | 369 ++++++++++++++++++++++++++++++++++++++++++++-------- src/views/Synthesis/LeftMenu.vue | 12 + src/components/preview_map.vue | 2 4 files changed, 322 insertions(+), 65 deletions(-) diff --git a/src/api/api.js b/src/api/api.js index 7bfb41c..d1bb59f 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -1106,4 +1106,8 @@ return service.post('/publish/insertForPub', params); } +//缁煎悎灞曠ず => 鏍规嵁ID鏌ヨ鍙戝竷娓呭崟 +export function comprehensive_selectPubById(params) { + return service.get('/comprehensive/selectPubById', { params: params }); +} diff --git a/src/components/preview_map.vue b/src/components/preview_map.vue index 58d953d..9a79c55 100644 --- a/src/components/preview_map.vue +++ b/src/components/preview_map.vue @@ -86,7 +86,7 @@ Viewer.imageryLayers.removeAll(); var url = res.url.split(';') - console.log(url) + sgworld.Creator.createImageryProvider('mpt褰卞儚', "wms", { url: url[0], diff --git a/src/views/Synthesis/LeftMenu.vue b/src/views/Synthesis/LeftMenu.vue index 2b10a2c..0b7b2af 100644 --- a/src/views/Synthesis/LeftMenu.vue +++ b/src/views/Synthesis/LeftMenu.vue @@ -2256,6 +2256,7 @@ }); }, setAddLayers(res) { + this.setClearWmsLayer() var std = [[]]; for (var i in res) { switch (res[i].serveType) { @@ -2268,8 +2269,7 @@ this.setAddWmsLayer(std[0]) } }, - setAddWmsLayer(res) { - + setClearWmsLayer() { for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { var val_id = window.Viewer.imageryLayers._layers[i].imageryProvider.name; if (val_id == "Wms_Layer") { @@ -2285,10 +2285,15 @@ window.map.removeLayer(layers_ol[i]); //鏄剧ず鍥惧眰 } } + }, + setAddWmsLayer(res) { var url = []; for (var i in res) { - url.push(res[i].url) + if (res[i].url) { + url.push(res[i].url) + } } + url = url.reverse(); var that = this; var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat("html", null, function (html) { @@ -2707,6 +2712,7 @@ } }); this.$bus.$on("showMenuLayer", ((res) => { + this.setAddLayers(res); })); this.$store.state.showAllLayers = true; diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue index f69ce25..9d39953 100644 --- a/src/views/Tools/LayerTree.vue +++ b/src/views/Tools/LayerTree.vue @@ -14,7 +14,7 @@ :props="defaultProps" @node-click="handleLeftclick" @node-contextmenu="rightClick" - @check-change="handleCheckChange" + @check="handleCheckChange" :default-checked-keys="handleTreeCheck" :expand-on-click-node="false" :filter-node-method="filterNode" @@ -185,7 +185,7 @@ import View from "ol/View.js"; import { Fill, Stroke, Style } from "ol/style.js"; -import { perms_selectLayers, inquiry_selectDomains } from "../../api/api.js"; +import { perms_selectLayers, inquiry_selectDomains, comprehensive_selectPubById } from "../../api/api.js"; export default { name: "tree", components: { queryinfo }, @@ -232,6 +232,8 @@ label: "WFS", }, ], + childOption: [], + mptLayer: [], }; }, methods: { @@ -501,69 +503,105 @@ console.log("tree drop: ", dropNode.label, dropType); }, handleCheckChange(data, checked, indeterminate) { + if (data.type == 1) { + this.childOption = []; + this.getchilds(data); + var listWMS = []; + var listWFS = []; + var listTileset = []; + var listTMS = []; + var listMpt = []; + for (var i in this.childOption) { + switch (this.childOption[i].serveType) { + case 'WMS': + listWMS.push(this.childOption[i]) + break; + case 'WFS': + listWFS.push(this.childOption[i]) + break; + case 'Tileset': + listTileset.push(this.childOption[i]) + break; + case 'Mpt': + listMpt.push(this.childOption[i]) + break; + case 'TMS': + listTMS.push(this.childOption[i]) + break; - if (data.type != 2) return; - var value = this.$refs.tree.getCheckedNodes(); - - this.$bus.$emit("showMenuLayer", value); - - - - if (data.serveType == "WFS") { - if (window.Viewer.dataSources._dataSources.length == 0) { - this.setAddLayers(data); - } else { - for (var i in window.Viewer.dataSources._dataSources) { - if (window.Viewer.dataSources._dataSources[i].name == data.cnName) { - window.Viewer.dataSources._dataSources[i].show = checked; - std.push(data.label); - } } } - } else if (data.serveType == "Tileset") { - - if (Viewer.scene.primitives._primitives.length == 0) { - this.setAddLayers(data); - } else { - var std = []; - for (var i in Viewer.scene.primitives._primitives) { - Viewer.scene.primitives._primitives[i].show = checked; - if (Viewer.scene.primitives._primitives[i].id == data.cnName) { - std.push(data.id); - Viewer.flyTo(Viewer.scene.primitives._primitives[i]); - } - } + this.setChangeWMS(listWMS, checked); + this.setChangeWFS(listWFS, checked); + this.setChangeTileset(listTileset, checked); + this.setChangeTMS(listTMS, checked); + this.setChangeMpt(listMpt, checked); + } else if (data.type == 2) { + if (data.serveType == "WMS") { + this.setChangeWMS([data], checked); + } else if (data.serveType == "Tileset") { + this.setChangeTileset([data], checked); + } else if (data.serveType == "TMS") { + this.setChangeTMS([data], checked); + } else if (data.serveType == "Mpt") { + this.setChangeMpt([data], checked); } - if (std.length == 0 && checked == true) { - this.setAddLayers(data); - } else { - window.map.getLayers().getArray().forEach(item => { - if (item.get("name") == data.cnName) { - item.setVisible(checked); - - } - }); - } - } else if (data.serveType == "TMS") { - debugger - if (data.pubid) { - debugger - } else { - var res; - if (data.url.indexOf("{host}") != -1) { - res = data.url.replace("{host}", iisHost); - } else { - res = data.url - } - var url = res.split(';') - debugger - window.sgworld.Creator.createImageryProvider('mpt褰卞儚', "wms", { - url: url[0], - layers: url[1] - }, "0", undefined, true, ""); - } - } + // if (data.type != 2) return; + + + + + // if (data.serveType == "WFS") { + // if (window.Viewer.dataSources._dataSources.length == 0) { + // this.setAddLayers(data); + // } else { + + // } + // } else if (data.serveType == "Tileset") { + + // if (Viewer.scene.primitives._primitives.length == 0) { + // this.setAddLayers(data); + // } else { + // var std = []; + // for (var i in Viewer.scene.primitives._primitives) { + // Viewer.scene.primitives._primitives[i].show = checked; + // if (Viewer.scene.primitives._primitives[i].id == data.cnName) { + // std.push(data.id); + // Viewer.flyTo(Viewer.scene.primitives._primitives[i]); + // } + // } + // } + // if (std.length == 0 && checked == true) { + // this.setAddLayers(data); + // } else { + // window.map.getLayers().getArray().forEach(item => { + // if (item.get("name") == data.cnName) { + // item.setVisible(checked); + + // } + // }); + // } + // } else if (data.serveType == "TMS") { + + // if (data.pubid) { + + // } else { + // var res; + // if (data.url.indexOf("{host}") != -1) { + // res = data.url.replace("{host}", iisHost); + // } else { + // res = data.url + // } + // var url = res.split(';') + + // window.sgworld.Creator.createImageryProvider('mpt褰卞儚', "wms", { + // url: url[0], + // layers: url[1] + // }, "0", undefined, true, ""); + // } + + // } @@ -576,7 +614,155 @@ // } // } }, + setChangeWMS(result, checked) { + var value = this.$refs.tree.getCheckedNodes(); + this.$bus.$emit("showMenuLayer", value); + }, + setChangeWFS(result, checked) { + var value = this.$refs.tree.getCheckedNodes(); + var std = []; + for (var i in value) { + std.push(value[i].id) + } + for (var i in result) { + var tile = result[i] + if (std.indexOf(tile.id) != -1) { + this.setAddLayers(tile) + } else { + for (var i in window.Viewer.dataSources._dataSources) { + if (window.Viewer.dataSources._dataSources[i].name == tile.cnName) { + window.Viewer.dataSources.remove(window.Viewer.dataSources._dataSources[i]); + } + } + + var layers_ol = window.map.getAllLayers(); + for (var i in layers_ol) { + var layerOl = layers_ol[i]; + if (layerOl.values_.name == tile.cnName) { + window.map.removeLayer(layerOl) + } + } + } + } + }, + setChangeTileset(result, checked) { + var value = this.$refs.tree.getCheckedNodes(); + var std = []; + for (var i in value) { + std.push(value[i].id) + } + for (var i in result) { + var tile = result[i] + if (std.indexOf(tile.id) != -1) { + this.setAddLayers(tile) + } else { + for (var j in Viewer.scene.primitives._primitives) { + if (Viewer.scene.primitives._primitives[j].id == tile.cnName) { + Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j]) + } + } + } + } + + + + // if (checked.checkedKeys) { + // for (var i in result) { + // + // } + // } else { + + // for (var j in result) { + // console.log(result[j]) + // // + // } + // } + }, + setChangeMpt(result, checked) { + var value = this.$refs.tree.getCheckedNodes(); + var std = []; + for (var i in value) { + std.push(value[i].id) + } + for (var i in result) { + var tile = result[i] + if (std.indexOf(tile.id) != -1) { + this.setAddLayers(tile) + + } else { + for (var i in this.mptLayer) { + if (this.mptLayer[i].treeobj.name == tile.cnName) { + this.mptLayer[i].deleteObject(); + this.mptLayer.splice(i, 1) + } + } + } + } + }, + setChangeTMS(result, checked) { + var value = this.$refs.tree.getCheckedNodes(); + var std = []; + for (var i in value) { + std.push(value[i].id) + } + for (var i in result) { + var tile = result[i] + if (std.indexOf(tile.id) != -1) { + this.setAddLayers(tile) + + } else { + for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { + var val_id = window.Viewer.imageryLayers._layers[i].name; + if (val_id == tile.cnName) { + window.Viewer.imageryLayers.remove( + window.Viewer.imageryLayers._layers[i] + ); + } + } + } + } + }, + getchilds(source) { + if (source.children) { + var child = source.children + for (var i in child) { + if (child[i].children) { + this.getchilds(child[i]) + } else { + this.childOption.push(child[i]) + } + } + } else { + this.childOption.push(source) + } + // let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕 + // var std = []; + // if (cloneData.children) { + // var child = cloneData.children; + // child.filter((father) => { + // if (father.children) { + // father.father + // } else { + + // } + + // }) + // } + // cloneData.filter((father) => { + // // 寰幆鎵�鏈夐」 + // console.log(father) + // // let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁 + // // branchArr.length > 0 ? (father.children = branchArr) : ""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊� + // // // 灞炰簬鍚屼竴瀵硅薄闂锛屼緥濡傦細浠� a=b銆乧=1 锛岀劧鍚庡啀浠� b.c=c 锛� 閭d箞 a.c=b.c=c=1 锛涘悓鐞嗭紝鍚庣画浠� c.d=2 ,閭d箞 a.c.d 涔熸槸=2锛� + // // // 鐢辨寰幆澶氭鍚庯紝灏辫兘褰㈡垚鐩稿簲鐨勬爲褰㈡暟鎹粨鏋� + // // return father.pid == 0; // 杩斿洖涓�绾ц彍鍗� + // }); + + + }, + setAddLayers(res) { + if (res.serveType == "WMS") { var resource = geoServerURl; if (res.resource != null && res.resource != undefined) { @@ -677,9 +863,70 @@ Viewer.flyTo(tileset); }); window.model = tileset + } else if (res.serveType == "TMS") { + var url = res.url; + if (res.url.indexOf("{host}") != -1) { + url = res.url.replace("{host}", iisHost); + } + + if (res.pubid) { + this.setQueryPubid(res); + } else { + var layer = Viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: url, + maximumLevel: 18, + }) + ); + layer.name = res.cnName; + this.setChangeWMS(); + } + + } else if (res.serveType == "Mpt") { + + if (res.url.indexOf("{host}") != -1) { + res.url = res.url.replace("{host}", iisHost); + } + var url = res.url.split(';') + + var layer = sgworld.Creator.createImageryProvider(res.cnName, "wms", { + url: url[0], + layers: url[1] + }, "0", undefined, true, ""); + + this.mptLayer.push(layer) + setTimeout(() => { + this.setChangeWMS(); + }, 500); + } + + }, + async setQueryPubid(res) { + const data = await comprehensive_selectPubById({ id: res.pubid }) + if (data.code != 200) { + + } else { + var url = data.result.url; + if (res.url.indexOf("{host}") != -1) { + url = res.url.replace("{host}", iisHost); + } + var layer = Viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: url, + maximumLevel: 18, + }) + ); + layer.name = res.cnName; + + if (data.result.geom) { + var wkt = this.$wkt.parse(data.result.geom); + Viewer.camera.flyTo({ + destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000), + }); + } + this.setChangeWMS(); } }, - tileSet(tileset, height) { //3dtile妯″瀷鐨勮竟鐣岀悆浣� -- Gitblit v1.9.3