From 3f3adb45c6c8c37567122dd9e361f14d88516b3b Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期三, 22 三月 2023 15:03:46 +0800
Subject: [PATCH] 综合展示图层管理页面及数据加载优化

---
 src/api/api.js                   |    4 
 src/views/Tools/LayerTree.vue    |  369 ++++++++++++++++++++++++++++++++++++++++++++--------
 src/views/Synthesis/LeftMenu.vue |   12 +
 src/components/preview_map.vue   |    2 
 4 files changed, 322 insertions(+), 65 deletions(-)

diff --git a/src/api/api.js b/src/api/api.js
index 7bfb41c..d1bb59f 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -1106,4 +1106,8 @@
   return service.post('/publish/insertForPub', params);
 }
 
+//缁煎悎灞曠ず => 鏍规嵁ID鏌ヨ鍙戝竷娓呭崟
+export function comprehensive_selectPubById(params) {
+  return service.get('/comprehensive/selectPubById', { params: params });
+}
 
diff --git a/src/components/preview_map.vue b/src/components/preview_map.vue
index 58d953d..9a79c55 100644
--- a/src/components/preview_map.vue
+++ b/src/components/preview_map.vue
@@ -86,7 +86,7 @@
 
           Viewer.imageryLayers.removeAll();
           var url = res.url.split(';')
-          console.log(url)
+
 
           sgworld.Creator.createImageryProvider('mpt褰卞儚', "wms", {
             url: url[0],
diff --git a/src/views/Synthesis/LeftMenu.vue b/src/views/Synthesis/LeftMenu.vue
index 2b10a2c..0b7b2af 100644
--- a/src/views/Synthesis/LeftMenu.vue
+++ b/src/views/Synthesis/LeftMenu.vue
@@ -2256,6 +2256,7 @@
       });
     },
     setAddLayers(res) {
+      this.setClearWmsLayer()
       var std = [[]];
       for (var i in res) {
         switch (res[i].serveType) {
@@ -2268,8 +2269,7 @@
         this.setAddWmsLayer(std[0])
       }
     },
-    setAddWmsLayer(res) {
-
+    setClearWmsLayer() {
       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") {
@@ -2285,10 +2285,15 @@
           window.map.removeLayer(layers_ol[i]); //鏄剧ず鍥惧眰
         }
       }
+    },
+    setAddWmsLayer(res) {
       var url = [];
       for (var i in res) {
-        url.push(res[i].url)
+        if (res[i].url) {
+          url.push(res[i].url)
+        }
       }
+
       url = url.reverse();
       var that = this;
       var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat("html", null, function (html) {
@@ -2707,6 +2712,7 @@
       }
     });
     this.$bus.$on("showMenuLayer", ((res) => {
+
       this.setAddLayers(res);
     }));
     this.$store.state.showAllLayers = true;
diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue
index f69ce25..9d39953 100644
--- a/src/views/Tools/LayerTree.vue
+++ b/src/views/Tools/LayerTree.vue
@@ -14,7 +14,7 @@
       :props="defaultProps"
       @node-click="handleLeftclick"
       @node-contextmenu="rightClick"
-      @check-change="handleCheckChange"
+      @check="handleCheckChange"
       :default-checked-keys="handleTreeCheck"
       :expand-on-click-node="false"
       :filter-node-method="filterNode"
@@ -185,7 +185,7 @@
 
 import View from "ol/View.js";
 import { Fill, Stroke, Style } from "ol/style.js";
-import { perms_selectLayers, inquiry_selectDomains } from "../../api/api.js";
+import { perms_selectLayers, inquiry_selectDomains, comprehensive_selectPubById } from "../../api/api.js";
 export default {
   name: "tree",
   components: { queryinfo },
@@ -232,6 +232,8 @@
           label: "WFS",
         },
       ],
+      childOption: [],
+      mptLayer: [],
     };
   },
   methods: {
@@ -501,69 +503,105 @@
       console.log("tree drop: ", dropNode.label, dropType);
     },
     handleCheckChange(data, checked, indeterminate) {
+      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 'WFS':
+              listWFS.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;
 
-      if (data.type != 2) return;
-      var value = this.$refs.tree.getCheckedNodes();
-
-      this.$bus.$emit("showMenuLayer", value);
-
-
-
-      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.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 {
-          var std = [];
-          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(data.id);
-              Viewer.flyTo(Viewer.scene.primitives._primitives[i]);
-            }
-          }
+        this.setChangeWMS(listWMS, checked);
+        this.setChangeWFS(listWFS, checked);
+        this.setChangeTileset(listTileset, checked);
+        this.setChangeTMS(listTMS, checked);
+        this.setChangeMpt(listMpt, checked);
+      } else if (data.type == 2) {
+        if (data.serveType == "WMS") {
+          this.setChangeWMS([data], checked);
+        } else if (data.serveType == "Tileset") {
+          this.setChangeTileset([data], checked);
+        } else if (data.serveType == "TMS") {
+          this.setChangeTMS([data], checked);
+        } else if (data.serveType == "Mpt") {
+          this.setChangeMpt([data], checked);
         }
-        if (std.length == 0 && checked == true) {
-          this.setAddLayers(data);
-        } else {
-          window.map.getLayers().getArray().forEach(item => {
-            if (item.get("name") == data.cnName) {
-              item.setVisible(checked);
-
-            }
-          });
-        }
-      } else if (data.serveType == "TMS") {
-        debugger
-        if (data.pubid) {
-          debugger
-        } else {
-          var res;
-          if (data.url.indexOf("{host}") != -1) {
-            res = data.url.replace("{host}", iisHost);
-          } else {
-            res = data.url
-          }
-          var url = res.split(';')
-          debugger
-          window.sgworld.Creator.createImageryProvider('mpt褰卞儚', "wms", {
-            url: url[0],
-            layers: url[1]
-          }, "0", undefined, true, "");
-        }
-
       }
+      // if (data.type != 2) return;
+
+
+
+
+      // if (data.serveType == "WFS") {
+      //   if (window.Viewer.dataSources._dataSources.length == 0) {
+      //     this.setAddLayers(data);
+      //   } else {
+
+      //   }
+      // } else if (data.serveType == "Tileset") {
+
+      //   if (Viewer.scene.primitives._primitives.length == 0) {
+      //     this.setAddLayers(data);
+      //   } else {
+      //     var std = [];
+      //     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(data.id);
+      //         Viewer.flyTo(Viewer.scene.primitives._primitives[i]);
+      //       }
+      //     }
+      //   }
+      //   if (std.length == 0 && checked == true) {
+      //     this.setAddLayers(data);
+      //   } else {
+      //     window.map.getLayers().getArray().forEach(item => {
+      //       if (item.get("name") == data.cnName) {
+      //         item.setVisible(checked);
+
+      //       }
+      //     });
+      //   }
+      // } else if (data.serveType == "TMS") {
+
+      //   if (data.pubid) {
+
+      //   } else {
+      //     var res;
+      //     if (data.url.indexOf("{host}") != -1) {
+      //       res = data.url.replace("{host}", iisHost);
+      //     } else {
+      //       res = data.url
+      //     }
+      //     var url = res.split(';')
+
+      //     window.sgworld.Creator.createImageryProvider('mpt褰卞儚', "wms", {
+      //       url: url[0],
+      //       layers: url[1]
+      //     }, "0", undefined, true, "");
+      //   }
+
+      // }
 
 
 
@@ -576,7 +614,155 @@
       //   }
       // }
     },
+    setChangeWMS(result, checked) {
+      var value = this.$refs.tree.getCheckedNodes();
+      this.$bus.$emit("showMenuLayer", value);
+    },
+    setChangeWFS(result, checked) {
+      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.setAddLayers(tile)
+        } else {
+          for (var i in window.Viewer.dataSources._dataSources) {
+            if (window.Viewer.dataSources._dataSources[i].name == tile.cnName) {
+              window.Viewer.dataSources.remove(window.Viewer.dataSources._dataSources[i]);
+            }
+          }
+
+          var layers_ol = window.map.getAllLayers();
+          for (var i in layers_ol) {
+            var layerOl = layers_ol[i];
+            if (layerOl.values_.name == tile.cnName) {
+              window.map.removeLayer(layerOl)
+            }
+          }
+        }
+      }
+    },
+    setChangeTileset(result, checked) {
+      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.setAddLayers(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])
+            }
+          }
+        }
+      }
+
+
+
+      // if (checked.checkedKeys) {
+      //   for (var i in result) {
+      //     
+      //   }
+      // } else {
+
+      //   for (var j in result) {
+      //     console.log(result[j])
+      //     //
+      //   }
+      // }
+    },
+    setChangeMpt(result, checked) {
+      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.setAddLayers(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)
+            }
+          }
+        }
+      }
+    },
+    setChangeTMS(result, checked) {
+      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.setAddLayers(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]
+              );
+            }
+          }
+        }
+      }
+    },
+    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)
+      }
+      // let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
+      // var std = [];
+      // if (cloneData.children) {
+      //   var child = cloneData.children;
+      //   child.filter((father) => {
+      //     if (father.children) {
+      //       father.father
+      //     } else {
+
+      //     }
+
+      //   })
+      // }
+      // cloneData.filter((father) => {
+      //   // 寰幆鎵�鏈夐」
+      //   console.log(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; // 杩斿洖涓�绾ц彍鍗�
+      // });
+
+
+    },
+
     setAddLayers(res) {
+
       if (res.serveType == "WMS") {
         var resource = geoServerURl;
         if (res.resource != null && res.resource != undefined) {
@@ -677,9 +863,70 @@
           Viewer.flyTo(tileset);
         });
         window.model = tileset
+      } else if (res.serveType == "TMS") {
+        var url = res.url;
+        if (res.url.indexOf("{host}") != -1) {
+          url = res.url.replace("{host}", iisHost);
+        }
+
+        if (res.pubid) {
+          this.setQueryPubid(res);
+        } else {
+          var layer = Viewer.imageryLayers.addImageryProvider(
+            new Cesium.UrlTemplateImageryProvider({
+              url: url,
+              maximumLevel: 18,
+            })
+          );
+          layer.name = res.cnName;
+          this.setChangeWMS();
+        }
+
+      } else if (res.serveType == "Mpt") {
+
+        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.setChangeWMS();
+        }, 500);
+      }
+
+    },
+    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),
+          });
+        }
+        this.setChangeWMS();
       }
     },
-
 
     tileSet(tileset, height) {
       //3dtile妯″瀷鐨勮竟鐣岀悆浣�

--
Gitblit v1.9.3