From f0cf67e3f93bef082f2ca02139a7fe647b33e467 Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期三, 15 三月 2023 18:52:02 +0800
Subject: [PATCH] 优化图层管理的折叠会折叠其它的面板;优化柱状图属性界面;优化WMS图层加载效果;优化资料馆上传的附件,前端显示不出来效果;综合展示拾取功能

---
 src/views/Synthesis/LeftMenu.vue |  260 +++++++++++++++++++++++++++++----------------------
 1 files changed, 148 insertions(+), 112 deletions(-)

diff --git a/src/views/Synthesis/LeftMenu.vue b/src/views/Synthesis/LeftMenu.vue
index ca3e32f..be8092f 100644
--- a/src/views/Synthesis/LeftMenu.vue
+++ b/src/views/Synthesis/LeftMenu.vue
@@ -475,12 +475,7 @@
             name: "绌洪棿鏌ヨ",
             css: "twoMenu_imge52",
           },
-          {
-            id: "e3",
-            label: "synthesis.pickup",
-            name: "鎷惧彇",
-            css: "twoMenu_imge52",
-          },
+
         ],
         [
           {
@@ -1416,7 +1411,7 @@
             Viewer.screenSpaceEventHandler.setInputAction(function (event) {
               let p = sgworld.Navigate.getMouseDegrees(event);
               console.log(p);
-              if (that.showPickUp){
+              if (that.showPickUp) {
                 that.getPickUpData(p);
               }
             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
@@ -1837,7 +1832,7 @@
         if (!m_box) {
           m_box = Viewer.entities.add({
             id: 'ClopBox',
-            modelMatrixPrimitive:modelMatrixPrimitive,
+            modelMatrixPrimitive: modelMatrixPrimitive,
             position: boundingSphere.center,
             box: {
               dimensions: new Cesium.Cartesian3(boundingSphere.radius * 1.2, boundingSphere.radius * 1.2, 40),
@@ -1922,7 +1917,7 @@
         return function () {
           var num_x = window.localStorage.getItem('slider_x') / 100000;
           var num_y = window.localStorage.getItem('slider_y') / 100000;
-          var num_z = window.localStorage.getItem('slider_z')/1.5;//璇诲彇婊戝姩鏉″��
+          var num_z = window.localStorage.getItem('slider_z') / 1.5;//璇诲彇婊戝姩鏉″��
           var origin_degree = cartesian3ToDegrees(origin);
           var target_degree_x = [origin_degree[0] + num_x, origin_degree[1], +origin_degree[2]];
           var target_degree_y = [origin_degree[0], origin_degree[1] + num_y, +origin_degree[2]];
@@ -1970,7 +1965,7 @@
           }
           else if (type == 'top') {
             if (num_z < 0) {
-              plane.distance =  m_dis_z;
+              plane.distance = m_dis_z;
               // console.log('num_z=========',num_z)
               // console.log('m_dis_z=========',m_dis_z)
               // plane.distance = distance - m_dis_z;
@@ -1986,9 +1981,9 @@
       }
 
       function createPlanePos(origin, x, y, z) {
-        var clipbox=Viewer.entities.getById('ClopBox');
+        var clipbox = Viewer.entities.getById('ClopBox');
         if (clipbox) {
-          clipbox.position=new Cesium.CallbackProperty(function () {
+          clipbox.position = new Cesium.CallbackProperty(function () {
             return Cesium.Cartesian3.fromDegrees(origin[0] + x, origin[1] + y, +origin[2] + z);//瀹炴椂杩斿洖褰撳墠鐩掑瓙鐨勪綅缃�
           }, false);
         }
@@ -2232,6 +2227,7 @@
       if (data.code != 200) {
         return this.$message.error("鍥惧眰鍒楄〃鏌ヨ澶辫触");
       }
+
       var std = data.result;
       var that = this;
       var checkKey = [];
@@ -2243,17 +2239,21 @@
         if (str.url != null && str.type == 2) {
           if (str.isShow == 1) {
             checkKey.push(str.id);
-            that.setAddLayers(str);
-            if (str.serveType == "WMS" && str.url){
-              checkedLayers.push(str);
-            }
           }
           return str;
         }
       });
-      //瀛樺偍閫変腑鍥惧眰
-      sessionStorage.setItem("checkedLayers",JSON.stringify(checkedLayers));
+      var value = std.filter((str) => {
+        if (str.url != null && str.type == 2 && str.isShow == 1) {
+
+          return str;
+        }
+      })
+
+      this.setAddLayers(value);
       var res = this.setTreeData(val);
+      //瀛樺偍閫変腑鍥惧眰
+      // sessionStorage.setItem("checkedLayers", JSON.stringify(checkedLayers));
 
       for (var i in res) {
         res[i].children = res[i].children.filter((val) => {
@@ -2262,8 +2262,9 @@
           }
         });
       }
+
       this.$store.state.treeData = res;
-      // this.$refs.tree.setCheckedKeys(checkKey);
+
       this.$store.state.checkedKeys = checkKey;
     },
     setTreeData(source) {
@@ -2278,101 +2279,105 @@
       });
     },
     setAddLayers(res) {
-      if (res.serveType == "WMS") {
-        var resource = geoServerURl;
-        if (res.resource != null && res.resource != undefined) {
-          resource = res.resource;
+      var std = [[]];
+      for (var i in res) {
+        switch (res[i].serveType) {
+          case "WMS":
+            std[0].push(res[i])
+            break;
         }
-        var imageryLayers = window.Viewer.scene.imageryLayers;
-        let layerWMS = new Cesium.WebMapServiceImageryProvider({
-          url: resource,
-          layers: res.url,
-          parameters: {
-            transparent: true,
-            format: "image/png",
-            srs: "EPSG:4490",
-            styles: "",
-          },
-          tileWidth: 512,
-          tileHeight: 512,
-        });
-        layerWMS.name = res.cnName;
-        //閫忔槑搴�
-        var tdtAnnoLayer = imageryLayers.addImageryProvider(layerWMS);
-        if (res.opacity) {
-          tdtAnnoLayer.alpha = parseInt(res.opacity) / 100;
-        }
-        var layer2 = new Image({
-          name: res.cnName,
-          source: new ImageWMS({
-            crossOrigin: "anonymous",
-            url: resource,
-            params: {
-              FORMAT: "image/png",
-              VERSION: "1.1.1",
-              LAYERS: res.url,
-            },
-          }),
-        });
-        if (res.opacity) {
-          layer2.setOpacity(parseInt(res.opacity) / 100);
-        }
-        window.map.addLayer(layer2);
-      } else if (res.serveType == "WFS") {
-        var url =
-          res.resource +
-          "?service=WFS&version=1.0.0&request=GetFeature&typeName=" +
-          res.url +
-          "&outputFormat=application%2Fjson";
-        $.ajax({
-          url: url,
-          cache: false,
-          async: true,
-          success: function (data) {
-            var datasource = Cesium.GeoJsonDataSource.load(data, {
-              stroke: Cesium.Color.YELLOW,
-              fill: Cesium.Color.YELLOW.withAlpha(0.1),
-              alpha: 0.1,
-              strokeWidth: 8,
-              clampToGround: true, //鏄惁璐村湴
-            });
-            datasource.then((data) => {
-              data.name = res.cnName;
-              window.Viewer.dataSources.add(data);
-            });
-          },
-          error: function (data) {
-            console.log("error");
-          },
-        });
-
-        var vectorLayer = new VectorLayer({
-          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;
-          tileset.layerId = res.id;
-          Viewer.flyTo(tileset);
-        });
+      }
+      if (std[0].length != 0) {
+        this.setAddWmsLayer(std[0])
       }
     },
+    setAddWmsLayer(res) {
+
+      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") {
+          window.Viewer.imageryLayers.remove(
+            window.Viewer.imageryLayers._layers[i]
+          );
+        }
+      }
+      var layers_ol = window.map.getAllLayers();
+      for (var i in layers_ol) {
+        var layerOl = layers_ol[i];
+        if (layerOl.values_.name == "Wms_Layer") {
+          window.map.removeLayer(layers_ol[i]); //鏄剧ず鍥惧眰
+        }
+      }
+      var url = [];
+      for (var i in res) {
+        url.push(res[i].url)
+      }
+      url = url.reverse();
+      var that = this;
+      var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat("html", null, function (html) {
+        that.getFeatureInfo(html)
+      });
+      window.layerWMS = new Cesium.WebMapServiceImageryProvider({
+        url: geoServerURl,
+        layers: url.toString(),
+        getFeatureInfoParameters: { info_format: 'text/html' },
+        enablePickFeatures: true,
+        getFeatureInfoFormats: [getFeatureInfoFormat],
+        parameters: {
+          transparent: true,
+          format: "image/png",
+          srs: "EPSG:4490",
+          styles: "",
+        },
+        tileWidth: 512,
+        tileHeight: 512,
+      });
+      layerWMS.name = "Wms_Layer";
+      window.Viewer.scene.imageryLayers.addImageryProvider(window.layerWMS);
+      var layer2 = new Image({
+        name: "Wms_Layer",
+        source: new ImageWMS({
+          crossOrigin: "anonymous",
+          url: geoServerURl,
+          params: {
+            FORMAT: "image/png",
+            VERSION: "1.1.1",
+            LAYERS: url.toString(),
+          },
+        }),
+      });
+      if (res.opacity) {
+        layer2.setOpacity(parseInt(res.opacity) / 100);
+      }
+      window.map.addLayer(layer2);
+    },
+    async getFeatureInfo(html) {
+      var start = html.indexOf("<caption class=\"featureInfo\">") + "<caption class=\"featureInfo\">".length;
+      var end = html.indexOf("</caption>");
+      var tab = html.substr(start, end - start);
+      start = html.lastIndexOf(tab) + tab.length + 1;
+      end = html.indexOf("</td>", start);
+      var gid = html.substr(start, end - start);
+      if (gid && tab) {
+        this.$store.state.pickoption = {
+          gid: gid,
+          name: tab.replaceAll("_", "")
+        }
+
+        this.$refs &&
+          this.$refs.queryinfo &&
+          this.$refs.queryinfo.close("queryinfo");
+        this.$store.state.mapPopBoxFlag = "4";
+
+        this.$refs &&
+          this.$refs.queryinfo &&
+          this.$refs.queryinfo.open("鎷惧彇鍒嗘瀽", null,);
+      }
+
+
+    },
+
+
     showModelAttach() {
       if (this.$store.state.attachModel) {
         var name = this.$store.state.attachinfo.cnName;
@@ -2621,6 +2626,29 @@
       if (!showPop) {
         this.$message.warning("鏆傛棤鏁版嵁!");
       }
+    },
+    showPopBox() {
+
+      if (this.$store.state.showPopBoxFlag == true) {
+        this.$refs && this.$refs.queryinfo && this.$refs.queryinfo.close();
+
+
+        this.$refs &&
+          this.$refs.queryinfo &&
+          this.$refs.queryinfo.open("灞炴��", null, {
+            close: () => {
+              this.$store.state.showPopBoxFlag == false
+              if (this.$store.state.primitLayer != null) {
+                sgworld.Creator.DeleteObject(this.$store.state.primitLayer);
+                this.$store.state.primitLayer = null;
+              }
+
+              if (window.Viewer.scene.primitives.length != 0) {
+                window.Viewer.scene.primitives.removeAll();
+              }
+            },
+          });
+      }
     }
   },
   mounted() {
@@ -2638,7 +2666,9 @@
         this.menuChange(res);
       }
     });
-
+    this.$bus.$on("showMenuLayer", ((res) => {
+      this.setAddLayers(res);
+    }));
     this.$store.state.showAllLayers = true;
     this.$store.state.layerMnage = false;
     this.$store.state.treeData = null;
@@ -2653,6 +2683,9 @@
     catch(newVal, oldVal) {
       this.showModelCatch();
     },
+    popObj(newVal, oldVal) {
+      this.showPopBox();
+    }
   },
   computed: {
     Obj() {
@@ -2661,6 +2694,9 @@
     catch() {
       return this.$store.state.catModel;
     },
+    popObj() {
+      return this.$store.state.showPopBoxFlag;
+    }
   },
 };
 </script>

--
Gitblit v1.9.3