From 0d9aae8f90dfc0f0f07a3ac95da0901b2c01ad4f Mon Sep 17 00:00:00 2001 From: Surpriseplus <845948745@qq.com> Date: 星期二, 05 九月 2023 09:53:47 +0800 Subject: [PATCH] 发布影像内网加载不显示修改 --- src/views/Tools/LayerTree.vue | 799 +++++++++++++++++++++++++++++++------------------------- 1 files changed, 444 insertions(+), 355 deletions(-) diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue index c46ef63..a8257d9 100644 --- a/src/views/Tools/LayerTree.vue +++ b/src/views/Tools/LayerTree.vue @@ -2,158 +2,174 @@ <div class="lalala tree-container"> <el-form ref="form"> <el-form-item> - <el-select v-model="$store.state.pigCode" - clearable - filterable - style="width :100%" - @change="setproChange" - placeholder="璇烽�夋嫨椤圭洰"> - <el-option v-for="item in optionts" - :key="item.code" - :label="item.name" - :value="item.code"> + <el-select + v-model="$store.state.pigCode" + clearable + filterable + style="width :100%" + @change="prjChanged" + placeholder="璇烽�夋嫨椤圭洰" + > + <el-option + v-for="item in menus" + :key="item.code" + :label="item.name" + :value="item.code" + > </el-option> </el-select> </el-form-item> <el-form-item> - <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" - v-model="filterText" - class="search"> + <el-input + placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" + v-model="filterText" + class="search" + > </el-input> </el-form-item> </el-form> - <el-tree ref="tree" - :data="treeData" - node-key="id" - show-checkbox - :props="defaultProps" - @node-click="handleLeftclick" - @node-contextmenu="rightClick" - @check="handleCheckChange" - :default-checked-keys="handleTreeCheck" - :expand-on-click-node="false" - :filter-node-method="filterNode" - draggable> - <span class="slot-t-node" - slot-scope="{ node, data }"> + <el-tree + ref="tree" + :data="treeData" + node-key="id" + show-checkbox + :props="defaultProps" + @node-click="handleLeftclick" + @node-contextmenu="rightClick" + @check="handleCheckChange" + :default-checked-keys="handleTreeCheck" + :expand-on-click-node="false" + :filter-node-method="filterNode" + draggable + > + <span + class="slot-t-node" + slot-scope="{ node, data }" + > <span v-show="!data.isEdit"> <span :class="[data.id >= 99 ? 'slot-t-node--label' : '']">{{ - node.label - }}</span> + node.label + }}</span> </span> <span v-show="data.isEdit"> - <el-input class="slot-t-input" - size="mini" - autofocus - v-model="data.label" - :ref="'slotTreeInput' + data.id" - @blur.stop="nodeBlur(node, data)" - @keydown.native.enter="nodeBlur(node, data)"></el-input> + <el-input + class="slot-t-input" + size="mini" + autofocus + v-model="data.label" + :ref="'slotTreeInput' + data.id" + @blur.stop="nodeBlur(node, data)" + @keydown.native.enter="nodeBlur(node, data)" + ></el-input> </span> </span> </el-tree> - <el-card class="box-card" - ref="card" - :style="{ ...rightClickMenuStyle }" - v-show="menuVisible"> - <div class="edit" - @click="showLayerAttribute()" - v-if="showProp && !shwoHistogram"> + <el-card + class="box-card" + ref="card" + :style="{ ...rightClickMenuStyle }" + v-show="menuVisible" + > + <div + class="edit" + @click="showLayerAttribute()" + v-if="showProp && !shwoHistogram" + > <i class="el-icon-tickets"></i> 灞炴�� </div> - <div class="edit" - @click="positioning()" - v-if="showLocal"> + <div + class="edit" + @click="positioning()" + v-if="showLocal" + > <i class="el-icon-tickets"></i> 瀹氫綅 </div> - <div class="edit" - @click="pellucidity()" - v-if="showOpacity"> + <div + class="edit" + @click="pellucidity()" + v-if="showOpacity" + > <i class="el-icon-tickets"></i> 閫忔槑搴� </div> - <div class="edit" - @click="histogram()" - v-show="shwoHistogram"> + <div + class="edit" + @click="histogram()" + v-show="shwoHistogram" + > <i class="el-icon-tickets"></i> 閽诲瓟鏌辩姸鍥� + </div> + <div + class="edit" + v-show="shwoTileDown" + @click="tileDownload()" + > + <i class="el-icon-download"></i> 鐡︾墖涓嬭浇 + </div> + <div + class="edit" + v-show="shwoAnnex" + @click="annexDownload()" + > + <i class="el-icon-tickets"></i> 闄勪欢 </div> </el-card> </div> </template> <script> -import ImageWMS from "ol/source/ImageWMS"; -import Image from "ol/layer/Image"; import GeoJSON from "ol/format/GeoJSON.js"; import queryinfo from "./queryinfo.vue"; import { Vector as VectorSource } from "ol/source"; import { Vector as VectorLayer } from "ol/layer"; -import { perms_selectLayers, comprehensive_selectPubById, project_selectDirAll, project_selectByDirid, } from "../../api/api.js"; +import { perms_selectLayers, comprehensive_selectPubById, project_selectDirAll } from "../../api/api.js"; export default { name: "tree", components: { queryinfo }, - data () { + data() { return { isBusy: false, // 姝e繖 + lastPrjCode: "", // 鏈�鍚庨�夋嫨椤圭洰缂栫爜 showProp: false, // 灞炴�� shwoHistogram: false, // 閽诲瓟鏌辩姸鍥� showLocal: false, // 瀹氫綅 showOpacity: false, // 涓嶉�忔槑搴� + shwoTileDown: false, // 鐡︾墖涓嬭浇 menuVisible: false, // 鑿滃崟 - levelArray: [ // 璋冭瘯鏁扮粍 + shwoAnnex: false,//闄勪欢 + levelArray: [ // 楂樼▼鏁扮粍 0, 40000000, 20000000, 10000000, 5000000, 2000000, 1000000, 500000, 250000, 200000, 100000, 50000, 17000, 9000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 0, ], - eleId: "", - isShow: false, - currentData: "", - currentNode: "", - firstLevel: false, - filterText: "", - appendNodetitle: "", - maxexpandId: 4, - rightClickMenuStyle: {}, - handleTreeCheck: [], - dialogVisible: false, - showModelAttach: false, - addFormServer: { - opacity: 100, - serveType: "WMS", - type: 2, - }, + filterText: "", // 鍏抽敭瀛楄繃婊� + currentData: "", // 褰撳墠鏁版嵁 + currentNode: "", // 褰撳墠鑺傜偣 + rightClickMenuStyle: {}, // 鍙抽敭鑿滃崟鏍峰紡 + handleTreeCheck: [], // 榛樿閫変腑閿� layerId: [ "m_pipeline", "th_strategic_channel", "bs_project", "m_sitepoint", ], - treeData: [], - defaultProps: { + treeData: [], // 鏍戞暟鎹� + sourceData: [], // 婧愭暟鎹� + defaultProps: { // 榛樿灞炴�у�� children: "children", label: "cnName", }, - options: [{ - value: "WMS", - label: "WMS", - }, { - value: "WFS", - label: "WFS", - }, - ], - childOption: [], - mptLayer: [], - optionts: [], - proValue: null, + mptLayer: [], // Mpt鍥惧眰 + menus: [] // 鑿滃崟椤� }; }, watch: { - filterText (val) { + filterText(val) { this.$refs.tree.filter(val); }, }, - mounted () { - this.getMenus() + mounted() { + this.getMenus(); this.$bus.$on("treeDataCopy", (res) => { this.$store.state.treeData = this.treeData; this.$store.state.checkedKeys = this.$refs.tree.getCheckedKeys(); @@ -168,12 +184,12 @@ }, methods: { // 鑾峰彇鑿滃崟 - async getMenus () { + async getMenus() { let data = await project_selectDirAll(); - if (data && data.code == 200) this.optionts = data.result; + if (data && data.code == 200) this.menus = data.result; }, // 鍒濆鍖栧浘灞� - async layersStart () { + async layersStart() { let data = await perms_selectLayers(); if (data.code != 200) { return this.$message.error("鍥惧眰鍒楄〃鏌ヨ澶辫触"); @@ -189,22 +205,53 @@ }); // 瀛樺偍閫変腑鍥惧眰 this.treeData = this.setTreeData(layers); + this.sourceData = JSON.parse(JSON.stringify(this.treeData)); this.$refs.tree.setCheckedKeys(checkKey); sessionStorage.setItem("checkedLayers", JSON.stringify(checkedLayers)); }, // 璁剧疆鏍戞暟鎹� - setTreeData (source) { - let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕 + setTreeData(source) { + /*let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕 return cloneData.filter((father) => { // 寰幆鎵�鏈夐」 let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁 branchArr.length > 0 ? (father.children = branchArr) : ""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊� // 灞炰簬鍚屼竴瀵硅薄闂锛屼緥濡傦細浠� a=b銆乧=1 锛岀劧鍚庡啀浠� b.c=c 锛岄偅涔� a.c=b.c=c=1 锛涘悓鐞嗭紝鍚庣画浠� c.d=2 ,閭d箞 a.c.d 涔熸槸=2锛� return father.pid == 0; // 杩斿洖涓�绾ц彍鍗� + });*/ + + let arr = []; + let data = JSON.parse(JSON.stringify(source)); + this.setTreeChildData(data, arr, 0); + + return arr; + }, + // 璁剧疆鏍戝瓙鑺傜偣鏁版嵁 + setTreeChildData(data, arr, pid) { + let i = 0; + while (i < data.length) { + let d = data[i]; + if (d.pid == pid) { + arr.push(d); + data.splice(i, 1); + continue; + } + + i++; + } + + arr.sort(function (a, b) { + return a.orderNum - b.orderNum; }); + + for (let i in arr) { + let children = []; + this.setTreeChildData(data, children, arr[i].id); + if (children.length) arr[i].children = children; + } }, // 鑺傜偣鑾峰緱鐒︾偣浜嬩欢 - nodeBlur (node, data) { + nodeBlur(node, data) { if (!data.label.length) return this.$message.error("鑿滃崟鍚嶄笉鍙负绌猴紒"); if (data.isEdit) this.$set(data, "isEdit", false); this.$nextTick(() => { @@ -212,22 +259,22 @@ }); }, // 榧犳爣宸﹀嚮浜嬩欢 - handleLeftclick (data, node) { + handleLeftclick(data, node) { this.rmListener(); }, // 鍙栨秷榧犳爣鐩戝惉浜嬩欢 - rmListener () { + rmListener() { this.menuVisible = false; // 瑕佸強鏃跺叧鎺夌洃鍚紝涓嶅叧鎺夌殑鏄竴涓潙锛屼笉淇′綘璇曡瘯锛岃櫧鐒跺墠鍙版樉绀虹殑鏃跺�欐病鏈夊暐姣涚梾锛屽姞涓�涓猘lert浣犲氨鐭ラ亾浜� document.removeEventListener("click", this.rmListener); }, // 杩囨护鑺傜偣 - filterNode (value, data) { + filterNode(value, data) { if (!value) return true; return data.cnName.indexOf(value) !== -1; }, // 榧犳爣鍙冲嚮浜嬩欢 - rightClick (event, object, node, element) { + rightClick(event, object, node, element) { if (object.type == 1 || node.data.children != null) return; this.currentNode = node; @@ -238,13 +285,14 @@ this.shwoHistogram = this.showProp && object.enName == "s_explorationpoint"; // 閽诲瓟鏌辩姸鍥� this.showLocal = ["Tileset", "3DML", "Mpt", "TMS", "DOM", "DEM"].indexOf(object.serveType) > -1; // 瀹氫綅 this.showOpacity = ["Tileset", "3DML"].indexOf(object.serveType) > -1; // 涓嶉�忔槑搴� - this.menuVisible = this.showProp || this.shwoHistogram || this.showLocal || this.showOpacity; // 鑿滃崟 - + this.shwoTileDown = ["TMS", "DOM"].indexOf(object.serveType) > -1 && object.pubid; // 鐡︾墖涓嬭浇 + this.menuVisible = this.showProp || this.shwoHistogram || this.showLocal || this.showOpacity || this.shwoTileDown; // 鑿滃崟 + this.shwoAnnex = ['DEM', 'TMS'].indexOf(object.serveType) > -1;//闄勪欢 this.$refs.card.$el.style.left = event.pageX + 20 + "px"; this.$refs.card.$el.style.top = event.pageY + "px"; }, // 灞炴�ф樉绀� - showLayerAttribute (data) { + showLayerAttribute(data) { this.rmListener(); this.currentData = data ? data : this.currentData; let layer = this.currentData.enName.replaceAll("_", ""); @@ -253,8 +301,9 @@ this.$store.state.mapPopBoxFlag = "2"; }, // 瀹氫綅 - async positioning () { + async positioning() { this.rmListener(); + if (["Tileset", "3DML"].indexOf(this.currentData.serveType) > -1) { for (let i in Viewer.scene.primitives._primitives) { if (Viewer.scene.primitives._primitives[i].id == this.currentData.cnName) { @@ -278,11 +327,22 @@ } if ("Mpt" == this.currentData.serveType) { - viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(101.8, 37.9, 10000000.0) }); // 涓浗 + if (this.currentData.json) { + var json = JSON.parse(this.currentData.json); + if (json.west) { + Viewer.camera.flyTo({ + destination: Cesium.Rectangle.fromDegrees(json.west, json.south, json.east, json.north) + }) + } + } else { + + Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(101.8, 37.9, 10000000.0) }); // 涓浗 + } + } }, // 閽诲瓟鏌辩姸鍥� - async histogram () { + async histogram() { this.rmListener(); let layer = this.currentData.enName.replaceAll("_", ""); this.$store.state.mapSpaceQueryLayer = layer; @@ -290,7 +350,7 @@ this.$store.state.showPopBoxFlag = true; }, // 閫忔槑搴� - pellucidity () { + pellucidity() { this.rmListener(); for (let j in Viewer.scene.primitives._primitives) { if (Viewer.scene.primitives._primitives[j].id == this.currentData.cnName) { @@ -301,13 +361,45 @@ } }, // 鑾峰彇楂樺害 - getHeight (level) { + getHeight(level) { if (level > -1 && level < 23) return this.levelArray[level]; return this.levelArray[this.levelArray.length - 1]; }, + //闄勪欢涓嬭浇 + annexDownload() { + this.$bus.$emit('annexDownload', this.currentData) + }, + + // 鐡︾墖涓嬭浇 + tileDownload() { + this.rmListener(); + + var that = this; + sgworld.Creator.createSimpleGraphic( + "rectangle", {}, + function (entity) { + that.getTileRectangle(entity); + sgworld.Creator.SimpleGraphic.clear(); + } + ); + }, + // 鑾峰彇鐡︾墖鍥涜嚦鑼冨洿 + getTileRectangle(res) { + var value = res.rectangle.coordinates.getValue(); + var val = { + pubid: this.currentData.pubid, + pwd: "", + title: "", + xmax: Cesium.Math.toDegrees(value.east), + xmin: Cesium.Math.toDegrees(value.west), + ymax: Cesium.Math.toDegrees(value.north), + ymin: Cesium.Math.toDegrees(value.south) + } + this.$bus.$emit("titleDown", val); + }, // 鍥惧眰閫変腑浜嬩欢 - handleCheckChange (data, checked) { + handleCheckChange(data, checked) { if (this.isBusy) return; let nodes = []; @@ -336,14 +428,14 @@ } } - if (obj.WMS.length) this.setChangeWMS(obj.WMS, checked); - if (obj.Tileset.length) this.setChangeTileset(obj.Tileset, checked); + if (obj.DEM.length) this.setChangeDEM(obj.DEM, checked); if (obj.TMS.length) this.setChangeTMS(obj.TMS, checked); if (obj.Mpt.length) this.setChangeMpt(obj.Mpt, checked); - if (obj.DEM.length) this.setChangeDEM(obj.DEM, checked); + if (obj.Tileset.length) this.setChangeTileset(obj.Tileset, checked); + if (obj.WMS.length) this.setChangeWMS(obj.WMS, checked); }, // 鑾峰彇瀛愯妭鐐� - getNodes (data, arr) { + getNodes(data, arr) { if (data.children) { for (let i = 0, c = data.children.length; i < c; i++) { let node = data.children[i]; @@ -358,7 +450,7 @@ } }, // 鑾峰彇鑺傜偣ID - getCheckNodesIds () { + getCheckNodesIds() { let nodes = this.$refs.tree.getCheckedNodes(); let ids = []; for (let i in nodes) { @@ -368,12 +460,12 @@ return ids; }, // 鍒囨崲WMS鏈嶅姟 - setChangeWMS (layers, checked) { + setChangeWMS(layers, checked) { let value = this.$refs.tree.getCheckedNodes(); this.$bus.$emit("showMenuLayer", value); }, // 鍒囨崲Tileset - setChangeTileset (layers, checked) { + setChangeTileset(layers, checked) { let ids = this.getCheckNodesIds(), arr = []; for (let k in layers) { let layer = layers[k]; @@ -400,7 +492,7 @@ if (arr.length) this.addTilesetLayers(arr); }, // 娣诲姞Tileset鍥惧眰 - addTilesetLayers (layers) { + addTilesetLayers(layers) { for (let i in layers) { let res = layers[i]; let url = res.url.indexOf("{host}") > -1 ? res.url.replace("{host}", iisHost) : modelUrl + "/" + res.url; @@ -411,7 +503,7 @@ url: url, skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false baseScreenSpaceError: 1024, - maximumScreenSpaceError: 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16锛屾暟鍊煎姞澶ц兘璁╂渶缁堟垚鍍忓彉妯$硦 + maximumScreenSpaceError: url.indexOf("/pnts/") > -1 ? 16 : 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16锛屾暟鍊煎姞澶ц兘璁╂渶缁堟垚鍍忓彉妯$硦 skipScreenSpaceErrorFactor: 16, skipLevels: 1, immediatelyLoadDesiredLevelOfDetail: false, @@ -421,7 +513,7 @@ cullRequestsWhileMovingMultiplier: 10, // 鍊艰秺灏忚兘澶熸洿蹇殑鍓旈櫎锛�60 preloadWhenHidden: true, preferLeaves: true, // 棰勮瀛愯妭鐐癸細false - maximumMemoryUsage: 512, // 鍐呭瓨鍒嗛厤鍙樺皬鏈夊埄浜庡唴瀛樺洖鏀讹紝鎻愬崌鎬ц兘浣撻獙 + maximumMemoryUsage: 768, // 鍐呭瓨鍒嗛厤鍙樺皬鏈夊埄浜庡唴瀛樺洖鏀讹紝鎻愬崌鎬ц兘浣撻獙 progressiveResolutionHeightFraction: 0.5, // 鏁板�煎亸浜�0鑳藉璁╁垵濮嬪姞杞藉彉寰楁ā绯� dynamicScreenSpaceErrorDensity: 0.5, // 鏁板�煎姞澶э紝鑳借鍛ㄨ竟鍔犺浇鍙樺揩 dynamicScreenSpaceErrorFactor: 2, // 鍔ㄦ�佸睆骞曠┖闂磋宸殑绯绘暟 @@ -454,7 +546,7 @@ } }, // 鍒囨崲TMS - setChangeTMS (layers, checked) { + setChangeTMS(layers, checked) { let ids = this.getCheckNodesIds(), arr = []; for (let j in layers) { let layer = layers[j]; @@ -474,27 +566,34 @@ if (arr.length) this.addTMSLayers(arr); }, // 娣诲姞TMS鍥惧眰 - addTMSLayers (layers) { - let url = res.url; - if (res.url.indexOf("{host}") != -1) { - url = res.url.replace("{host}", iisHost); - } + addTMSLayers(layers) { + debugger + for (let i in layers) { + let res = layers[i]; + res.url = res.url.indexOf("{host}") > -1 ? res.url.replace("{host}", iisHost) : res.url; - if (res.pubid) { - this.setQueryPubid(res); - } else { - let layer = Viewer.imageryLayers.addImageryProvider( - new Cesium.UrlTemplateImageryProvider({ - url: url, - maximumLevel: 22, - }) - ); + if (res.pubid) { + this.setTMSLayerByPubid(res); + continue; + } + + let layer = Viewer.imageryLayers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({ + url: res.url, + maximumLevel: 22, + enablePickFeatures: false + }), 1); + + layer.id = res.id; layer.name = res.cnName; - this.setChangeWMS(); + if (is_production) { + Viewer.imageryLayers.raiseToTop(layer);//灏嗗浘灞備笂绉讳竴灞� + Viewer.imageryLayers.lower(layer);//灏嗗浘灞備笂绉讳竴灞� + } + } }, // 鍒囨崲Mpt - setChangeMpt (layers, checked) { + setChangeMpt(layers, checked) { let ids = this.getCheckNodesIds(), arr = []; for (let j in layers) { let layer = layers[j]; @@ -514,66 +613,71 @@ if (arr.length) this.addMptLayers(arr); }, // 娣诲姞Mpt鍥惧眰 - addMptLayers (layers) { - if (res.url.indexOf("{host}") != -1) { - res.url = res.url.replace("{host}", iisHost); - } - let url = res.url.split(';') + addMptLayers(layers) { + for (let i in layers) { + let res = layers[i]; + if (res.url.indexOf("{host}") > -1) res.url = res.url.replace("{host}", iisHost); - let layer = sgworld.Creator.createImageryProvider(res.cnName, "wms", { - url: url[0], - layers: url[1] - }, "0", undefined, true, ""); - this.mptLayer.push(layer) - setTimeout(() => { - this.setChangeWMS(); - }, 500); + let urls = res.url.split(';'); + var ops = { + url: urls[0], + layers: urls[1] + }; + if (res && res.json) { + var rs = JSON.parse(res.json); + ops.rectangle = Cesium.Rectangle.fromDegrees(rs.west, rs.south, rs.east, rs.north); + } + + let layer = sgworld.Creator.createImageryProvider(res.cnName, "wms", ops, "0", undefined, true, ""); + this.mptLayer.push(layer); + } }, // 鍒囨崲DEM - setChangeDEM (layers, checked) { - let ids = this.getCheckNodesIds(), arr = [], isDel = false, useSG = false; + setChangeDEM(layers, checked) { + let ids = this.getCheckNodesIds(), arr = []; for (let i in layers) { let layer = layers[i]; if (ids.indexOf(layer.id) != -1) { arr.push(layer.url); continue; } - - if (window.Viewer.terrainProvider._layers[0].resource._url == layer.url) isDel = true; // 鍒犻櫎DEM } - if (!arr.length && isDel) useSG = true; // demLayer - if (arr.length) this.addDEMLayers(arr[0], useSG); + let url = arr.length ? arr[arr.length - 1] : null; + this.addDEMLayers(url, null == url); }, // 娣诲姞DEM鍥惧眰 - addDEMLayer (url, useSG) { + addDEMLayers(url, useSG) { if (useSG) { + if (Viewer.terrainProvider._isMPT) return; + let option = { url: window.sceneConfig.SGUrl, layerName: window.sceneConfig.mptName, requestVertexNormals: true }; - window.terrainLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); - } else { - window.terrainLayer = new Cesium.CesiumTerrainProvider({ - url: url, - requestVertexNormals: true - }); + sgworld.Creator.sfsterrainprovider("", option, "", true, ""); + return; } - Viewer.terrainProvider = terrainLayer; + + if (url.indexOf("{host}") > -1) url = url.replace("{host}", iisHost); + Viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ + url: url, + requestVertexNormals: true + }); }, // 璁剧疆Tileset鍙傛暟 - async setTilesetArgs (tileset, res) { + async setTilesetArgs(tileset, res) { if (res.serveType == '3DML' || !res.pubid) { this.setTilesetHeigth(tileset, parseFloat(res.elev)); return; } const data = await comprehensive_selectPubById({ id: res.pubid }) - if (data.code == 200) this.setTilesetCoord(tileset, data.result.json); + if (data.code == 200 && data.result.json) this.setTilesetCoord(tileset, data.result.json); }, // 璁剧疆Tileset楂樺害 - setTilesetHeigth (tileset, height) { + setTilesetHeigth(tileset, height) { //3dtile妯″瀷鐨勮竟鐣岀悆浣� let boundingSphere = tileset.boundingSphere; //杩崱灏旂┖闂寸洿瑙掑潗鏍�=>鍦扮悊鍧愭爣锛堝姬搴﹀埗锛� @@ -588,7 +692,7 @@ // Viewer.flyTo(tileset); }, // 璁剧疆Tileset鍧愭爣 - setTilesetCoord (tileset, json) { + setTilesetCoord(tileset, json) { let vm = JSON.parse(json); let pos = Cesium.Cartesian3.fromDegrees(vm.lon, vm.lat, vm.height); let converter = Cesium.Transforms.eastNorthUpToFixedFrame; @@ -597,207 +701,183 @@ tileset._root.transform = matrix; // Viewer.flyTo(tileset); }, - async setQueryPubid (res) { - const data = await comprehensive_selectPubById({ id: res.pubid }) - if (data.code != 200) { - // - } else { - let url = data.result.url; - if (res.url.indexOf("{host}") != -1) { - url = res.url.replace("{host}", iisHost); - } - let min = data.result.min; - let max = data.result.max; - let layer; - if (max > 0) { - layer = Viewer.imageryLayers.addImageryProvider( - new Cesium.UrlTemplateImageryProvider({ - url: url, - minimumLevel: min, - maximumLevel: max, - }) - ); - } else { - layer = Viewer.imageryLayers.addImageryProvider( - new Cesium.UrlTemplateImageryProvider({ - url: url, - minimumLevel: min, - }) - ); - } + // 鏍规嵁Pubid璁剧疆TMS鍥惧眰 + async setTMSLayerByPubid(res) { + const data = await comprehensive_selectPubById({ id: res.pubid }); + if (!data || data.code != 200) return; - layer.name = res.cnName; - if (data.result.geom) { - // let wkt = this.$wkt.parse(data.result.geom); - // Viewer.camera.flyTo({ - // destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000), - // }); - } - this.setChangeWMS(); + let provider = data.result.max > 0 ? + new Cesium.UrlTemplateImageryProvider({ + url: res.url, + minimumLevel: data.result.min, + maximumLevel: data.result.max, + enablePickFeatures: false + }) : + new Cesium.UrlTemplateImageryProvider({ + url: res.url, + minimumLevel: data.result.min, + enablePickFeatures: false + }); + + let layer = Viewer.imageryLayers.addImageryProvider(provider, 1); + layer.name = res.cnName; + + if (is_production) { + Viewer.imageryLayers.raiseToTop(layer);//灏嗗浘灞備笂绉讳竴灞� + Viewer.imageryLayers.lower(layer);//灏嗗浘灞備笂绉讳竴灞� + } + // if (data.result.geom) { + // let wkt = this.$wkt.parse(data.result.geom); + // Viewer.camera.flyTo({ + // destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000) + // }); + // } + }, + // 鍒囨崲椤圭洰 + prjChanged(code) { + + this.$store.state.pigCode = code; + + //if (code) { + this.isBusy = true; + let checkedLayers = this.getCheckedLayersByCode(code); + + let checkedKeys = []; + for (let i in checkedLayers) { + checkedKeys.push(checkedLayers[i].id); + } + + this.treeData = this.getNewTreeData(code); + this.$store.state.treeData = this.treeData; + this.$refs.tree.setCheckedKeys(checkedKeys); + sessionStorage.setItem("checkedLayers", JSON.stringify(checkedLayers)); + this.isBusy = false; + //} + + for (let i = 0, c = this.treeData.length; i < c; i++) { + this.handleCheckChange(this.treeData[i], true); } }, - async setproChange (res) { - if (res) { - this.setCheeckedLayer = this.$refs.tree.getCheckedKeys(); - this.$store.state.pigCode = res; - let st_code = this.optionts.filter(rs => { - if (rs.code == res) { - return rs + // 鏍规嵁椤圭洰缂栫爜鑾峰彇閫変腑鍥惧眰 + getCheckedLayersByCode(code) { + let layers = []; + for (let i = 0, c = this.treeData.length; i < c; i++) { + this.getCheckedChildLayersByCode(this.treeData[i], code, layers, false); + } + + return layers; + }, + // 鏍规嵁椤圭洰缂栫爜鑾峰彇閫変腑瀛愬浘灞� + getCheckedChildLayersByCode(data, code, layers, isPrj) { + if (data.children && data.children.length) { + for (let i = 0, c = data.children.length; i < c; i++) { + let layer = data.children[i]; + if (layer.children && layer.children.length) { + let flag = layer.type == 1 && layer.isProject && layer.enName == code; + this.getCheckedChildLayersByCode(layer, code, layers, flag); + continue; } - }) - let val = this.$store.state.oldTree.filter(rs => { - if (rs.enName == st_code[0].code) { - return rs - } - }) - this.removeAllLayer(); - let obj = { - dirid: res, - pageIndex: 1, - pageSize: 10, - } - - const data = await project_selectByDirid(obj); - if (data.code != 200) { - this.$message.error("鍒楄〃鑾峰彇澶辫触"); - return; - } - - if (data.result[0]) { - let geom = data.result[0].geom - if (geom) { - let wkt = this.$wkt.parse(geom) - Viewer.camera.flyTo({ - destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[0].toFixed(6), wkt.coordinates[1].toFixed(6), 5000), - }); - } - } - //this.cannelTerrainLayer(); - //this.setTerrainMptLayer(); - //娓呯┖鍥惧眰鏍戦�変腑鐘舵�� - this.$refs.tree.setCheckedKeys([]); - if (val.length > 0) { - if (val[0].type == 1 && val[0].isProject == 1) {//椤圭洰鍒嗙被 - let std_check = []; - for (let i in val) { - let std_val = this.getNewTree([this.$refs.tree.getNode(val[i].id).data], []) - for (let j in std_val) { - std_check.push(std_val[j]) - } - } - let value = this.$store.state.isProjectLayer; - for (let i in value) { - - std_check.push(value[i]) - } - this.setProjectLayer(std_check); + //if (layer.type == 2 && (layer.isProject || isPrj)) { + // layers.push(layer); + //} + if (code) { + if (layer.type == 2 && (layer.isProject || isPrj)) layers.push(layer); } else { - this.setChangeProLayer(); - } - } else { - this.setChangeProLayer(); - } - } else { - this.removeAllLayer(); - this.$store.state.pigCode = null; - this.$refs.tree.setCheckedKeys(this.setCheeckedLayer); - let std = []; - for (let i in this.setCheeckedLayer) { - std.push(this.$refs.tree.getNode(this.setCheeckedLayer[i]).data) - } - this.setProjectLayer(std); - } - }, - removeAllLayer () { - for (let j in Viewer.scene.primitives._primitives) { - Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j]) - } - for (let i in window.Viewer.dataSources._dataSources) { - window.Viewer.dataSources.remove( - window.Viewer.dataSources._dataSources[i] - ); - } - for (let i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { - let val_id = window.Viewer.imageryLayers._layers[i].id; - if (val_id == 'TMS') { - window.Viewer.imageryLayers.remove( - window.Viewer.imageryLayers._layers[i] - ); - } - } - for (let i in this.mptLayer) { - this.mptLayer[i].deleteObject(); - this.mptLayer.splice(i, 1) - } - this.mptLayer = []; - }, - setProjectLayer (res) { - let layerid = []; - for (let j in res) { - layerid.push(res[j].id) - } - this.$refs.tree.setCheckedKeys(layerid); - // let value = this.$refs.tree.getCheckedNodes(); - // this.$bus.$emit("showMenuLayer", value); - let listWMS = []; - let listWFS = []; - let listTileset = []; - let listTMS = []; - let listMpt = []; - for (let i in res) { - if (res[i].type == 2) { - switch (res[i].serveType) { - case 'WMS': - listWMS.push(res[i]) - break; - case 'WFS': - listWFS.push(res[i]) - break; - case '3DML': - case 'Tileset': - listTileset.push(res[i]) - break; - case 'Mpt': - listMpt.push(res[i]) - break; - case 'TMS': - listTMS.push(res[i]) - break; + if (layer.isShow) layers.push(layer); } } + return; } - // this.setChangeProLayer(); - this.setChangeWMS(listWMS, true); - this.setChangeWFS(listWFS, true); - this.setChangeTileset(listTileset, true); - this.setChangeTMS(listTMS, true); - this.setChangeMpt(listMpt, true); - }, - getNewTree (obj, result) { - for (const i in obj) { - console.log(obj[i].cnName) - result.push(obj[i]) - if (obj[i].children && obj[i].children.length > 0) { - this.getNewTree(obj[i].children, result) - } - } - return result - }, - setChangeProLayer () { - let value = this.$store.state.isProjectLayer; - if (value.length != 0) { - let std = []; - for (let i in value) { - std.push(value[i].id) + if (data.type == 2 && (data.isProject || isPrj)) { + layers.push(data); + } + }, + // 鑾峰彇鏂版爲鏁版嵁 + getNewTreeData(code) { + let data = JSON.parse(JSON.stringify(this.sourceData)); + if (!code) return data; + + this.setSubTreeData(data, code); + this.rmPrjTreeData(data, code); + + return data; + }, + // 璁剧疆鏍戞暟鎹瓙鑺傜偣 + setSubTreeData(data, code) { + let j = 0; + while (j < data.length) { + let d = data[j]; + if (d.type == 1 && d.isProject && d.enName != code) { + data.splice(j, 1); + continue; } - this.$refs.tree.setCheckedKeys(std); - this.$bus.$emit("showMenuLayer", value); + + j++; + } + + for (let i = 0, c = data.length; i < c; i++) { + if (data[i].children && data[i].children.length) { + this.setSubTreeData(data[i].children, code); + } + } + }, + // 绉婚櫎椤圭洰鏍戞暟鎹� + rmPrjTreeData(data, code) { + /*let j = 0; + while (j < data.length) { + let d = data[j]; + if (d.type == 1 && d.isProject && d.enName == code) { + data.splice(j, 1); + data.concat(d.children); + continue; + } + + j++; + } + + for (let i = 0, c = data.length; i < c; i++) { + if (data[i].children && data[i].children.length) { + this.rmPrjTreeData(data[i].children, code); + } + }*/ + + let i = 0; + while (i < data.length) { + let d = data[i]; + if (!d.children) { + i++; + continue; + } + if (!d.children.length) { + data.splice(i, 1); + continue; + } + + let j = 0; + while (j < d.children.length) { + let e = d.children[j]; + if (e.type == 1 && e.isProject && e.enName == code) { + d.children.splice(j, 1); + if (e.children && e.children.length) d.children = d.children.concat(e.children); + continue; + } + + j++; + } + + i++; + } + + for (let i = 0, c = data.length; i < c; i++) { + if (data[i].children && data[i].children.length) { + this.rmPrjTreeData(data[i].children, code); + } } }, // 娣诲姞WFS鍥惧眰 * - addWFSLayers (res) { + addWFSLayers(res) { let url = res.resource + "?service=WFS&version=1.0.0&request=GetFeature&typeName=" + @@ -877,6 +957,7 @@ .tree-container /deep/ .el-tree > .el-tree-node:after { border-top: none; } + .tree-container /deep/ .el-tree > .el-tree-node:before { border-left: none; } @@ -923,14 +1004,17 @@ .tree-container { margin: 10px; } + .tree-container /deep/ .el-tree .el-tree-node { position: relative; } + .tree-container /deep/ .el-tree-node .el-tree-node__content { height: 34px; padding-left: 0px !important; border: none; } + .tree-container /deep/ .el-tree-node .el-tree-node__content::before { border-left: 1px dashed #ccc; height: 100%; @@ -940,6 +1024,7 @@ margin-top: 0px; z-index: 8; } + .tree-container /deep/ .el-tree-node @@ -994,9 +1079,11 @@ /deep/.el-card__body { padding: 10px !important; + > div { padding-bottom: 10px; border-bottom: 1px solid #ccc; + &:hover { color: #409eff; } @@ -1014,10 +1101,12 @@ .text { font-size: 14px; } + .el-tree { width: 100%; margin-top: 10px; } + .search { width: 100%; } -- Gitblit v1.9.3