wangjuncheng
2025-04-18 f82eb01fe65e513fb43342db0e25cafa0e0d2db8
src/utils/tools.js
@@ -3,6 +3,7 @@
// import cameraIconSel from "../assets/images/base/视频测点sel.png"
import { ElLoading, ElMessage } from "element-plus";
import RainEffect from './rain'
import SnowEffect from './snow'
let layerIsOpen = false;
const Cesium = SmartEarth.Cesium;
const colorAll = {
@@ -21,6 +22,10 @@
  slopeArrow: null,
  elevationTool: null,
  rainEffect: null,
  snowEffect: null, // 新增雪效果实例
  regionTerrain: null,
  polygonPosition: [],
  PolygonArr: [],
  init(earthCtrl) {
    this.earthCtrl = earthCtrl;
@@ -33,7 +38,20 @@
    const b = parseInt(hex.substring(4, 6), 16) / 255;
    return new Cesium.Color(r, g, b, 1.0);
  },
  // 天气
  // 清除天气特效
  delRain() {
    if (this.rainEffect) {
      this.rainEffect.destroy()
      this.rainEffect = null
    }
  },
  delSnow() {
    if (this.snowEffect) {
      this.snowEffect.destroy();
      this.snowEffect = null;
    }
  },
  // 雨天模拟
  toggleRain(option, show) {
    console.log(option, 'option')
    // 先销毁旧实例
@@ -48,76 +66,107 @@
      color: this.hexToColor(option.rainColor)  // 雨的颜色
    })
  },
  // 坡度分析
  pdfx(option) {
    this.elevationTool = new SmartEarth.ElevationTool(earthCtrl)
    if (option.terrainRender == '1') {
      this.elevationTool.type = 'slope'
    } else {
      this.elevationTool.type = 'none'
  // 雪天模拟
  toggleSnow(option = {}, show = true) {
    console.log(option, 'option');
    const defaultOption = {
      snowSize: 0.02, // 默认雪的大小
      snowSpeed: 100.0, // 默认雪的速度
      snowColor: "#ffffff", // 默认颜色:白色
    };
    option = { ...defaultOption, ...option };
    if (this.snowEffect) {
      this.snowEffect.destroy();
      this.snowEffect = null;
    }
    this.elevationTool.tf = option.contourLines
    this.elevationTool.setSpacing(option.spacing)
    this.elevationTool.setWidth(option.lineWidth)
    this.elevationTool.setContourColor(option.color);
    this.elevationTool.render();
    console.log(this.elevationTool, 'eleelelelelelelel')
  },
  // 坡向箭头
  pxjt(colors, angles) {
    this.slopeArrow = earthCtrl.factory.createSlopeArrow({});
    this.slopeArrow.setColorsAndAngles(colors, angles);
    this.snowEffect = new SnowEffect(earthCtrl.viewer, {
      snowSize: option.snowSize, // 雪的大小
      snowSpeed: option.snowSpeed, // 雪的速度
      snowColor: this.hexToColor(option.snowColor), // 雪的颜色
    });
    // 创建绘制工具
    const drawTool = earthCtrl.shapeTool.createDrawShapeTool((e) => {
    // 控制显示/隐藏
    if (this.snowEffect) {
      this.snowEffect.show(show);
    }
  },
  // 区域划分工具
  hfqy() {
    this.regionTerrain = earthCtrl.factory.createRegionTerrain({});
    this.polygonPosition = [];
    const draw = earthCtrl.shapeTool.createDrawShapeTool((e) => {
      const polygonI = [];
      const polygonPosition = [];
      for (const i of e.result) {
        const ellipsoid = earthCtrl.coreMap.scene.globe.ellipsoid;
        const cartographic = ellipsoid.cartesianToCartographic(i);
        const lon = Cesium.Math.toDegrees(cartographic.longitude);
        const lat = Cesium.Math.toDegrees(cartographic.latitude); // 纬度
        const lon = SmartEarth.Cesium.Math.toDegrees(
          cartographic.longitude
        ); // 经度
        const lat = SmartEarth.Cesium.Math.toDegrees(cartographic.latitude); // 纬度
        polygonI.push(lon, lat, 0);
        polygonPosition.push(lon, lat);
        this.polygonPosition.push(lon, lat);
      }
      const PolygonArr = [];
      PolygonArr.push({
      this.PolygonArr.push({
        id: earthCtrl.factory.createUUID(),
        polygon: polygonI,
      });
      // 清除绘制工具
      drawTool.removeFromMap();
      // 设置坡度箭头的位置和类型
      this.slopeArrow.setPositions(polygonPosition);
      this.slopeArrow.setSlopeType(1);
      this.slopeArrow.setRegionEnabled(true);
      console.log(this.slopeArrow, 'slope')
      draw.removeFromMap();
      this.regionTerrain.setPositions(this.polygonPosition);
      this.regionTerrain.setRegionEnabled(true);
    });
  },
  // 关闭坡向箭头
  gbpxjt() {
  // 坡度分析
  pdfx() {
    if (this.regionTerrain) {
      console.log('坡度分析');
      this.clearPreviousAnalysis(); // 先清除之前的分析
      this.regionTerrain.setType("slope");
      this.regionTerrain.update();
    }
  },
  // 坡向箭头
  pxjt(colors, angles) {
    if (this.regionTerrain) {
      this.clearPreviousAnalysis(); // 先清除之前的分析
      this.regionTerrain.setType("aspect");
      this.regionTerrain.update();
    }
    this.slopeArrow = earthCtrl.factory.createSlopeArrow({});
    this.slopeArrow.setColorsAndAngles(colors, angles);
    this.slopeArrow.setSlopeType(1);
  },
  // 等高线分析
  dgxfx(option) {
    this.clearPreviousAnalysis(); // 先清除之前的分析
    this.hfqy();
    this.elevationTool = new SmartEarth.ElevationTool(earthCtrl);
    this.elevationTool.tf = option.contourLines;
    this.elevationTool.setSpacing(option.spacing);
    this.elevationTool.setWidth(option.lineWidth);
    this.elevationTool.setContourColor(option.color);
    this.elevationTool.render();
  },
  // 清除之前的分析(坡度、坡向、等高线)
  clearPreviousAnalysis() {
    if (this.regionTerrain) {
      this.regionTerrain.setType("");
      this.regionTerrain.update();
    }
    if (this.slopeArrow) {
      this.slopeArrow.setSlopeType(0);
      // this.slopeArrow = null;
    }
    if (this.elevationTool) {
      this.elevationTool = null;
    }
  },
  toggleSnow(weather = "snow", show) {
    if (show) {
      earthCtrl.environment.showEffect(weather);
    } else {
      let snowValue = {
        test1: 2,
        test2: 1.0,
        test3: 0.5,
        test4: 0.5,
      };
      earthCtrl.environment.disableEffect(weather);
    }
  },
  // 标绘
  CreateLabel(pic, show) {
    if (show) {