From c42e12bcc0877678cf09438b7a6bfb9ccd7342fa Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期五, 24 三月 2023 19:06:08 +0800
Subject: [PATCH] 转孔柱状图添加图例,官网一张图修改

---
 src/components/Screen/ProjectTree.vue |  429 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 362 insertions(+), 67 deletions(-)

diff --git a/src/components/Screen/ProjectTree.vue b/src/components/Screen/ProjectTree.vue
index e237329..05e9259 100644
--- a/src/components/Screen/ProjectTree.vue
+++ b/src/components/Screen/ProjectTree.vue
@@ -10,6 +10,7 @@
       suffix-icon="el-icon-search"
       v-model="filterText"
       size="mini"
+      :filter-node-method="filterNode"
     >
     </el-input>
     <div class="tree-container">
@@ -23,6 +24,7 @@
         class="el-tree"
         @check="handleCheckChange"
         :filter-node-method="filterNode"
+        @node-click="handleLeftclick"
       >
         <div
           style="display: flex"
@@ -77,7 +79,7 @@
 <script>
 import { right_menu, right_list, image_layer } from "@/assets/js/index.js"
 
-import { perms_selectLayers } from "@/api/api.js"
+import { perms_selectLayers, comprehensive_selectPubById } from "@/api/api.js"
 
 export default {
   data() {
@@ -85,7 +87,7 @@
       treeData: [],
       defaultProps: {
         children: "children",
-        label: "label",
+        label: "cnName",
       },
       typeIndex: null,
       leftMenuOpen: false,
@@ -100,6 +102,7 @@
       isMenuLayer: true,
       openEcharts: false,
       filterText: "",
+      mptLayer: [],
     }
   },
 
@@ -119,6 +122,12 @@
     },
   },
   methods: {
+    // 鏌ヨ
+    filterNode(value, data) {
+
+      if (!value) return true;
+      return data.cnName.indexOf(value) !== -1;
+    },
     setShowCheckedLayer() {
       var value = this.$refs.tree.getCheckedNodes();
       var std = [];
@@ -136,79 +145,365 @@
       if (data.code != 200) {
         return this.$message.error("鍥惧眰鍒楄〃鏌ヨ澶辫触")
       }
-      var std = []
-      var layer_list = []
-      var layer_groups = []
-      var layerData = [];
-      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_list.push(layer_entity)
-            if (data.result[i].isShow == 1) {
-              std.push(data.result[i].id)
-              layerData.push(data.result[i])
-              // this.setAddImageLayer(layer_entity)
-            }
-          }
-        }
-      }
-      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])
-          }
-        }
-      }
-      this.treeData = layer_groups
+      var std = data.result;
+      var that = this;
+      var checkKey = [];
 
-      this.$refs.tree.setCheckedKeys(std)
-      this.setShowImageLayer(layerData)
+      var val = std.filter((str) => {
+        if (str.type == 1) {
+          return str;
+        }
+        if (str.url != null && str.type == 2) {
+          if (str.isShow == 1) {
+            checkKey.push(str.id);
+          }
+          return str;
+        }
+      });
+      var value = std.filter((str) => {
+        if (str.url != null && str.type == 2 && str.isShow == 1) {
+          return str;
+        }
+      })
+
+
+
+      this.$refs.tree.setCheckedKeys(checkKey)
+      var res = this.setTreeData(val);
+
+      this.treeData = res
+
+
+      this.setShowImageLayer(value)
+    },
+    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; // 杩斿洖涓�绾ц彍鍗�
+      });
     },
     handleCheckChange(data, checked, indeterminate) {
-      // if (data.children != null) return
-      // var std = []
-      // for (var i = 0; i < Viewer.imageryLayers._layers.length; i++) {
-      //   var val_id = Viewer.imageryLayers._layers[i].imageryProvider.name
-      //   if (val_id == data.label) {
-      //     std.push(data.label)
-      //     const img_layer = Viewer.imageryLayers._layers[i]
-      //     img_layer.show = checked
+
+
+
+      // var wmsLayer = [];
+      // var tilesetLayer = [];
+      // var tmsLayer = [];
+      // var mptLayer = [];
+      // for (var i in data) {
+      //   if (data[i].type == 2) {
+      //     switch (data[i].serveType) {
+      //       case "WMS":
+      //         wmsLayer.push(data[i])
+      //         break;
+      //       case "Tileset":
+      //         tilesetLayer.push(data[i])
+      //         break;
+      //       case "TMS":
+      //         tmsLayer.push(data[i])
+      //         break;
+      //       case "Mpt":
+      //         mptLayer.push(data[i])
+      //         break;
+      //     }
       //   }
       // }
-      // if (std.length == 0 && checked == true) {
-      //   this.setAddImageLayer(data)
-      // }
-      this.setClearWmsLayer()
-      var value = this.$refs.tree.getCheckedNodes();
-      var url = [];
-      for (var i in value) {
-        if (value[i].resource && value[i].type == 2) {
 
-          url.push(value[i].resource)
+
+
+      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 'Tileset':
+              listTileset.push(this.childOption[i])
+              break;
+            case 'Mpt':
+              listMpt.push(this.childOption[i])
+              break;
+            case 'TMS':
+              listTMS.push(this.childOption[i])
+              break;
+
+          }
+        }
+        this.setShowWMSLayer(listWMS);
+        this.setShowTilesetLayer(listTileset);
+        this.setShowMptLayer(listMpt);
+        this.setShowTMSLayer(listTMS);
+      } else if (data.type == 2) {
+        if (data.serveType == "WMS") {
+          this.setShowWMSLayer([data]);
+        } else if (data.serveType == "Tileset") {
+          this.setShowTilesetLayer([data]);
+        } else if (data.serveType == "Mpt") {
+          this.setShowMptLayer([data]);
+        } else if (data.serveType == "TMS") {
+          this.setShowTMSLayer([data]);
+        }
+      }
+    },
+    handleLeftclick(data, node) {
+
+      if (node.checked == true) {
+        if (data.serveType == 'Tileset') {
+          for (var i in Viewer.scene.primitives._primitives) {
+            if (
+              Viewer.scene.primitives._primitives[i].id == data.cnName
+            ) {
+              Viewer.flyTo(Viewer.scene.primitives._primitives[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)
+      }
+    },
+    setAddTMSLayers(res) {
+      var url = res.url;
+      if (res.url.indexOf("{host}") != -1) {
+        url = res.url.replace("{host}", iisHost);
+      }
+
+      if (res.pubid && res.pubid > 0) {
+        this.setQueryPubid(res);
+      } else {
+        var layer = Viewer.imageryLayers.addImageryProvider(
+          new Cesium.UrlTemplateImageryProvider({
+            url: url,
+            maximumLevel: 18,
+          })
+        );
+        layer.name = res.cnName;
+        setTimeout(() => {
+          this.getWMSLayer();
+        }, 100);
+      }
+    },
+    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),
+          });
+        }
+        setTimeout(() => {
+          this.getWMSLayer();
+        }, 100);
+      }
+    },
+    setShowTMSLayer(result) {
+      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.setAddTMSLayers(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]
+              );
+            }
+          }
+        }
+      }
+    },
+    setShowMptLayer(result) {
+      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.setAddMPTLayers(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)
+            }
+          }
+        }
+      }
+    },
+    setAddMPTLayers(res) {
+      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.getWMSLayer();
+      }, 100);
+    },
+    getWMSLayer() {
+      var value = this.$refs.tree.getCheckedNodes();
+      var std = [];
+      for (var i in value) {
+        if (value[i].type == 2 && value[i].serveType == "WMS") {
+          std.push(value[i])
+        }
+      }
+      this.setShowWMSLayer(std);
+    },
+
+
+
+
+
+
+    setShowTilesetLayer(result) {
+      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.setAddTilesetLayers(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])
+            }
+          }
+        }
+      }
+
+    },
+    setAddTilesetLayers(res) {
+      var url;
+      if (res.url.indexOf("{host}") != -1) {
+        url = res.url.replace("{host}", iisHost);
+      } else {
+        url = modelUrl + "/" + res.url
+      }
+      var tileset = Viewer.scene.primitives.add(
+        new Cesium.Cesium3DTileset({
+          name: res.cnName,
+          url: url, //192.168.20.106,to4
+          maximumScreenSpaceError: 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16
+          maximumMemoryUsage: 768, // 鏈�澶у唴瀛橈細512
+          dynamicScreenSpaceError: true, // 鍑忓皯绂荤浉鏈鸿緝杩滅殑灞忓箷绌洪棿閿欒锛歠alse
+          skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false
+        })
+      );
+      tileset.readyPromise.then((tileset) => {
+        tileset.id = res.cnName;
+        tileset.layerId = res.id;
+        this.getTilesetArgs(tileset, res);
+      });
+    },
+    async getTilesetArgs(tileset, res) {
+      if (res.pubid > 0) {
+        const data = await comprehensive_selectPubById({ id: res.pubid })
+        if (data.code != 200) {
+        } else {
+          this.reload(tileset, data.result.json)
+        }
+      } else {
+        this.tileSet(tileset, parseFloat(res.elev))
+      }
+    },
+    reload(tileset, res) {
+      var vm = JSON.parse(res)
+      var pos = Cesium.Cartesian3.fromDegrees(vm.lon, vm.lat, vm.height);
+      var converter = Cesium.Transforms.eastNorthUpToFixedFrame;
+      var hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(vm.yaw), 0, 0);
+      var matrix = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr, Cesium.Ellipsoid.WGS84, converter);
+      tileset._root.transform = matrix;
+      Viewer.flyTo(tileset);
+    },
+    tileSet(tileset, height) {
+      //3dtile妯″瀷鐨勮竟鐣岀悆浣�
+      var boundingSphere = tileset.boundingSphere;
+      //杩崱灏旂┖闂寸洿瑙掑潗鏍�=>鍦扮悊鍧愭爣锛堝姬搴﹀埗锛�
+      var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center);
+      //鍦扮悊鍧愭爣锛堝姬搴﹀埗锛�=>杩崱灏旂┖闂寸洿瑙掑潗鏍�
+      var Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height);
+      var Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height);
+      //鑾峰緱鍦伴潰鍜宱ffset鐨勮浆鎹�
+      var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3());
+      //淇敼妯″瀷鐭╅樀
+      tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
+      Viewer.flyTo(tileset);
+    },
+
+
+
+
+    setShowWMSLayer(res) {
+      var url = [];
+      this.setClearWmsLayer();
+      for (var i in res) {
+        if (res[i].url) {
+          url.push(res[i].url)
         }
       }
       url = url.reverse();
       this.setAddImageLayer(url)
     },
-
     setShowImageLayer(res) {
-      this.setClearWmsLayer()
+
       var url = [];
       for (var i in res) {
         url.push(res[i].enName)
@@ -260,10 +555,10 @@
         Viewer.imageryLayers._layers[3].show = true
       }
     },
-    filterNode(value, data) {
-      if (!value) return true
-      return data.label.indexOf(value) !== -1
-    },
+    // filterNode(value, data) {
+    //   if (!value) return true
+    //   return data.label.indexOf(value) !== -1
+    // },
   },
 }
 </script>

--
Gitblit v1.9.3