From 36fbd1e5a40e319e6ac5f43d11c99ba4b66e93a3 Mon Sep 17 00:00:00 2001
From: surprise <15810472099@163.com>
Date: 星期三, 29 十一月 2023 16:50:16 +0800
Subject: [PATCH] 坡度分析下载修改

---
 src/assets/js/Map/menuTool.js |  352 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 313 insertions(+), 39 deletions(-)

diff --git a/src/assets/js/Map/menuTool.js b/src/assets/js/Map/menuTool.js
index 354bb80..e8c1774 100644
--- a/src/assets/js/Map/menuTool.js
+++ b/src/assets/js/Map/menuTool.js
@@ -1,10 +1,11 @@
 import * as turf from "@turf/turf";
 import WKT from "terraformer-wkt-parser";
 import rightServer from "./rightServer";
-import config from "./config";
+// import config from "../../../../public/config/config";
 import CryptoJS from "crypto-js";
 // import { Store } from "vuex";
 import store from "@/store";
+import temporaryTool from "./temporaryTools";
 const menuTool = {
   toolMenu: null,
   toolFlag: null,
@@ -17,8 +18,15 @@
     polyline: SmartEarth.Cesium.Color.fromCssColorString("#ffff0050"),
     polygon: SmartEarth.Cesium.Color.fromCssColorString("#ffff0050"),
   },
+  exportSquare: null,
+  imageryProvider: null,
+  legendBox: null,
   topTools(res) {
     this.toolFlag = res.id;
+
+
+    Viewer.scene.globe.depthTestAgainstTerrain = false
+    Viewer.scene.pickTranslucentDepth = false
     switch (res.id) {
       case "a2": //鐐规极娓�
         this.pointRoam();
@@ -73,12 +81,15 @@
         this.snapshot();
         break;
       case "f2": //鐐规煡璇�
+        this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯');
         this.spatialPointQuery();
         break;
       case "f3": //绾挎煡璇�
+        this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯');
         this.spatialLineQuery();
         break;
       case "f4": //闈㈡煡璇�
+        this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯');
         this.spatialQuery();
         break;
       case "g1": //鍧愭爣瀹氫綅
@@ -92,64 +103,176 @@
       Viewer.animation.container.style.visibility = "hidden";
       Viewer.timeline.container.style.visibility = "hidden";
       Viewer.clock.shouldAnimate = false;
-      return (earthCtrl.shadows = false);
+      Viewer.scene.globe.enableLighting = false;
+      earthCtrl.shadows = false;
+      return
     }
     Viewer.clock.shouldAnimate = true;
+    Viewer.scene.globe.enableLighting = true;
     Viewer.animation.container.style.visibility = "visible";
     Viewer.timeline.container.style.visibility = "visible";
     earthCtrl.shadows = true;
+    earthCtrl.terrainShadows = SmartEarth.Cesium.ShadowMode.ENABLED
+
+    earthCtrl.shadowMap.size = 1024
   },
   setLocalPosition(res) {
     if (this.localPoint) {
       this.setLocalPositionClose();
     }
-    var position = {
-      X: parseFloat(res.lon),
-      Y: parseFloat(res.lat),
-      Altitude: parseFloat(res.alt),
-    };
-    this.localPoint = window.sgworld.Creator.CreateImageLabel(
-      position,
-      config.StaticFileBaseUrl + "/Workers/image/mark.png",
-      {},
-      0,
-      "鏍囩鐐�"
-    );
-    var id = this.localPoint.item.id;
-    window.sgworld.Navigate.flyToObj(this.localPoint.item);
+    this.localPoint = window.Viewer.entities.add({
+      name: '鍧愭爣瀹氫綅',
+      position: Cesium.Cartesian3.fromDegrees(parseFloat(res.lon), parseFloat(res.lat), res.alt == null ? 0 : parseFloat(res.alt)),
+      billboard: {
+        image: config.StaticFileBaseUrl + '/Workers/image/location.png',
+        // 璁剧疆璐村湴
+        heightReference: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4),
+        verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+        scale: 0.3,
+      },
+    });
+    this.setViewerFlyTo(this.localPoint)
   },
   setLocalPositionClose() {
-    this.localPoint.deleteObject();
-    this.localPoint = null;
+    if (this.localPoint) {
+      // this.localPoint.deleteObject();
+      window.Viewer.entities.remove(this.localPoint)
+      this.localPoint = null;
+    }
+
   },
   //鍧″害鍒嗘瀽
   setSlopeMap() {
+
+
+    if (window.esriLayer) {
+      this.setCloseEsriLayer();
+      return
+    }
+    sgworld.Creator.createSimpleGraphic('rectangle', {}, (entity) => {
+      if (entity) {
+        var west = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().west
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴�
+        var east = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().east
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
+        var north = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().north
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴�
+        var south = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().south
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
+        sgworld.Creator.SimpleGraphic.clear();
+        this.legendBox = [
+          west, south, east, north
+        ]
+        this.addTMSLayer(this.legendBox)
+      }
+    });
+
+  },
+
+
+  addTMSLayer(obj) {
+
+    var esri = new Cesium.WebMapServiceImageryProvider({
+      url: config.esri,
+      name: 'esriLayer',
+      rectangle: Cesium.Rectangle.fromDegrees(obj[0], obj[1], obj[2], obj[3]),
+      crs: 'EPSG:4326',
+      //transparent: true
+      parameters: {
+        format: "image/png",
+        layers: [0]
+      }
+    });
+    window.esriLayer = Viewer.imageryLayers.addImageryProvider(esri);
+    store.state.showlegendLayer = true;
+  },
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  setSlopeMap1() {
     const globe = Viewer.scene.globe;
     if (window.material) {
       window.material = null;
       globe.material = null;
       Viewer.scene.globe.enableLighting = false;
+      store.state.slopeQueyFlag = false;
+      store.state.showSlopeQuey = false;
       return;
     }
+    store.state.slopeQueyFlag = true;
     window.material = new Cesium.Material({
       fabric: {
         type: "ElevationRamp",
         uniforms: {
-          image: config.StaticFileBaseUrl + "/Assets/Images/color.png",
+          image: config.StaticFileBaseUrl + "Assets/Images/colors75.png",
           minimumHeight: -10000,
           maximumHeight: 10000,
+
         },
       },
     });
+
     Viewer.scene.globe.material = window.material;
   },
+  setImageLayerChange() {
+    if (window.esriLayer) {
+      Viewer.imageryLayers.raiseToTop(window.esriLayer);
 
+    }
+    if (this.imageryProvider) {
+      Viewer.imageryLayers.raiseToTop(this.imageryProvider);
+    }
+  },
   //绛夐珮绾�
   setcontour() {
+    // if (this.imageryProvider) {
+    //   Viewer.imageryLayers.remove(this.imageryProvider);
+    //   this.imageryProvider = null;
+    //   return
+    // }
+    // var that = this;
+    // var imageryProvider = new Cesium.UrlTemplateImageryProvider({
+    //   url: 'http://192.168.20.83:80/Moon/LFData/2d/tiles/contour_500/{mz}/{my}/{mx}.png',
+    //   tilingScheme: new Cesium.GeographicTilingScheme(),
+    //   customTags: {
+    //     mz: function (imageryProvider, x, y, level) {
+    //       return 'L' + that.zeroFill(level + 1, 2, 10); // 娉ㄦ剰瑙傛祴锛屽眰绾у姞1浜�
+    //     },
+    //     mx: function (imageryProvider, x, y, level) {
+    //       return 'C' + that.zeroFill(x, 8, 16);
+    //     },
+    //     my: function (imageryProvider, x, y, level) {
+    //       return 'R' + that.zeroFill(y, 8, 16);
+    //     }
+    //   }
+    // });
+    // this.imageryProvider = Viewer.imageryLayers.addImageryProvider(imageryProvider);
     var globe = window.Viewer.scene.globe;
     if (window.material) {
       window.material = null;
       globe.material = null;
+
+      store.state.slopeQueyFlag = false;
+      store.state.showSlopeQuey = false;
+
       return;
     }
 
@@ -166,6 +289,16 @@
     contourUniforms.spacing = 100.0;
     contourUniforms.color = contourColor;
     globe.material = window.material;
+
+  },
+
+  zeroFill(num, len, radix) {
+    var str = num.toString(radix || 10)
+    while (str.length < len) {
+      str = '0' + str
+    }
+
+    return str;
   },
   //绾挎煡璇�
   spatialLineQuery() {
@@ -177,17 +310,23 @@
         var line_data = this.setCartesianToEightFour(res[i])
         std.push([line_data.lng, line_data.lat])
       }
+      sgworld.Creator.SimpleGraphic.clear();
+      this.setShowSpatialShp(std, 'polyline')
+
+
       var line = turf.lineString(std, { name: "polyline" })
       var restVal = turf.buffer(line, this.bufferSize, { units: "meters" })
       that.setSpatialQuery(restVal)
     });
   },
+
   spatialPointQuery() {
     var that = this;
     sgworld.Creator.createSimpleGraphic('point', {}, (entity) => {
       var res = entity.position.getValue();
       var val = that.setCartesianToEightFour(res)
       sgworld.Creator.SimpleGraphic.clear();
+      that.setShowSpatialShp(val, 'Point')
       var options = {
         steps: 10,
         units: "meters",
@@ -197,6 +336,59 @@
       that.setSpatialQuery(circle)
     });
   },
+  setShowSpatialShp(res, type) {
+    var position = [];
+
+    var name = '绌洪棿鏌ヨ_鏍囩粯'
+    switch (type) {
+      case 'polyline':
+        for (var i in res) {
+          position.push(res[i][0], res[i][1])
+        }
+        window.Viewer.entities.add({
+          name: name,
+          polyline: {
+            positions: Cesium.Cartesian3.fromDegreesArray(position),
+            width: 3.0,
+            material: new Cesium.PolylineOutlineMaterialProperty({
+              color: new Cesium.Color.fromCssColorString('#A6D8AE').withAlpha(0.5),
+              outlineWidth: 1,
+              outlineColor: new Cesium.Color.fromCssColorString('#A6D8AE'),
+            }),
+            clampToGround: true,
+
+          },
+        })
+        break;
+      case 'Point':
+        window.Viewer.entities.add({
+          name: name,
+          position: Cesium.Cartesian3.fromDegrees(res.lng, res.lat),
+          point: {
+            color: new Cesium.Color.fromCssColorString('#A6D8AE').withAlpha(0.5),
+            pixelSize: 20,
+            heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
+          }
+        });
+        break;
+      case 'Polygon':
+        window.Viewer.entities.add({
+          name: name,
+          polygon: {
+            hierarchy: { positions: Cesium.Cartesian3.fromDegreesArray(res) },
+            outline: true,
+            outlineWidth: 100,
+            arcType: Cesium.ArcType.RHUMB,
+            material: new Cesium.Color.fromCssColorString('#A6D8AE').withAlpha(0.5),
+            outline: true, // height is required for outline to display
+            outlineColor: new Cesium.Color.fromCssColorString('#A6D8AE')
+          }
+        });
+        break;
+    }
+
+  },
+
   setCartesianToEightFour(res) {
     var std = {}
     let ellipsoid = Viewer.scene.globe.ellipsoid
@@ -224,6 +416,10 @@
         var south = Cesium.Math.toDegrees(
           entity.rectangle._coordinates.getValue().south
         ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
+
+        var arr = [west, north, east, north, east, south, west, south, west, north];
+        this.setShowSpatialShp(arr, 'Polygon')
+
         sgworld.Creator.SimpleGraphic.clear();
 
         var polygon = turf.polygon([
@@ -308,7 +504,10 @@
         break;
       case "l3": //鍦ㄧ嚎鍒跺浘
         store.state.isShowMap = true;
-        this.setThematicMap();
+        setTimeout(() => {
+          this.setThematicMap();
+        }, 200);
+
         break;
       case "l4":
         store.state.isShowMap = true;
@@ -323,11 +522,17 @@
   },
   thematicTools(res) {
     switch (res.id) {
+      case "t1":
+        store.state.setLayerManager = !store.state.setLayerManager;
+        break;
       case "t2":
         this.createSimpleGraphic("rectangle", "square");
         break;
       case "t3":
         this.delRectangle();
+        break;
+      case "t4":
+        store.state.setExportList = !store.state.setExportList
         break;
     }
   },
@@ -359,13 +564,11 @@
     var east1 = ss[2];
     var north1 = ss[3];
     var south1 = ss[1];
+    this.exportSquare = ss;
     var geometry = Cesium.Rectangle.fromDegrees(west1, south1, east1, north1);
     Viewer.camera.setView({
       destination: Cesium.Rectangle.fromDegrees(west, south, east, north),
     });
-
-
-
     setTimeout(() => {
       window.functionForJs({
         type: "exportMap",
@@ -375,18 +578,42 @@
   },
   // 鍒涘缓鍥惧舰
   createSimpleGraphic(type, scene) {
+    var that = this;
     sgworld.Creator.createSimpleGraphic(type, {}, (entity) => {
+
       if (scene === "square") {
         this.createRectangle(entity);
       }
+      if (!scene) {
+        temporaryTool.setInsertEntityObj(type, entity)
+      }
     });
   },
+
+  colorRgbToHex(str) {
+
+    let reg = /^(rgb|RGB)/;
+    if (!reg.test(str)) { return; }
+    var rgb = str.slice(4, str.length - 1).split(",")
+    // 灏哛GB鑹插彿鎷嗗垎涓虹孩銆佺豢銆佽摑涓変釜閫氶亾鐨勫��
+    var r = parseInt(rgb[0]);
+    var g = parseInt(rgb[1]);
+    var b = parseInt(rgb[2]);
+
+
+    return "#" + ((r << 16) | (g << 8) | b).toString(16).padStart(6, '0');
+
+
+  },
+
   //鍦ㄧ嚎鍒跺浘
   setThematicMap() {
+
     earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE2D;
     // var handle = new SmartEarth.Cesium.ScreenSpaceEventHandler(
     //   earthCtrl.viewer.scene.canvas
     // );
+
   },
 
   //鍧愭爣瀹氫綅
@@ -422,6 +649,7 @@
     window.rightViewer.scene.skyAtmosphere.show = false;
     const compass = document.getElementsByClassName("bottom_btn")[0];
     compass.style.right = "calc(50% + 70px)";
+    compass.style.positions = "absolute";
     store.state.doubleMap = true;
     setTimeout(() => {
       window.functionGetLayer({
@@ -436,6 +664,8 @@
       window.Volumetric.deleteObject();
       window.Volumetric = null;
     }
+    Viewer.scene.globe.depthTestAgainstTerrain = true
+    Viewer.scene.pickTranslucentDepth = true
     window.Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
     window.Volumetric.startDrawing();
   },
@@ -472,10 +702,13 @@
   },
   //绾挎极娓�
   lineRoam() {
+    Viewer.scene.globe.depthTestAgainstTerrain = true;
+    // 缁樺埗璺嚎骞惰幏鍙栬矾寰勫姩鐢绘暟鎹�
     earthCtrl.Command.execute(2, 3, "", (data) => {
+
       data.showPoint = false;
       data.showLine = true;
-      data.mode = 1;
+      data.mode = 0;
       // 寮圭獥鏁版嵁
       window.PathAnimationData = {
         flyData: data,
@@ -493,6 +726,7 @@
         },
       });
     });
+
   },
   //娓呴櫎鎸夐挳
   clearALL(id) {
@@ -501,15 +735,26 @@
 
     // });
   },
+  setCloseEsriLayer() {
+    if (window.esriLayer) {
+      Viewer.imageryLayers.remove(window.esriLayer);
+      window.esriLayer = null
+      this.legendBox = null;
+      store.state.showlegendLayer = false;
+    }
+  },
   //娓呴櫎鏂规硶
   clearTopTools(id) {
     store.state.doubleMap = false;
     store.state.doubleMenu = false;
+    this.setCloseEsriLayer();
     if (earthCtrl.shadows) {
       Viewer.animation.container.style.visibility = "hidden";
       Viewer.timeline.container.style.visibility = "hidden";
       Viewer.clock.shouldAnimate = false;
-      return (earthCtrl.shadows = false);
+      Viewer.scene.globe.enableLighting = false;
+      earthCtrl.shadows = false;
+      return
     }
     if (window.Volumetric) {
       window.Volumetric.deleteObject();
@@ -524,7 +769,12 @@
       window.material = null;
       globe.material = null;
       Viewer.scene.globe.enableLighting = false;
-      return;
+      store.state.slopeQueyFlag = false;
+      store.state.showSlopeQuey = false;
+    }
+    if (this.imageryProvider) {
+      Viewer.imageryLayers.remove(this.imageryProvider)
+      this.imageryProvider = null;
     }
     if (window.DoubleScreen) {
       window.DoubleScreen && window.DoubleScreen.destroy();
@@ -545,7 +795,6 @@
   //绌洪棿鏌ヨ灞炴�у畾浣�
   spaceLocation(res) {
     var name = '绌洪棿鏌ヨ';
-    debugger
     this.setClearLocation(name);
     switch (res.type) {
       case 'MultiPolygon':
@@ -585,15 +834,20 @@
         outline: true,
         outlineWidth: 100,
         arcType: Cesium.ArcType.RHUMB,
-        material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4),
+        material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5),
         outline: true, // height is required for outline to display
         outlineColor: Cesium.Color.DODGERBLUE,
       }
+
     });
     window.Viewer.flyTo(locationPolygonEntity, {
-      duration: 5,
-      offset: new SmartEarth.Cesium.HeadingPitchRange(0.0, SmartEarth.Cesium.Math.toRadians(-20.0))
-    });
+      offset: {
+        heading: Cesium.Math.toRadians(0.0),
+        pitch: Cesium.Math.toRadians(-90),
+        range: 40
+      }
+    }
+    );
   },
   setLocationPoint(res, name) {
     const position = window.Viewer.entities.add({
@@ -602,16 +856,32 @@
       billboard: {
         image: config.StaticFileBaseUrl + '/Workers/image/location.png',
         // 璁剧疆璐村湴
-        heightReference: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4),
+        heightReference: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5),
         verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
-        scale: 5.0,
+        scale: 0.3,
       },
     });
+
     window.Viewer.flyTo(position, {
-      duration: 5,
-      offset: new SmartEarth.Cesium.HeadingPitchRange(0.0, SmartEarth.Cesium.Math.toRadians(-20.0))
+      offset: {
+        heading: Cesium.Math.toRadians(0.0),
+        pitch: Cesium.Math.toRadians(-45),
+        range: 40000
+      }
     });
   },
+  setViewerFlyTo(entity) {
+
+    window.Viewer.flyTo(entity, {
+      offset: {
+        heading: Cesium.Math.toRadians(0.0),
+        pitch: Cesium.Math.toRadians(-45),
+        range: 40000
+      }
+    });
+  },
+
+
   setLocationLine(res, name) {
     var position = [];
 
@@ -624,7 +894,7 @@
         positions: Cesium.Cartesian3.fromDegreesArray(position),
         width: 10.0,
         material: new Cesium.PolylineOutlineMaterialProperty({
-          color: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4),
+          color: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5),
           outlineWidth: 1,
           outlineColor: Cesium.Color.CORNFLOWERBLUE,
         }),
@@ -633,9 +903,13 @@
       },
     })
     window.Viewer.flyTo(polyline, {
-      duration: 5,
-      offset: new SmartEarth.Cesium.HeadingPitchRange(0.0, SmartEarth.Cesium.Math.toRadians(-20.0))
-    });
+      offset: {
+        heading: Cesium.Math.toRadians(0.0),
+        pitch: Cesium.Math.toRadians(-90),
+        range: 0
+      }
+    }
+    );
   }
 
 };

--
Gitblit v1.9.3