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 |  802 ++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 673 insertions(+), 129 deletions(-)

diff --git a/src/assets/js/Map/menuTool.js b/src/assets/js/Map/menuTool.js
index 3f66e7b..e8c1774 100644
--- a/src/assets/js/Map/menuTool.js
+++ b/src/assets/js/Map/menuTool.js
@@ -1,21 +1,32 @@
 import * as turf from "@turf/turf";
-import WKT from 'terraformer-wkt-parser'
-
-import CryptoJS from 'crypto-js';
-
+import WKT from "terraformer-wkt-parser";
+import rightServer from "./rightServer";
+// 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,
   oldLeftMenuId: null,
-
+  bufferSize: 100,
   squareOjb: [],
+  localPoint: null,
   colorAll: {
     point: SmartEarth.Cesium.Color.fromCssColorString("#ff0000"),
     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();
@@ -50,20 +61,35 @@
       case "c6": //澶氳竟褰�
         this.createSimpleGraphic("polygon");
         break;
-      case "d2"://绛夐珮绾垮垎鏋�
-        break
-      case "d3"://鍧″害鍒嗘瀽
-        break
+      case "d2": //绛夐珮绾垮垎鏋�
+        this.setcontour();
+        break;
+      case "d3": //鍧″害鍒嗘瀽
+        this.setSlopeMap();
+        break;
       case "d4": //鍦熸柟閲忚绠�
         this.Volumetric();
         break;
       case "d5": //褰卞儚瀵规瘮
         this.CurtainContrast();
         break;
-      case "e1"://蹇収
+
+      case "d6": //闃村奖鍒嗘瀽
+        this.shadowAnalysis();
+        break;
+      case "e1": //蹇収
         this.snapshot();
         break;
-      case "f1"://绌洪棿鏌ヨ
+      case "f2": //鐐规煡璇�
+        this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯');
+        this.spatialPointQuery();
+        break;
+      case "f3": //绾挎煡璇�
+        this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯');
+        this.spatialLineQuery();
+        break;
+      case "f4": //闈㈡煡璇�
+        this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯');
         this.spatialQuery();
         break;
       case "g1": //鍧愭爣瀹氫綅
@@ -71,46 +97,357 @@
         break;
     }
   },
+
+  shadowAnalysis() {
+    if (earthCtrl.shadows) {
+      Viewer.animation.container.style.visibility = "hidden";
+      Viewer.timeline.container.style.visibility = "hidden";
+      Viewer.clock.shouldAnimate = 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();
+    }
+    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() {
+    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/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;
+    }
+
+    var contourColor = new SmartEarth.Cesium.Color(
+      117 / 255,
+      71 / 255,
+      18 / 255,
+      255 / 255
+    );
+    var contourUniforms = {};
+    window.material = Cesium.Material.fromType("ElevationContour");
+    contourUniforms = material.uniforms;
+    contourUniforms.width = 1.0;
+    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() {
+    var that = this;
+    sgworld.Creator.createSimpleGraphic('polyline', {}, (entity) => {
+      var res = entity.polyline.positions.getValue()
+      var std = []
+      for (var i in res) {
+        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",
+        properties: { foo: "bar" },
+      }
+      var circle = turf.circle([val.lng, val.lat], this.bufferSize, options)
+      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
+    let cartographic = ellipsoid.cartesianToCartographic(res)
+    std.lat = Cesium.Math.toDegrees(cartographic.latitude)
+    std.lng = Cesium.Math.toDegrees(cartographic.longitude)
+    std.alt = cartographic.height
+    return std
+  },
   //绌洪棿鏌ヨ
   spatialQuery() {
+    sgworld.Creator.createSimpleGraphic(
+      "rectangle",
+      { showSize: false },
+      (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.createSimpleGraphic('rectangle', { showSize: false }, (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();
+        var arr = [west, north, east, north, east, south, west, south, west, north];
+        this.setShowSpatialShp(arr, 'Polygon')
 
-      var polygon = turf.polygon([
-        [
-          [east, north],
-          [west, north],
-          [west, south],
-          [east, south],
-          [east, north],
-        ],
-      ]);
-      var wkt = WKT.convert(polygon.geometry)
+        sgworld.Creator.SimpleGraphic.clear();
 
-      window.functionForJs({
-        type: 'spatialQuery',
-        value: this.encr(wkt)
-      })
+        var polygon = turf.polygon([
+          [
+            [east, north],
+            [west, north],
+            [west, south],
+            [east, south],
+            [east, north],
+          ],
+        ]);
+        this.setSpatialQuery(polygon)
+      }
+    );
+  },
+  setSpatialQuery(res) {
+    var wkt = WKT.convert(res.geometry);
+
+    window.functionForJs({
+      type: "spatialQuery",
+      value: this.encr(wkt),
     });
   },
   //鍔犲瘑
   encr(word) {
     return CryptoJS.AES.encrypt(
       CryptoJS.enc.Utf8.parse(word),
-      CryptoJS.enc.Utf8.parse(base64Decode('QSNzX2xGX3NFcnZlX2sueQ==')),
+      CryptoJS.enc.Utf8.parse(base64Decode("QSNzX2xGX3NFcnZlX2sueQ==")),
       { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }
     ).toString();
   },
@@ -119,7 +456,7 @@
     return CryptoJS.enc.Utf8.stringify(
       CryptoJS.AES.decrypt(
         word,
-        CryptoJS.enc.Utf8.parse(base64Decode('QSNzX2xGX3NFcnZlX2sueQ==')),
+        CryptoJS.enc.Utf8.parse(base64Decode("QSNzX2xGX3NFcnZlX2sueQ==")),
         { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }
       )
     ).toString();
@@ -127,17 +464,18 @@
   //蹇収
   snapshot() {
     let canvas = window.Viewer.scene.canvas;
-    let image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
+    let image = canvas
+      .toDataURL("image/png")
+      .replace("image/png", "image/octet-stream");
     let link = document.createElement("a");
     let blob = this.dataURLtoBlob(image);
     let objurl = URL.createObjectURL(blob);
     link.download = "scene.png";
     link.href = objurl;
     link.click();
-
   },
   dataURLtoBlob(dataurl) {
-    let arr = dataurl.split(','),
+    let arr = dataurl.split(","),
       mime = arr[0].match(/:(.*?);/)[1],
       bstr = atob(arr[1]),
       n = bstr.length,
@@ -146,7 +484,6 @@
       u8arr[n] = bstr.charCodeAt(n);
     }
     return new Blob([u8arr], { type: mime });
-
   },
   leftTools(res) {
     this.clearLeftTools(res);
@@ -156,29 +493,46 @@
     }
     this.oldLeftMenuId = res.id;
 
+
+
     switch (res.id) {
       case "l1":
+        store.state.isShowMap = true;
         break;
       case "l2":
+        store.state.isShowMap = true;
         break;
       case "l3": //鍦ㄧ嚎鍒跺浘
-        this.setThematicMap();
+        store.state.isShowMap = true;
+        setTimeout(() => {
+          this.setThematicMap();
+        }, 200);
+
         break;
       case "l4":
+        store.state.isShowMap = true;
         break;
       case "l5":
+        store.state.isShowMap = false
         break;
       case "l6":
+        store.state.isShowMap = true;
         break;
     }
   },
   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;
     }
   },
@@ -190,6 +544,7 @@
   },
   // 鐭╁舰姝f柟褰�
   createRectangle(entity) {
+    sgworld.Creator.SimpleGraphic.clear();
     this.delRectangle();
     var west = Cesium.Math.toDegrees(
       entity.rectangle._coordinates.getValue().west
@@ -209,96 +564,137 @@
     var east1 = ss[2];
     var north1 = ss[3];
     var south1 = ss[1];
+    this.exportSquare = ss;
     var geometry = Cesium.Rectangle.fromDegrees(west1, south1, east1, north1);
-
-    // var e = Viewer.entities.add({
-    //   name: "姝f柟",
-    //   polygon: {
-    //     hierarchy: geometry1,
-    //     //height : 100000,
-    //     material: Cesium.Color.RED,
-    //     outline: true,
-    //     outlineColor: Cesium.Color.RED,
-    //   },
-    // });
-    const stripeMaterial = new Cesium.StripeMaterialProperty({
-      evenColor: Cesium.Color.WHITE.withAlpha(0.5),
-      oddColor: Cesium.Color.BLUE.withAlpha(0.5),
-      repeat: 5.0,
+    Viewer.camera.setView({
+      destination: Cesium.Rectangle.fromDegrees(west, south, east, north),
     });
-    var e = Viewer.entities.add({
-      rectangle: {
-        coordinates: geometry,
-        outline: true,
-        outlineColor: Cesium.Color.WHITE,
-        outlineWidth: 4,
-        stRotation: Cesium.Math.toRadians(45),
-        material: stripeMaterial,
-      },
-    });
-    this.squareOjb.push(e);
-    // earthCtrl.Creator.SimpleGraphic.clear();
-    Viewer.entities.remove(entity);
-
-    window.functionForJs({
-      type: 'exportMap',
-      value: true
-    })
+    setTimeout(() => {
+      window.functionForJs({
+        type: "exportMap",
+        value: true,
+      });
+    }, 1000);
   },
   // 鍒涘缓鍥惧舰
   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
     // );
+
   },
 
   //鍧愭爣瀹氫綅
-  Coordposition() { },
+  Coordposition() {
+    window.functionForJs({
+      type: "coordLocation",
+      value: true,
+    });
+  },
   //褰卞儚瀵规瘮
   CurtainContrast() {
-    this.toolMenu = earthCtrl.analysis.createCurtainContrast({
-      leftIndex: 0,
-      rightIndex: 1,
-    });
+    if (window.DoubleScreen) {
+      window.DoubleScreen && window.DoubleScreen.destroy();
+      window.DoubleScreen = null;
+      const compass = document.getElementsByClassName("bottom_btn")[0];
+      compass.style.right = "70px";
+      store.state.doubleMap = false;
+      store.state.doubleMenu = false;
+      return;
+    }
+    window.DoubleScreen = new SmartEarth.DoubleScreen(
+      window.sgworld,
+      {},
+      SmartEarth
+    );
+    window.rightViewer = DoubleScreen.right._Viewer;
+    window.rightViewer.imageryLayers.removeAll();
+    window.rightViewer = DoubleScreen.right._Viewer;
+    window.rightViewer.animation.container.style.visibility = "hidden";
+    // window.rightViewer.timeline.container.style.visibility = "hidden";
+    //澶ф皵灞�
+    window.rightViewer.scene.globe.showGroundAtmosphere = false;
+    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({
+        type: "getlayer",
+        value: true,
+      });
+    }, 100);
   },
   //鍦熸柟閲忚绠�
   Volumetric() {
-    const Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
-    Volumetric.startDrawing();
+    if (window.Volumetric) {
+      window.Volumetric.deleteObject();
+      window.Volumetric = null;
+    }
+    Viewer.scene.globe.depthTestAgainstTerrain = true
+    Viewer.scene.pickTranslucentDepth = true
+    window.Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
+    window.Volumetric.startDrawing();
   },
   //鍨傜洿楂樺害
   verticalHeight() {
-
-    sgworld.Analysis.verticalHeight(this.colorAll, () => {
-    });
+    sgworld.Analysis.verticalHeight(this.colorAll, () => { });
   },
   //楂樼▼娴嬮噺
   heightMeasure() {
-
     earthCtrl.Analysis.altitude(this.colorAll, () => { });
   },
-  //骞抽潰闈㈢Н
+  //琛ㄩ潰闈㈢Н
   planeDistance() {
     // earthCtrl.analysis.getPlaneArea(function (e) { });
+    // var colorAll = this.colorAll
+    // sgworld.Analysis.surfaceArea({
+    //   colorAll,
+    //   tin: false, // 鏄惁鏄剧ずtin涓夎缃�
+    //   onlyTerrain: false // 鏄惁鍙祴閲忕簿缁嗗湴褰�
+    // }, () => {
 
-    sgworld.Analysis.planeArea(this.colorAll, () => {
+    // });
+    earthCtrl.analysis.getSurfaceArea3d(function (e) {
+      console.info(e);
     });
-
   },
   //琛ㄩ潰璺濈
   surfaceDistance() {
-    sgworld.Analysis.horizontalDistance(this.colorAll, () => {
-    });
+    sgworld.Analysis.horizontalDistance(this.colorAll, () => { });
   },
   //鐐规极娓�
   pointRoam() {
@@ -306,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,
@@ -327,46 +726,191 @@
         },
       });
     });
+
   },
   //娓呴櫎鎸夐挳
   clearALL(id) {
-    debugger
-    id.value.forEach((e) => {
-      this.clearTopTools(e);
-    });
+    this.clearTopTools();
+    // id.value.forEach((e) => {
+
+    // });
+  },
+  setCloseEsriLayer() {
+    if (window.esriLayer) {
+      Viewer.imageryLayers.remove(window.esriLayer);
+      window.esriLayer = null
+      this.legendBox = null;
+      store.state.showlegendLayer = false;
+    }
   },
   //娓呴櫎鏂规硶
   clearTopTools(id) {
-    if (id) {
-      switch (id) {
-        case "a2":
-          break;
-        case "a3":
-          break;
-        case "b2"://璺濈娴嬮噺
-        case "b3"://闈㈢Н娴嬮噺
-        case "b4"://楂樼▼娴嬮噺
-        case "b5"://楂樺害娴嬮噺
-          sgworld.Analysis.clearMeasure()
-          break;
-        case "c2": //鐐�
-        case "c3": //鏂囧瓧
-        case "c4": //绾�
-        case "c5": //鐭╁舰
-        case "c6": //澶氳竟褰�
-          sgworld.Creator.SimpleGraphic.clear();
-          break;
-        case "d5":
-          this.toolMenu.removeFromMap();
-          break;
-        case 'f1':
-          sgworld.Creator.SimpleGraphic.clear();
-          break;
-      }
-      // this.toolFlag = null;
-      this.toolMenu = null;
+    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;
+      Viewer.scene.globe.enableLighting = false;
+      earthCtrl.shadows = false;
+      return
     }
+    if (window.Volumetric) {
+      window.Volumetric.deleteObject();
+      window.Volumetric = null;
+    }
+    if (this.localPoint) {
+      this.localPoint.deleteObject();
+      this.localPoint = null;
+    }
+    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;
+    }
+    if (this.imageryProvider) {
+      Viewer.imageryLayers.remove(this.imageryProvider)
+      this.imageryProvider = null;
+    }
+    if (window.DoubleScreen) {
+      window.DoubleScreen && window.DoubleScreen.destroy();
+      window.DoubleScreen = null;
+      const compass = document.getElementsByClassName("bottom_btn")[0];
+      compass.style.right = "70px";
+    }
+    sgworld.Analysis.clearMeasure();
+    sgworld.Creator.SimpleGraphic.clear();
+    // this.toolMenu.removeFromMap();
+    sgworld.Creator.SimpleGraphic.clear();
+    // this.toolFlag = null;
+    // this.toolMenu = null;
+    // }
+    earthCtrl.analysis.deleteObject();
   },
   clearLeftTools(res) { },
+  //绌洪棿鏌ヨ灞炴�у畾浣�
+  spaceLocation(res) {
+    var name = '绌洪棿鏌ヨ';
+    this.setClearLocation(name);
+    switch (res.type) {
+      case 'MultiPolygon':
+        for (var i in res.coordinates) {
+          this.setLocationPolygon(res.coordinates[i], name)
+        }
+        break;
+      case 'MultiLineString':
+        for (var i in res.coordinates) {
+          this.setLocationLine(res.coordinates[i], name)
+        }
+        break;
+      case 'Point':
+        this.setLocationPoint(res.coordinates, name)
+        break;
+    }
+  },
+  //娓呯┖涔嬪墠缁樺埗鍥惧舰
+  setClearLocation(res) {
+    for (var i = 0; i < window.Viewer.entities._entities._array.length; i++) {
+      if (window.Viewer.entities._entities._array[i].name == res) {
+        window.Viewer.entities.remove(window.Viewer.entities._entities._array[i])
+        i = i - 1;
+      }
+    }
+  },
+  setLocationPolygon(res, name) {
+    var position = [];
+    var geom = res[0]
+    for (var i in geom) {
+      position.push(geom[i][0], geom[i][1])
+    }
+    var locationPolygonEntity = window.Viewer.entities.add({
+      name: name,
+      polygon: {
+        hierarchy: { positions: Cesium.Cartesian3.fromDegreesArray(position) },
+        outline: true,
+        outlineWidth: 100,
+        arcType: Cesium.ArcType.RHUMB,
+        material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5),
+        outline: true, // height is required for outline to display
+        outlineColor: Cesium.Color.DODGERBLUE,
+      }
+
+    });
+    window.Viewer.flyTo(locationPolygonEntity, {
+      offset: {
+        heading: Cesium.Math.toRadians(0.0),
+        pitch: Cesium.Math.toRadians(-90),
+        range: 40
+      }
+    }
+    );
+  },
+  setLocationPoint(res, name) {
+    const position = window.Viewer.entities.add({
+      name: name,
+      position: Cesium.Cartesian3.fromDegrees(res[0], res[1]),
+      billboard: {
+        image: config.StaticFileBaseUrl + '/Workers/image/location.png',
+        // 璁剧疆璐村湴
+        heightReference: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5),
+        verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+        scale: 0.3,
+      },
+    });
+
+    window.Viewer.flyTo(position, {
+      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 = [];
+
+    for (var i in res) {
+      position.push(res[i][0], res[i][1])
+    }
+    var polyline = window.Viewer.entities.add({
+      name: name,
+      polyline: {
+        positions: Cesium.Cartesian3.fromDegreesArray(position),
+        width: 10.0,
+        material: new Cesium.PolylineOutlineMaterialProperty({
+          color: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5),
+          outlineWidth: 1,
+          outlineColor: Cesium.Color.CORNFLOWERBLUE,
+        }),
+        clampToGround: true,
+
+      },
+    })
+    window.Viewer.flyTo(polyline, {
+      offset: {
+        heading: Cesium.Math.toRadians(0.0),
+        pitch: Cesium.Math.toRadians(-90),
+        range: 0
+      }
+    }
+    );
+  }
+
 };
 export default menuTool;

--
Gitblit v1.9.3