From 7a827ef306c503e788220f087193d50b8afd315b Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期一, 22 五月 2023 09:02:07 +0800
Subject: [PATCH] 图层管理修改

---
 src/views/Tools/LayerTree.vue |  173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 163 insertions(+), 10 deletions(-)

diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue
index 5006a68..5730204 100644
--- a/src/views/Tools/LayerTree.vue
+++ b/src/views/Tools/LayerTree.vue
@@ -1183,9 +1183,22 @@
     },
 
     async setproChange(res) {
-
-      this.$store.state.pigCode = res;
       if (res) {
+        this.setCheeckedLayer = this.$refs.tree.getCheckedKeys();
+
+        this.$store.state.pigCode = res;
+        var st_code = this.optionts.filter(rs => {
+          if (rs.code == res) {
+            return rs
+          }
+        })
+
+        var val = this.$store.state.oldTree.filter(rs => {
+          if (rs.enName == st_code[0].code) {
+            return rs
+          }
+        })
+        this.removeAllLayer();
         var obj = {
           dirid: res,
           pageIndex: 1,
@@ -1197,21 +1210,161 @@
           this.$message.error("鍒楄〃鑾峰彇澶辫触");
           return;
         }
+
         if (data.result[0]) {
           var geom = data.result[0].geom
-          var wkt = this.$wkt.parse(geom)
-          Viewer.camera.flyTo({
-            destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[0].toFixed(6), wkt.coordinates[1].toFixed(6), 5000),
-          });
+          if (geom) {
+            var wkt = this.$wkt.parse(geom)
+            Viewer.camera.flyTo({
+              destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[0].toFixed(6), wkt.coordinates[1].toFixed(6), 5000),
+            });
+          }
 
         }
-        this.setChangeProLayer();
-      } else {
+        this.cannelTerrainLayer();
+        this.setTerrainMptLayer();
+        //娓呯┖鍥惧眰鏍戦�変腑鐘舵��
+        this.$refs.tree.setCheckedKeys([]);
 
-        this.$store.state.pigCode = null
-        this.setChangeWMS();
+
+        if (val.length > 0) {
+
+          if (val[0].type == 1 && val[0].isProject == 1) {//椤圭洰鍒嗙被
+
+            var std_check = [];
+            for (var i in val) {
+              var std_val = this.getNewTree([this.$refs.tree.getNode(val[i].id).data], [])
+              for (var j in std_val) {
+                std_check.push(std_val[j])
+              }
+            }
+
+
+            var value = this.$store.state.isProjectLayer;
+            for (var i in value) {
+
+              std_check.push(value[i])
+            }
+            this.setProjectLayer(std_check);
+          } else {
+            this.setChangeProLayer();
+          }
+        } else {
+          this.setChangeProLayer();
+        }
+      } else {
+        this.removeAllLayer();
+        this.$store.state.pigCode = null;
+        this.$refs.tree.setCheckedKeys(this.setCheeckedLayer);
+        var std = [];
+        for (var i in this.setCheeckedLayer) {
+          std.push(this.$refs.tree.getNode(this.setCheeckedLayer[i]).data)
+        }
+        this.setProjectLayer(std);
       }
     },
+    removeAllLayer() {
+      for (var j in Viewer.scene.primitives._primitives) {
+        Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j])
+      }
+      for (var i in window.Viewer.dataSources._dataSources) {
+        window.Viewer.dataSources.remove(
+          window.Viewer.dataSources._dataSources[i]
+        );
+      }
+      for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) {
+        var val_id = window.Viewer.imageryLayers._layers[i].id;
+        if (val_id == 'TMS') {
+          window.Viewer.imageryLayers.remove(
+            window.Viewer.imageryLayers._layers[i]
+          );
+        }
+      }
+      for (var i in this.mptLayer) {
+        this.mptLayer[i].deleteObject();
+        this.mptLayer.splice(i, 1)
+      }
+      this.mptLayer = [];
+    },
+    setProjectLayer(res) {
+      var layerid = [];
+      for (var i in res) {
+        layerid.push(res[i].id)
+      }
+      this.$refs.tree.setCheckedKeys(layerid);
+      // var value = this.$refs.tree.getCheckedNodes();
+      // this.$bus.$emit("showMenuLayer", value);
+
+      var listWMS = [];
+      var listWFS = [];
+      var listTileset = [];
+      var listTMS = [];
+      var listMpt = [];
+      for (var 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;
+
+          }
+        }
+      }
+      // 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
+    },
+    cannelTerrainLayer() {
+      //娓呯┖鍦板舰
+      if (window.terrainMptLayer) {
+        window.terrainMptLayer.deleteObject();
+        window.terrainMptLayer = null;
+      }
+      if (window.terrainDemLayer) {
+        Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider();
+        window.terrainDemLayer = null;
+      }
+    },
+    setTerrainMptLayer() {
+      // //榛樿鍦板舰MPT
+      // var option = {
+      //   url: window.sceneConfig.SGUrl,
+      //   layerName: window.sceneConfig.mptName,
+      //   requestVertexNormals: true,
+      // };
+      // window.terrainMptLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, "");
+      window.terrainDemLayer = new Cesium.CesiumTerrainProvider({
+        // url: LFData + '/3d/terrain/dem20230321'
+        url: demLayer
+      });
+      Viewer.terrainProvider = window.terrainDemLayer
+    },
     setChangeProLayer() {
       var value = this.$store.state.isProjectLayer;
       if (value.length != 0) {

--
Gitblit v1.9.3