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 |  964 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 900 insertions(+), 64 deletions(-)

diff --git a/src/assets/js/Map/menuTool.js b/src/assets/js/Map/menuTool.js
index e7ae2df..e8c1774 100644
--- a/src/assets/js/Map/menuTool.js
+++ b/src/assets/js/Map/menuTool.js
@@ -1,80 +1,916 @@
+import * as turf from "@turf/turf";
+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,
-    colorAll: {
-    },
-    menuTools(res) {
-        this.clearTools();
-        this.toolFlag = res.id;
-        switch (res.id) {
-            case 'a2'://鐐规极娓�
-                this.pointRoam();
-                break;
-            case 'a3'://绾挎极娓�
-                this.lineRoam();
-                break;
-            case 'b2'://琛ㄩ潰璺濈
-                this.surfaceDistance();
-                break;
-            case 'b3'://骞抽潰闈㈢Н
-                this.planeDistance();
-                break;
-            case 'b4'://楂樼▼娴嬮噺
-                this.heightMeasure();
-                break;
-            case 'b5'://鍨傜洿楂樺害
-                this.verticalHeight();
-                break;
+  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();
+        break;
+      case "a3": //绾挎极娓�
+        this.lineRoam();
+        break;
+      case "b2": //琛ㄩ潰璺濈
+        this.surfaceDistance();
+        break;
+      case "b3": //骞抽潰闈㈢Н
+        this.planeDistance();
+        break;
+      case "b4": //楂樼▼娴嬮噺
+        this.heightMeasure();
+        break;
+      case "b5": //鍨傜洿楂樺害
+        this.verticalHeight();
+        break;
+      case "c2": //鐐�
+        this.createSimpleGraphic("point");
+        break;
+      case "c3": //鏂囧瓧
+        this.createSimpleGraphic("label");
+        break;
+      case "c4": //绾�
+        this.createSimpleGraphic("polyline");
+        break;
+      case "c5": //鐭╁舰
+        this.createSimpleGraphic("rectangle");
+        break;
+      case "c6": //澶氳竟褰�
+        this.createSimpleGraphic("polygon");
+        break;
+      case "d2": //绛夐珮绾垮垎鏋�
+        this.setcontour();
+        break;
+      case "d3": //鍧″害鍒嗘瀽
+        this.setSlopeMap();
+        break;
+      case "d4": //鍦熸柟閲忚绠�
+        this.Volumetric();
+        break;
+      case "d5": //褰卞儚瀵规瘮
+        this.CurtainContrast();
+        break;
+
+      case "d6": //闃村奖鍒嗘瀽
+        this.shadowAnalysis();
+        break;
+      case "e1": //蹇収
+        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": //鍧愭爣瀹氫綅
+        this.Coordposition();
+        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])
         }
-    },
-    //鍨傜洿楂樺害
-    verticalHeight() {
+        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,
 
-    },
-    //楂樼▼娴嬮噺
-    heightMeasure() {
+          },
+        })
+        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;
+    }
 
-    },
-    //骞抽潰闈㈢Н
-    planeDistance() {
+  },
 
-    },
-    //琛ㄩ潰璺濈
-    surfaceDistance() {
+  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
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
 
-    },
-    //鐐规极娓�
-    pointRoam() {
+        var arr = [west, north, east, north, east, south, west, south, west, north];
+        this.setShowSpatialShp(arr, 'Polygon')
 
-    },
-    //绾挎极娓�
-    lineRoam() {
+        sgworld.Creator.SimpleGraphic.clear();
+
+        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==")),
+      { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }
+    ).toString();
+  },
+  //瑙e瘑
+  decr(word) {
+    return CryptoJS.enc.Utf8.stringify(
+      CryptoJS.AES.decrypt(
+        word,
+        CryptoJS.enc.Utf8.parse(base64Decode("QSNzX2xGX3NFcnZlX2sueQ==")),
+        { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }
+      )
+    ).toString();
+  },
+  //蹇収
+  snapshot() {
+    let canvas = window.Viewer.scene.canvas;
+    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(","),
+      mime = arr[0].match(/:(.*?);/)[1],
+      bstr = atob(arr[1]),
+      n = bstr.length,
+      u8arr = new Uint8Array(n);
+    while (n--) {
+      u8arr[n] = bstr.charCodeAt(n);
+    }
+    return new Blob([u8arr], { type: mime });
+  },
+  leftTools(res) {
+    this.clearLeftTools(res);
+
+    if (this.oldLeftMenuId == "l3") {
+      earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE3D;
+    }
+    this.oldLeftMenuId = res.id;
 
 
-    },
 
-    //娓呴櫎鏂规硶
-    clearTools() {
-        if (this.toolFlag) {
-            switch (this.toolFlag) {
-                case 'a2':
+    switch (res.id) {
+      case "l1":
+        store.state.isShowMap = true;
+        break;
+      case "l2":
+        store.state.isShowMap = true;
+        break;
+      case "l3": //鍦ㄧ嚎鍒跺浘
+        store.state.isShowMap = true;
+        setTimeout(() => {
+          this.setThematicMap();
+        }, 200);
 
-                    break;
-                case 'a3':
+        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;
+    }
+  },
+  //鍒犻櫎姝f柟褰�
+  delRectangle() {
+    this.squareOjb.forEach((e) => {
+      Viewer.entities.remove(e);
+    });
+  },
+  // 鐭╁舰姝f柟褰�
+  createRectangle(entity) {
+    sgworld.Creator.SimpleGraphic.clear();
+    this.delRectangle();
+    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
+    ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
 
-                    break;
-                case 'b2':
-                case 'b3':
-                case 'b4':
-                case 'b5':
+    var ss = turf.square([west, south, east, north]);
+    var west1 = ss[0];
+    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",
+        value: true,
+      });
+    }, 1000);
+  },
+  // 鍒涘缓鍥惧舰
+  createSimpleGraphic(type, scene) {
+    var that = this;
+    sgworld.Creator.createSimpleGraphic(type, {}, (entity) => {
 
-                    break;
-            }
-            this.toolFlag = null;
-            this.toolMenu = null;
+      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() {
+    window.functionForJs({
+      type: "coordLocation",
+      value: true,
+    });
+  },
+  //褰卞儚瀵规瘮
+  CurtainContrast() {
+    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() {
+    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, () => { });
+  },
+  //楂樼▼娴嬮噺
+  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 // 鏄惁鍙祴閲忕簿缁嗗湴褰�
+    // }, () => {
+
+    // });
+    earthCtrl.analysis.getSurfaceArea3d(function (e) {
+      console.info(e);
+    });
+  },
+  //琛ㄩ潰璺濈
+  surfaceDistance() {
+    sgworld.Analysis.horizontalDistance(this.colorAll, () => { });
+  },
+  //鐐规极娓�
+  pointRoam() {
+    earthCtrl.Analysis.setPointFly();
+  },
+  //绾挎极娓�
+  lineRoam() {
+    Viewer.scene.globe.depthTestAgainstTerrain = true;
+    // 缁樺埗璺嚎骞惰幏鍙栬矾寰勫姩鐢绘暟鎹�
+    earthCtrl.Command.execute(2, 3, "", (data) => {
+
+      data.showPoint = false;
+      data.showLine = true;
+      data.mode = 0;
+      // 寮圭獥鏁版嵁
+      window.PathAnimationData = {
+        flyData: data,
+      };
+      window.PathAnimationData.winIndex = layer.open({
+        type: 2,
+        title: "璺緞鍔ㄧ敾",
+        shade: false,
+        area: ["352px", "690px"],
+        offset: "r",
+        skin: "other-class",
+        content: SmartEarthRootUrl + "Workers/path/Path.html",
+        end: function () {
+          PathAnimationData.fly && PathAnimationData.fly.exit();
+        },
+      });
+    });
+
+  },
+  //娓呴櫎鎸夐挳
+  clearALL(id) {
+    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) {
+    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
+      }
+    });
+  },
 
 
-}
-export default menuTool;
\ No newline at end of file
+  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