From fa05dfcce55b8589d7f76175700a92fe196dcd9b Mon Sep 17 00:00:00 2001
From: lixuliang <lixuliang_hd@126.com>
Date: 星期三, 13 三月 2024 17:59:52 +0800
Subject: [PATCH] 图层切换叠压

---
 src/components/sideMenu/layerTreePanel/layerTreePanel2.vue |  291 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 176 insertions(+), 115 deletions(-)

diff --git a/src/components/sideMenu/layerTreePanel/layerTreePanel2.vue b/src/components/sideMenu/layerTreePanel/layerTreePanel2.vue
index df8e56b..37f4ab1 100644
--- a/src/components/sideMenu/layerTreePanel/layerTreePanel2.vue
+++ b/src/components/sideMenu/layerTreePanel/layerTreePanel2.vue
@@ -69,19 +69,20 @@
 
 import store from "@/utils/store2.js";
 import axios from "axios";
-import Vector from "ol/source/Vector";
-import GeoJSON from "ol/format/GeoJSON";
-import Cluster from "ol/source/Cluster";
-import Style from "ol/style/Style";
-import Circle from "ol/style/Circle";
-import Stroke from "ol/style/Stroke";
-import Fill from "ol/style/Fill";
-import Text from "ol/style/Text";
-import Icon from "ol/style/Icon";
-import VectorLayer from "ol/layer/Vector";
 
-import ImageWMS from "ol/source/ImageWMS";
-import Image from "ol/layer/Image";
+import Vector from "ol/source/Vector";
+// import GeoJSON from "ol/format/GeoJSON";
+// import Cluster from "ol/source/Cluster";
+// import Style from "ol/style/Style";
+// import Circle from "ol/style/Circle";
+// import Stroke from "ol/style/Stroke";
+// import Fill from "ol/style/Fill";
+// import Text from "ol/style/Text";
+// import Icon from "ol/style/Icon";
+// import VectorLayer from "ol/layer/Vector";
+
+// import ImageWMS from "ol/source/ImageWMS";
+// import Image from "ol/layer/Image";
 
 export default {
   name: "LayerTreePanel",
@@ -1017,8 +1018,8 @@
           //   ""
           // );
           debugger;
-          var layer = new Image({
-            source: new ImageWMS({
+          var layer = new ol.layer.Image({
+            source: new ol.source.ImageWMS({
               //涓嶈兘璁剧疆涓�0锛屽惁鍒欏湴鍥句笉灞曠ず銆�
               ratio: 1,
               url: "http://127.0.0.1:8080/geoserver/province/wms",
@@ -1031,7 +1032,7 @@
               serverType: "geoserver",
             }),
           });
-          window.map.addLayer(layer);
+          window.mapapi.addLayer(layer);
           break;
         case "wfs":
           // wfs鏁版嵁
@@ -1854,10 +1855,11 @@
         layer.item.baseLayer = true;
       }
     },
+    // 甯傛斂鏉嗕綋鑱氬悎
     initLdgCluster(treeNode) {
       if (treeNode.checked == false) {
-        window.map.removeLayer(window.ldgclusterLayer);
-        window.map.removeLayer(window.tldgclusterLayer);
+        window.mapapi.removeLayer(window.ldgclusterLayer);
+        window.mapapi.removeLayer(window.tldgclusterLayer);
         return;
       }
       const loading = this.$loading({
@@ -1868,8 +1870,8 @@
       });
 
       // 鍔犺浇 GeoJSON 鏁版嵁
-      var vectorSource = new Vector({
-        format: new GeoJSON(),
+      var vectorSource = new ol.source.Vector({
+        format: new ol.format.GeoJSON(),
         url:
           treeNode.urls +
           "?version=1.3.0&request=GetFeature&format=json&typename=" +
@@ -1877,7 +1879,7 @@
       });
 
       // 鍒涘缓鑱氬悎灞�
-      var clusterSource = new Cluster({
+      var clusterSource = new ol.source.Cluster({
         distance: 40,
         source: vectorSource,
       });
@@ -1885,13 +1887,13 @@
       // 鍒涘缓鑱氬悎鏄剧ず鏍峰紡
       var styleCache = {};
       if (treeNode.name == "璺伅鏉� ") {
-        window.ldgclusterLayer = new VectorLayer({
+        window.ldgclusterLayer = new ol.layer.Vector({
           source: clusterSource,
           style: function (feature) {
             var size = feature.get("features").length;
             if (size == 1) {
-              return new Style({
-                image: new Icon({
+              return new ol.style.Style({
+                image: new ol.style.Icon({
                   anchor: [0.5, 1],
                   src: treeNode.image,
                 }),
@@ -1900,14 +1902,14 @@
             if (size > 1000) {
               var style = styleCache[size];
               if (!style) {
-                style = new Style({
-                  image: new Icon({
+                style = new ol.style.Style({
+                  image: new ol.style.Icon({
                     scale: 0.4,
                     src: require("@/assets/img/right/test01.png"),
                   }),
-                  text: new Text({
+                  text: new ol.style.Text({
                     text: size.toString(),
-                    fill: new Fill({
+                    fill: new ol.style.Fill({
                       color: "#fff",
                     }),
                   }),
@@ -1918,15 +1920,15 @@
             }
             var style = styleCache[size];
             if (!style) {
-              style = new Style({
-                image: new Icon({
+              style = new ol.style.Style({
+                image: new ol.style.Icon({
                   // anchor: [0.5, 1],
                   scale: 0.3,
                   src: require("@/assets/img/right/jh.png"),
                 }),
-                text: new Text({
+                text: new ol.style.Text({
                   text: size.toString(),
-                  fill: new Fill({
+                  fill: new ol.style.Fill({
                     color: "#fff",
                   }),
                 }),
@@ -1937,15 +1939,15 @@
           },
         });
 
-        window.map.addLayer(window.ldgclusterLayer);
+        window.mapapi.addLayer(window.ldgclusterLayer);
       } else if (treeNode.name == "璺悕鐗屾潌 ") {
-        window.tldgclusterLayer = new VectorLayer({
+        window.tldgclusterLayer = new ol.layer.Vector({
           source: clusterSource,
           style: function (feature) {
             var size = feature.get("features").length;
             if (size == 1) {
-              return new Style({
-                image: new Icon({
+              return new ol.style.Style({
+                image: new ol.style.Icon({
                   anchor: [0.5, 1],
                   src: treeNode.image,
                 }),
@@ -1954,14 +1956,14 @@
             if (size > 1000) {
               var style = styleCache[size];
               if (!style) {
-                style = new Style({
-                  image: new Icon({
+                style = new ol.style.Style({
+                  image: new ol.style.Icon({
                     scale: 0.4,
                     src: require("@/assets/img/right/test01.png"),
                   }),
-                  text: new Text({
+                  text: new ol.style.Text({
                     text: size.toString(),
-                    fill: new Fill({
+                    fill: new ol.style.Fill({
                       color: "#fff",
                     }),
                   }),
@@ -1972,15 +1974,15 @@
             }
             var style = styleCache[size];
             if (!style) {
-              style = new Style({
-                image: new Icon({
+              style = new ol.style.Style({
+                image: new ol.style.Icon({
                   // anchor: [0.5, 1],
                   scale: 0.3,
                   src: require("@/assets/img/right/jh.png"),
                 }),
-                text: new Text({
+                text: new ol.style.Text({
                   text: size.toString(),
-                  fill: new Fill({
+                  fill: new ol.style.Fill({
                     color: "#fff",
                   }),
                 }),
@@ -1991,17 +1993,30 @@
           },
         });
 
-        window.map.addLayer(window.tldgclusterLayer);
+        window.mapapi.addLayer(window.tldgclusterLayer);
       }
 
       // 灏嗚仛鍚堝眰鍔犲叆鍦板浘
-      window.map.removeLayer(window.jkspclusterLayer);
-      window.map.removeLayer(window.qiyeclusterLayer);
+      window.mapapi.removeLayer(window.jkspclusterLayer);
+      window.mapapi.removeLayer(window.qiyeclusterLayer);
       loading.close();
+      window.mapapi.getView().on("change:resolution", function (event) {
+        if (
+          window.mapapi.getView().getZoom() ==
+          window.mapapi.getView().getMaxZoom()
+        ) {
+          console.log("max");
+
+          clusterSource.setDistance(0);
+        } else {
+          clusterSource.setDistance(40);
+        }
+      });
     },
+    // 瑙嗛鐩戞帶鑱氬悎
     initCluster(treeNode) {
       if (treeNode.checked == false) {
-        window.map.removeLayer(window.jkspclusterLayer);
+        window.mapapi.removeLayer(window.jkspclusterLayer);
         return;
       }
       const loading = this.$loading({
@@ -2011,8 +2026,8 @@
         background: "rgba(0, 0, 0, 0.7)",
       });
       // 鍔犺浇 GeoJSON 鏁版嵁
-      var vectorSource = new Vector({
-        format: new GeoJSON(),
+      var vectorSource = new ol.source.Vector({
+        format: new ol.format.GeoJSON(),
         url:
           treeNode.urls +
           "?version=1.3.0&request=GetFeature&format=json&typename=" +
@@ -2020,37 +2035,37 @@
       });
 
       // 鍒涘缓鑱氬悎灞�
-      var clusterSource = new Cluster({
+      var clusterSource = new ol.source.Cluster({
         distance: 40,
         source: vectorSource,
       });
 
       // 鍒涘缓鑱氬悎鏄剧ず鏍峰紡
       var styleCache = {};
-      window.jkspclusterLayer = new VectorLayer({
+      window.jkspclusterLayer = new ol.layer.Vector({
         source: clusterSource,
         style: function (feature) {
           var size = feature.get("features").length;
           if (size == 1) {
-            return new Style({
-              image: new Icon({
+            return new ol.style.Style({
+              image: new ol.style.Icon({
                 anchor: [0.5, 1],
-                src: "./static/SmartEarthSDK/Workers/image/xzspj/spjk.png",
+                src: "./static/SmartEarthSDK/Workers/image/xzspj/camera.png",
               }),
             });
           }
           if (size > 1000) {
             var style = styleCache[size];
             if (!style) {
-              style = new Style({
-                image: new Icon({
+              style = new ol.style.Style({
+                image: new ol.style.Icon({
                   // anchor: [0.5, 1],
                   scale: 0.4,
                   src: require("@/assets/img/right/test01.png"),
                 }),
-                text: new Text({
+                text: new ol.style.Text({
                   text: size.toString(),
-                  fill: new Fill({
+                  fill: new ol.style.Fill({
                     color: "#fff",
                   }),
                 }),
@@ -2061,15 +2076,15 @@
           }
           var style = styleCache[size];
           if (!style) {
-            style = new Style({
-              image: new Icon({
+            style = new ol.style.Style({
+              image: new ol.style.Icon({
                 // anchor: [0.5, 1],
                 scale: 0.3,
                 src: require("@/assets/img/right/jh.png"),
               }),
-              text: new Text({
+              text: new ol.style.Text({
                 text: size.toString(),
-                fill: new Fill({
+                fill: new ol.style.Fill({
                   color: "#fff",
                 }),
               }),
@@ -2081,11 +2096,23 @@
       });
 
       // 灏嗚仛鍚堝眰鍔犲叆鍦板浘
-      window.map.removeLayer(window.ldgclusterLayer);
-      window.map.removeLayer(window.tldgclusterLayer);
-      window.map.removeLayer(window.qiyeclusterLayer);
-      window.map.addLayer(window.jkspclusterLayer);
+      window.mapapi.removeLayer(window.ldgclusterLayer);
+      window.mapapi.removeLayer(window.tldgclusterLayer);
+      window.mapapi.removeLayer(window.qiyeclusterLayer);
+      window.mapapi.addLayer(window.jkspclusterLayer);
       loading.close();
+      window.mapapi.getView().on("change:resolution", function (event) {
+        if (
+          window.mapapi.getView().getZoom() ==
+          window.mapapi.getView().getMaxZoom()
+        ) {
+          console.log("max");
+
+          clusterSource.setDistance(0);
+        } else {
+          clusterSource.setDistance(40);
+        }
+      });
       // new Cesium.GeoJsonDataSource.load(
       //   treeNode.urls +
       //     "?version=1.3.0&request=GetFeature&format=json&typename=" +
@@ -2243,39 +2270,11 @@
       //     loading.close();
       //   });
     },
-    testSDKcluster() {
-      let clusterLayer1 = new SmartEarth.ClusterLayer(Viewer, {
-        style: "clustering",
-      });
-      axios
-        .get(
-          window.gisBaseUrl +
-            "/gisserver/wfsserver/qiyelianqiye?version=1.3.0&request=GetFeature&format=json&typename=浼佷笟閾句紒涓�"
-        )
-        .then((res) => {
-          let positions = generatePosition(20000);
-          positions.forEach((item) => {
-            clusterLayer1.add(item, {
-              image: "./static/SmartEarthSDK/Workers/image/xzspj/qiye.png",
-            });
-          });
-          // res.data.features.forEach((item) => {
-          // clusterLayer1.add(
-          //   new SmartEarth.Degrees(
-          //     item.geometry.coordinates[0],
-          //     item.geometry.coordinates[1]
-          //   ),
-          //   {
-          //     name: `QY&${item.properties.ID}&${item.properties["QYMC"]}&${item.properties["DZ"]}&${item.properties["BZDZ"]}&${item.properties["XYDM"]}&${item.geometry.coordinates[0]}&${item.geometry.coordinates[1]}`,
-          //     image: SmartEarthRootUrl + "Workers/image/mark.png",
-          //   }
-          // );
-          // });
-        });
-    },
+
+    //浼佷笟淇℃伅鑱氬悎
     qiyeCluster(treeNode) {
       if (treeNode.checked == false) {
-        window.map.removeLayer(window.qiyeclusterLayer);
+        window.mapapi.removeLayer(window.qiyeclusterLayer);
         return;
       }
       const loading = this.$loading({
@@ -2285,8 +2284,8 @@
         background: "rgba(0, 0, 0, 0.7)",
       });
       // 鍔犺浇 GeoJSON 鏁版嵁
-      var vectorSource = new Vector({
-        format: new GeoJSON(),
+      var vectorSource = new ol.source.Vector({
+        format: new ol.format.GeoJSON(),
         url:
           treeNode.urls +
           "?version=1.3.0&request=GetFeature&format=json&typename=" +
@@ -2294,20 +2293,20 @@
       });
 
       // 鍒涘缓鑱氬悎灞�
-      var clusterSource = new Cluster({
+      var clusterSource = new ol.source.Cluster({
         distance: 40,
         source: vectorSource,
       });
 
       // 鍒涘缓鑱氬悎鏄剧ず鏍峰紡
       var styleCache = {};
-      window.qiyeclusterLayer = new VectorLayer({
+      window.qiyeclusterLayer = new ol.layer.Vector({
         source: clusterSource,
         style: function (feature) {
           var size = feature.get("features").length;
           if (size == 1) {
-            return new Style({
-              image: new Icon({
+            return new ol.style.Style({
+              image: new ol.style.Icon({
                 anchor: [0.5, 1],
                 src: treeNode.image,
               }),
@@ -2316,15 +2315,15 @@
           if (size > 1000) {
             var style = styleCache[size];
             if (!style) {
-              style = new Style({
-                image: new Icon({
+              style = new ol.style.Style({
+                image: new ol.style.Icon({
                   // anchor: [0.5, 1],
                   scale: 0.4,
                   src: require("@/assets/img/right/test01.png"),
                 }),
-                text: new Text({
+                text: new ol.style.Text({
                   text: size.toString(),
-                  fill: new Fill({
+                  fill: new ol.style.Fill({
                     color: "#fff",
                   }),
                 }),
@@ -2335,15 +2334,15 @@
           }
           var style = styleCache[size];
           if (!style) {
-            style = new Style({
-              image: new Icon({
+            style = new ol.style.Style({
+              image: new ol.style.Icon({
                 // anchor: [0.5, 1],
                 scale: 0.3,
                 src: require("@/assets/img/right/jh.png"),
               }),
-              text: new Text({
+              text: new ol.style.Text({
                 text: size.toString(),
-                fill: new Fill({
+                fill: new ol.style.Fill({
                   color: "#fff",
                 }),
               }),
@@ -2377,12 +2376,43 @@
       });
 
       // 灏嗚仛鍚堝眰鍔犲叆鍦板浘
-      window.map.removeLayer(window.ldgclusterLayer);
-      window.map.removeLayer(window.tldgclusterLayer);
-      window.map.removeLayer(window.jkspclusterLayer);
-      window.map.addLayer(window.qiyeclusterLayer);
+      window.mapapi.removeLayer(window.ldgclusterLayer);
+      window.mapapi.removeLayer(window.tldgclusterLayer);
+      window.mapapi.removeLayer(window.jkspclusterLayer);
+      window.mapapi.addLayer(window.qiyeclusterLayer);
       loading.close();
+      window.mapapi.getView().on("change:resolution", function (event) {
+        if (
+          window.mapapi.getView().getZoom() ==
+          window.mapapi.getView().getMaxZoom()
+        ) {
+          clusterSource.setDistance(0);
+        } else {
+          clusterSource.setDistance(40);
+        }
+      }); 
+      // 鐩戝惉鍦板浘鍗曞嚮浜嬩欢
+      // window.mapapi.on("singleclick", function (e) {
+      //   var pixel = window.mapapi.getEventPixel(e.originalEvent);
+      //   var currentFeature = window.mapapi.forEachFeatureAtPixel(
+      //     pixel,
+      //     function (feature, layer) {
+      //       return feature;
+      //     }
+      //   );
+      //   if (currentFeature) {
+      //     var features = currentFeature.get("features");
+      //     if (features.length > 1) {
+      //       console.log(features);
+      //       window.alert("褰撳墠鑱氬悎鍦堜笅鍏辨湁" + features.length + "涓绱�");
+      //     }
+      //     if (features.length == 1) {
+      //       console.log(features);
 
+      //       window.alert("褰撳墠瑕佺礌鏈鑱氬悎锛屽彧鏈�" + features.length + "涓绱�");
+      //     }
+      //   }
+      // });
       // let dataSource;
       // if (treeNode.layer == "浼佷笟閾句紒涓�") {
       //   // console.log(store.qiyeJsonInfo);
@@ -2477,6 +2507,37 @@
       //     cluster.billboard.height = 40;
       //   }
       // });
+    }, 
+
+    testSDKcluster() {
+      let clusterLayer1 = new SmartEarth.ClusterLayer(Viewer, {
+        style: "clustering",
+      });
+      axios
+        .get(
+          window.gisBaseUrl +
+            "/gisserver/wfsserver/qiyelianqiye?version=1.3.0&request=GetFeature&format=json&typename=浼佷笟閾句紒涓�"
+        )
+        .then((res) => {
+          let positions = generatePosition(20000);
+          positions.forEach((item) => {
+            clusterLayer1.add(item, {
+              image: "./static/SmartEarthSDK/Workers/image/xzspj/qiye.png",
+            });
+          });
+          // res.data.features.forEach((item) => {
+          // clusterLayer1.add(
+          //   new SmartEarth.Degrees(
+          //     item.geometry.coordinates[0],
+          //     item.geometry.coordinates[1]
+          //   ),
+          //   {
+          //     name: `QY&${item.properties.ID}&${item.properties["QYMC"]}&${item.properties["DZ"]}&${item.properties["BZDZ"]}&${item.properties["XYDM"]}&${item.geometry.coordinates[0]}&${item.geometry.coordinates[1]}`,
+          //     image: SmartEarthRootUrl + "Workers/image/mark.png",
+          //   }
+          // );
+          // });
+        });
     },
     // initCluster(treeNode) {
     //   let that = this;

--
Gitblit v1.9.3