月球大数据地理空间分析展示平台-【前端】-月球2期前端
Surpriseplus
2023-07-18 12d6cdda86f1801793c58c7693bf4664e7826ecd
src/assets/js/Map/menuTool.js
@@ -3,7 +3,7 @@
import rightServer from "./rightServer";
import config from "./config";
import CryptoJS from 'crypto-js';
import Canvas2Image from 'canvas2image'
const menuTool = {
  toolMenu: null,
  toolFlag: null,
@@ -54,15 +54,20 @@
        break;
      case "d2"://等高线分析
        this.setcontour();
        break
        break;
      case "d3"://坡度分析
        this.setSlopeMap();
        break
        break;
      case "d4": //土方量计算
        this.Volumetric();
        break;
      case "d5": //影像对比
        this.CurtainContrast();
        break;
      case "d6"://阴影分析
        this.shadowAnalysis();
        break;
      case "e1"://快照
        this.snapshot();
@@ -74,6 +79,23 @@
        this.Coordposition();
        break;
    }
  },
  shadowAnalysis() {
    if (earthCtrl.shadows) {
      Viewer.animation.container.style.visibility = "hidden";
      Viewer.timeline.container.style.visibility = "hidden";
      Viewer.clock.shouldAnimate = false;
      return earthCtrl.shadows = false
    }
    Viewer.clock.shouldAnimate = true;
    Viewer.animation.container.style.visibility = "visible";
    Viewer.timeline.container.style.visibility = "visible";
    earthCtrl.shadows = true;
  },
  setLocalPosition(res) {
    if (this.localPoint) {
@@ -103,43 +125,18 @@
      Viewer.scene.globe.enableLighting = false;
      return
    }
    Viewer.scene.globe.enableLighting = true;
    let shadingUniforms = {};
    window.material = Cesium.Material.fromType("ElevationRamp");
    shadingUniforms = material.uniforms;
    shadingUniforms.minimumHeight = -10000;
    shadingUniforms.maximumHeight = 10000;
    window.material = new Cesium.Material({
      fabric: {
        type: 'ElevationRamp',
        uniforms: {
          image: config.StaticFileBaseUrl + "/Assets/Images/color.png",
          minimumHeight: -10000,
          maximumHeight: 10000
        }
      }
    })
    Viewer.scene.globe.material = window.material
    shadingUniforms.image = this.getColorRamp();
    globe.material = material;
  },
  getColorRamp() {
    const ramp = document.createElement("canvas");
    ramp.width = 100;
    ramp.height = 1;
    const ctx = ramp.getContext("2d");
    let values = [0, 0.083, 0.166, 0.25, 0.333, 0.416, 0.5, 0.583, 0.666, 0.75, 0.833, 0.916, 0.999, 1];
    const grd = ctx.createLinearGradient(0, 0, 100, 0);
    grd.addColorStop(values[0], "rgb(56,168,0)"); //black
    grd.addColorStop(values[1], "rgb(77,179,0)"); //blue
    grd.addColorStop(values[2], "rgb(102,191,0)"); //pink
    grd.addColorStop(values[3], "rgb(126,204,0)"); //red
    grd.addColorStop(values[4], "rgb(155,217,0)"); //orange
    grd.addColorStop(values[5], "rgb(187,230,0)"); //yellow
    grd.addColorStop(values[6], "rgb(222,242,0)"); //white
    grd.addColorStop(values[7], "rgb(255,255,0)"); //white
    grd.addColorStop(values[8], "rgb(255,221,0)"); //white
    grd.addColorStop(values[9], "rgb(255,183,0)"); //white
    grd.addColorStop(values[10], "rgb(255,145,0)"); //white
    grd.addColorStop(values[11], "rgb(255,111,0)"); //white
    grd.addColorStop(values[12], "rgb(255,72,0)"); //white
    grd.addColorStop(values[13], "rgb(255,38,0)"); //white
    ctx.fillStyle = grd;
    ctx.fillRect(0, 0, 100, 1);
    return ramp;
  },
  //等高线
@@ -280,6 +277,7 @@
  },
  // 矩形正方形
  createRectangle(entity) {
    sgworld.Creator.SimpleGraphic.clear();
    this.delRectangle();
    var west = Cesium.Math.toDegrees(
      entity.rectangle._coordinates.getValue().west
@@ -300,6 +298,9 @@
    var north1 = ss[3];
    var south1 = ss[1];
    var geometry = Cesium.Rectangle.fromDegrees(west1, south1, east1, north1);
    Viewer.camera.setView({
      destination: Cesium.Rectangle.fromDegrees(west, south, east, north)
    })
    // var e = Viewer.entities.add({
    //   name: "正方",
@@ -311,29 +312,31 @@
    //     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,
    });
    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);
    // const stripeMaterial = new Cesium.StripeMaterialProperty({
    //   evenColor: Cesium.Color.WHITE.withAlpha(0.5),
    //   oddColor: Cesium.Color.BLUE.withAlpha(0.5),
    //   repeat: 5.0,
    // });
    // 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) {
@@ -387,8 +390,12 @@
  },
  //土方量计算
  Volumetric() {
    const Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
    Volumetric.startDrawing();
    if (window.Volumetric) {
      window.Volumetric.deleteObject()
      window.Volumetric = null
    }
    window.Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
    window.Volumetric.startDrawing();
  },
  //垂直高度
  verticalHeight() {
@@ -401,12 +408,20 @@
    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);
    })
  },
  //表面距离
@@ -452,32 +467,17 @@
  },
  //清除方法
  clearTopTools(id) {
    // if (id) {
    // switch (id) {
    //   case "a2":
    //     break;
    //   case "a3":
    //     break;
    //   case "b2"://距离测量
    //   case "b3"://面积测量
    //   case "b4"://高程测量
    //   case "b5"://高度测量
    if (earthCtrl.shadows) {
      Viewer.animation.container.style.visibility = "hidden";
      Viewer.timeline.container.style.visibility = "hidden";
      Viewer.clock.shouldAnimate = false;
      return earthCtrl.shadows = false
    }
    if (window.Volumetric) {
    //     break;
    //   case "c2": //点
    //   case "c3": //文字
    //   case "c4": //线
    //   case "c5": //矩形
    //   case "c6": //多边形
    //     break;
    //   case "d5":
    //     break;
    //   case 'f1':
    //     break;
    // }
      window.Volumetric.deleteObject()
      window.Volumetric = null
    }
    if (this.localPoint) {
      this.localPoint.deleteObject();
@@ -498,11 +498,12 @@
    }
    sgworld.Analysis.clearMeasure()
    sgworld.Creator.SimpleGraphic.clear();
    this.toolMenu.removeFromMap();
    // this.toolMenu.removeFromMap();
    sgworld.Creator.SimpleGraphic.clear();
    // this.toolFlag = null;
    this.toolMenu = null;
    // this.toolMenu = null;
    // }
    earthCtrl.analysis.deleteObject();
  },
  clearLeftTools(res) { },
};