From 1496203eb8194c26ff9350e4673927565df41705 Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期四, 23 二月 2023 17:56:56 +0800
Subject: [PATCH] 综合展示图层管理添加3dTilset,资料馆下下调整,综合展示分析功能优化

---
 src/views/Tools/LayerTree.vue |  216 +++++++++++++++++++++++++++++------------------------
 1 files changed, 117 insertions(+), 99 deletions(-)

diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue
index 4d68611..5a06f1b 100644
--- a/src/views/Tools/LayerTree.vue
+++ b/src/views/Tools/LayerTree.vue
@@ -10,8 +10,8 @@
       ref="tree"
       :data="treeData"
       node-key="id"
-      default-expand-all
       show-checkbox
+      :props="defaultProps"
       @node-click="handleLeftclick"
       @node-contextmenu="rightClick"
       @check-change="handleCheckChange"
@@ -59,7 +59,7 @@
       <div class="edit" @click="editNode()">
         <i class="el-icon-edit"></i>&nbsp;&nbsp;閲嶅懡鍚�
       </div>
-      <div class="edit" @click="showLayerAttribute()">
+      <div class="edit" @click="showLayerAttribute()" v-show="!firstLevel">
         <i class="el-icon-tickets"></i>&nbsp;&nbsp;灞炴��
       </div>
       <!-- <div
@@ -89,7 +89,7 @@
           <el-select
             style="width: 100%"
             :popper-append-to-body="false"
-            v-model="addFormServer.layerType"
+            v-model="addFormServer.serveType"
             placeholder="璇烽�夋嫨"
           >
             <el-option
@@ -102,14 +102,14 @@
           </el-select>
         </el-form-item>
         <el-form-item label="鍥惧眰鍚嶇О">
-          <el-input v-model="addFormServer.label"></el-input>
+          <el-input v-model="addFormServer.cnName"></el-input>
         </el-form-item>
         <el-form-item label="鏈嶅姟鍚嶇О">
-          <el-input v-model="addFormServer.resource"></el-input>
+          <el-input v-model="addFormServer.url"></el-input>
         </el-form-item>
 
         <el-form-item label="鏈嶅姟鍦板潃">
-          <el-input v-model="addFormServer.url"></el-input>
+          <el-input v-model="addFormServer.resource"></el-input>
         </el-form-item>
         <el-form-item label="閫忔槑搴�">
           <el-slider v-model="addFormServer.opacity"></el-slider>
@@ -155,7 +155,7 @@
       dialogVisible: false,
       addFormServer: {
         opacity: 100,
-        layerType: "WMS",
+        serveType: "WMS",
         type: 2,
       },
       layerId: [
@@ -167,7 +167,7 @@
       treeData: [],
       defaultProps: {
         children: "children",
-        label: "label",
+        label: "cnName",
       },
       options: [
         {
@@ -215,10 +215,10 @@
     rightClick(event, object, Node, element) {
       this.currentData = object;
       this.currentNode = Node;
-      if (Node.level === 1) {
-        this.firstLevel = true;
-      } else {
+      if (Node.level === 3) {
         this.firstLevel = false;
+      } else {
+        this.firstLevel = true;
       }
       this.menuVisible = true;
 
@@ -270,7 +270,7 @@
       this.dialogVisible = false;
       this.addFormServer = {
         opacity: 100,
-        layerType: "WMS",
+        serveType: "WMS",
         type: 2,
       };
     },
@@ -287,22 +287,33 @@
     // 鍒犻櫎鑺傜偣
     deleteNode() {
       this.foo();
-      var label = this.currentNode.data.label;
-      if (this.currentNode.data.layerType == "WMS") {
-        for (var i in window.Viewer.imageryLayers_layers) {
-          if (window.Viewer.imageryLayers_layers[i].name === label) {
+      var label = this.currentNode.data.cnName;
+      if (this.currentNode.data.serveType == "WMS") {
+        for (var i in window.Viewer.imageryLayers._layers) {
+          if (
+            window.Viewer.imageryLayers._layers[i].imageryProvider.name ===
+            label
+          ) {
             window.Viewer.imageryLayers.remove(
-              window.Viewer.imageryLayers_layers[i]
+              window.Viewer.imageryLayers._layers[i]
             );
           }
         }
-      } else if (this.currentNode.data.layerType == "WFS") {
+      } else if (this.currentNode.data.serveType == "WFS") {
         for (var i in window.Viewer.dataSources._dataSources) {
           if (window.Viewer.dataSources._dataSources[i].name == label) {
             window.Viewer.dataSources.remove(
               window.Viewer.dataSources._dataSources[i]
             );
-            std.push(data.label);
+          }
+        }
+      } else if (this.currentNode.data.serveType == "Tileset") {
+        for (var i in Viewer.scene.primitives._primitives) {
+          // Viewer.scene.primitives._primitives[i].show = checked;
+          if (Viewer.scene.primitives._primitives[i].id == label) {
+            Viewer.scene.primitives.remove(
+              Viewer.scene.primitives._primitives[i]
+            );
           }
         }
       }
@@ -412,20 +423,13 @@
     },
     handleCheckChange(data, checked, indeterminate) {
       if (data.type != 2) return;
-      //鍋氬垽鏂槸鍚︽槸1锛�100涓囪鏀跨晫闈�
-      if (data.layer == window.XZOutlie && checked) {
-        window.ImageLayer3.show = false;
-      } else {
-        window.ImageLayer3.show = true;
-      }
-
       var std = [];
-      if (data.layerType == "WMS") {
+      if (data.serveType == "WMS") {
         var layers_ol = window.map.getAllLayers();
         for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) {
           var val_id =
             window.Viewer.imageryLayers._layers[i].imageryProvider.name;
-          if (val_id == data.label) {
+          if (val_id == data.cnName) {
             std.push(data.label);
 
             const img_layer = window.Viewer.imageryLayers._layers[i];
@@ -435,18 +439,30 @@
 
         for (var i in layers_ol) {
           var layerOl = layers_ol[i];
-          if (layerOl.values_.name == data.label) {
+          if (layerOl.values_.name == data.cnName) {
             layerOl.setVisible(checked); //鏄剧ず鍥惧眰
           }
         }
-      } else if (data.layerType == "WFS") {
+      } else 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.label) {
+            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 {
+          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(res.id);
+              Viewer.flyTo(Viewer.scene.primitives._primitives[i]);
             }
           }
         }
@@ -463,19 +479,17 @@
       }
     },
     setAddLayers(res) {
-      if (res.layerType == "WMS") {
-        var url = geoServerURl;
-        if (res.url != null && res.url != undefined) {
-          url = res.url;
+      if (res.serveType == "WMS") {
+        // var resource = geoServerURl;
+        var resource = "http://192.168.20.205:8088/geoserver/LF/wms";
+
+        if (res.resource != null && res.resource != undefined) {
+          resource = res.resource;
         }
-
-        //var width = $("#mapdiv").width();
-        //var height = $("#mapdiv").height();
-
         var imageryLayers = window.Viewer.scene.imageryLayers;
         let layerWMS = new Cesium.WebMapServiceImageryProvider({
-          url: url,
-          layers: res.resource,
+          url: resource,
+          layers: res.url,
           parameters: {
             transparent: true,
             format: "image/png",
@@ -485,21 +499,21 @@
           tileWidth: 512,
           tileHeight: 512,
         });
-        layerWMS.name = res.label;
+        layerWMS.name = res.cnName;
         //閫忔槑搴�
         var tdtAnnoLayer = imageryLayers.addImageryProvider(layerWMS);
         if (res.opacity) {
           tdtAnnoLayer.alpha = parseInt(res.opacity) / 100;
         }
         var layer2 = new Image({
-          name: res.label,
+          name: res.cnName,
           source: new ImageWMS({
             crossOrigin: "anonymous",
-            url: url,
+            url: resource,
             params: {
               FORMAT: "image/png",
               VERSION: "1.1.1",
-              LAYERS: res.resource,
+              LAYERS: res.url,
             },
           }),
         });
@@ -507,11 +521,11 @@
           layer2.setOpacity(parseInt(res.opacity) / 100);
         }
         window.map.addLayer(layer2);
-      } else if (res.layerType == "WFS") {
+      } else if (res.serveType == "WFS") {
         var url =
-          res.url +
-          "?service=WFS&version=1.0.0&request=GetFeature&typeName=" +
           res.resource +
+          "?service=WFS&version=1.0.0&request=GetFeature&typeName=" +
+          res.url +
           "&outputFormat=application%2Fjson";
         $.ajax({
           url: url,
@@ -526,7 +540,7 @@
               clampToGround: true, //鏄惁璐村湴
             });
             datasource.then((data) => {
-              data.name = res.label;
+              data.name = res.cnName;
               window.Viewer.dataSources.add(data);
             });
           },
@@ -536,71 +550,74 @@
         });
 
         var vectorLayer = new VectorLayer({
-          name: res.label,
+          name: res.cnName,
           source: new VectorSource({
             url: url,
             format: new GeoJSON(),
           }),
         });
         window.map.addLayer(vectorLayer);
+      } else if (res.serveType == "Tileset") {
+        var tileset = Viewer.scene.primitives.add(
+          new Cesium.Cesium3DTileset({
+            name: res.cnName,
+            url: modelUrl + "/" + res.url, //192.168.20.106,to4
+            maximumScreenSpaceError: 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16
+            maximumMemoryUsage: 768, // 鏈�澶у唴瀛橈細512
+            dynamicScreenSpaceError: true, // 鍑忓皯绂荤浉鏈鸿緝杩滅殑灞忓箷绌洪棿閿欒锛歠alse
+            skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false
+          })
+        );
+
+        tileset.readyPromise.then(function (tileset) {
+          tileset.id = res.cnName;
+          Viewer.flyTo(tileset);
+        });
       }
+    },
+    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 锛� 閭d箞 a.c=b.c=c=1 锛涘悓鐞嗭紝鍚庣画浠� c.d=2 ,閭d箞 a.c.d 涔熸槸=2锛�
+        // 鐢辨寰幆澶氭鍚庯紝灏辫兘褰㈡垚鐩稿簲鐨勬爲褰㈡暟鎹粨鏋�
+        return father.pid == 0; // 杩斿洖涓�绾ц彍鍗�
+      });
     },
     async layersStart() {
       const data = await perms_selectLayers();
       if (data.code != 200) {
         return this.$message.error("鍥惧眰鍒楄〃鏌ヨ澶辫触");
       }
-
-      this.newData = data.result;
-      this.oriData = data.result;
-      var std = [];
-      var layer_list = [];
-      var layer_groups = [];
-      for (var i in data.result) {
-        if (data.result[i].type == 1) {
-          layer_groups.push({
-            id: data.result[i].id,
-            label: data.result[i].cnName,
-            type: data.result[i].type,
-            isEdit: false,
-            children: [],
-          });
-        } else if (data.result[i].type == 2) {
-          if (data.result[i].url != null) {
-            var layer_entity = {
-              id: data.result[i].id,
-              pid: data.result[i].pid,
-              label: data.result[i].cnName,
-              resource: data.result[i].url,
-              type: data.result[i].type,
-              isEdit: false,
-              layer: data.result[i].enName,
-              layerType: data.result[i].serveType,
-            };
-            layer_list.push(layer_entity);
-
-            if (data.result[i].isShow == 1) {
-              std.push(data.result[i].id);
-              this.setAddLayers(layer_entity);
-            }
-          }
+      var std = data.result;
+      var that = this;
+      var checkKey = [];
+      var val = std.filter((str) => {
+        if (str.type == 1) {
+          return str;
         }
-      }
-
-      for (var i in layer_list) {
-        for (var j in layer_groups) {
-          if (layer_list[i].pid === layer_groups[j].id) {
-            layer_groups[j].children.push(layer_list[i]);
+        if (str.url != null && str.type == 2) {
+          if (str.isShow == 1) {
+            checkKey.push(str.id);
+            that.setAddLayers(str);
           }
-        }
-      }
-      layer_groups = layer_groups.filter((res) => {
-        if (res.children && res.children.length != 0) {
-          return res;
+          return str;
         }
       });
-      this.treeData = layer_groups;
-      this.$refs.tree.setCheckedKeys(std);
+
+      var res = this.setTreeData(val);
+
+      for (var i in res) {
+        res[i].children = res[i].children.filter((val) => {
+          if (val.children != null) {
+            return val;
+          }
+        });
+      }
+      this.treeData = res;
+      this.$refs.tree.setCheckedKeys(checkKey);
     },
     async treelayersStart() {
       const data = await perms_selectLayers();
@@ -700,7 +717,7 @@
 }
 
 .tree-container /deep/ .el-tree-node__expand-icon {
-  margin-left: 15px;
+  margin-left: 1px;
   padding: 0px;
 }
 
@@ -710,7 +727,7 @@
 
 .tree-container /deep/ .el-tree-node {
   position: relative;
-  padding-left: 16px;
+  padding-left: 10px;
   // text-indent: 16px;
 }
 
@@ -838,6 +855,7 @@
     }
   }
 }
+
 /*.lalala {*/
 /*position: relative;*/
 /*}*/

--
Gitblit v1.9.3