wangyawei
2025-04-18 21b66bda2968cd73b370e826ee1154acdc6e3569
修改雨的效果
已修改4个文件
395 ■■■■■ 文件已修改
src/components/tools/Rain.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tools/Tools.vue 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/rain.js 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/tools.js 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tools/Rain.vue
@@ -1,12 +1,11 @@
<template>
  <el-form :model="form" label-width="80px" class="terrain-settings">
    <el-form-item label="大小">
      <el-slider
        :step="0.1"
        v-model="form.rainSize"
        :min="0"
        :max="1"
      ></el-slider>
      <el-slider :step="0.1" v-model="form.rainSize" :min="0" :max="1"></el-slider>
    </el-form-item>
    <el-form-item label="密度:">
      <el-slider :step="10" :min="10" :max="200" v-model="form.rainDensity">
      </el-slider>
    </el-form-item>
    <el-form-item label="速度">
      <el-slider v-model="form.rainSpeed" :min="0" :max="150"></el-slider>
@@ -22,6 +21,7 @@
const form = reactive({
  rainSize: 0.5,
  rainSpeed: 50,
  rainDensity: 30,
  rainColor: "#99B3CC",
});
src/components/tools/Tools.vue
@@ -4,87 +4,35 @@
    <div class="tools-title" @click="toggleCollapse">
      工具栏
      <div class="popup-menu" v-if="isPopupVisible">
        <div
          class="popup-item"
          v-for="(option, idx) in currentToolOptions"
          :key="idx"
          @click="handleOptionClick(option)"
        >
          <img
            class="popup-icon"
            :src="
        <div class="popup-item" v-for="(option, idx) in currentToolOptions" :key="idx" @click="handleOptionClick(option)">
          <img class="popup-icon" :src="
              require(`../../assets/img/tools/tools_second/${option.icon}.png`)
            "
            :alt="option.name"
          />
            " :alt="option.name" />
          {{ option.name }}
        </div>
      </div>
      <LayerTree class="popup-menu" v-show="showLayerTree" />
      <!-- 可视域分析 -->
      <seeAnalyze
        :option="option"
        v-show="seeAnalyzeShow"
        @update:showConeLine="handleUpdateShowConeLine"
        @update-option="onUpdateOption"
        @draw="onDraw"
        @clear="onClear"
        class="popup-menu-see"
      />
      <seeAnalyze :option="option" v-show="seeAnalyzeShow" @update:showConeLine="handleUpdateShowConeLine" @update-option="onUpdateOption" @draw="onDraw" @clear="onClear" class="popup-menu-see" />
      <!-- 剖面提取 -->
      <TopographyDia
        @draw="handleDraw"
        @clear="handleClear"
        class="popup-menu-see"
        v-show="topographyShow"
      />
      <TopographyDia @draw="handleDraw" @clear="handleClear" class="popup-menu-see" v-show="topographyShow" />
      <!-- 剖面提取的echarts -->
      <div v-show="echartsShow" id="sectionCharts" class="sectionChars">
        <div id="echartsView1" style="width: 100%; height: 100%"></div>
      </div>
      <!-- 坡度坡向分析 -->
      <Aspect
        v-show="showAspect"
        @draw="SlopeArrow"
        @clear="SlopeArrowClose"
        @handleaspect="handleaspect"
        @handleSlope="handleSlope"
        class="popup-menu-see"
      />
      <SlopeAnalysis
        @draw="SlopeAnalysiss"
        v-show="isContourLabel"
        class="popup-menu-see"
        @update-slope="onUpdateSlope"
      />
      <Aspect v-show="showAspect" @draw="SlopeArrow" @clear="SlopeArrowClose" @handleaspect="handleaspect" @handleSlope="handleSlope" class="popup-menu-see" />
      <SlopeAnalysis @draw="SlopeAnalysiss" v-show="isContourLabel" class="popup-menu-see" @update-slope="onUpdateSlope" />
      <!-- 雨 -->
      <Rain
        v-show="showRain"
        class="popup-menu-see"
        @update-rain="onUpdateRain"
      />
      <Snow
        v-show="showSnow"
        class="popup-menu-see"
        @update-snow="onUpdateSnow"
      />
      <Rain v-show="showRain" class="popup-menu-see" @update-rain="onUpdateRain" />
      <Snow v-show="showSnow" class="popup-menu-see" @update-snow="onUpdateSnow" />
    </div>
    <!-- 工具栏内容 -->
    <transition name="fade">
      <div v-if="!isCollapsed" class="tools-content">
        <div
          class="tools-item"
          v-for="(item, index) in toolList"
          :key="index"
          @click.stop="handleClick(item)"
        >
          <img
            class="icon"
            :src="require(`../../assets/img/tools/${item.icon}.png`)"
            :title="item.name"
            alt=""
          />
        <div class="tools-item" v-for="(item, index) in toolList" :key="index" @click.stop="handleClick(item)">
          <img class="icon" :src="require(`../../assets/img/tools/${item.icon}.png`)" :title="item.name" alt="" />
        </div>
      </div>
    </transition>
@@ -103,7 +51,7 @@
import Snow from "@/components/tools/Snow.vue";
// 切换展开/收缩状态
function toggleCollapse() {
function toggleCollapse () {
  // isCollapsed.value = !isCollapsed.value;
}
@@ -198,7 +146,7 @@
]);
// 处理工具点击事件
function handleClick(tool, event) {
function handleClick (tool, event) {
  // 遍历工具列表,更新激活状态
  toolList.value.forEach((item) => {
    item.active = item.name === tool.name && currentToolOptions.value !== tool.options;
@@ -240,7 +188,7 @@
const currentOption = ref(null);
// 处理弹窗选项点击事件
function handleOptionClick(option) {
function handleOptionClick (option) {
  isPopupVisible.value = false;
  currentOption.value = option.name;
  console.log("Selected option:", currentOption.value);
@@ -344,13 +292,13 @@
};
// 处理子组件传来的可视域显示锥线的值
function handleUpdateShowConeLine(value) {
function handleUpdateShowConeLine (value) {
  showConeLine.value = value;
  mapUtils.showSyfxViewCone(showConeLine.value);
}
// 鼠标绘制可视域
function onDraw() {
function onDraw () {
  // 定义回调函数,用于接收 res 并更新 option
  const callback = (res) => {
    option.heading = res.heading;
@@ -361,7 +309,7 @@
}
// 清除可视域
function onClear() {
function onClear () {
  mapUtils.syfxqc(option);
}
@@ -448,6 +396,7 @@
  rainSize: 0.5,
  rainSpeed: 50,
  rainColor: "#99B3CC",
  rainDensity: 30 // 雨的密度
});
const onUpdateRain = (newOption) => {
  console.log(newOption, "new");
src/utils/rain.js
@@ -6,6 +6,7 @@
    this.tiltAngle = Cesium.defaultValue(options.tiltAngle, -0.6);
    this.rainSize = Cesium.defaultValue(options.rainSize, 0.3);
    this.rainSpeed = Cesium.defaultValue(options.rainSpeed, 60.0);
    this.rainDensity = Cesium.defaultValue(options.rainSpeed, 30.0);
    this.color = Cesium.defaultValue(options.color, new Cesium.Color(0.6, 0.7, 0.8, 1.0));
    this.viewer = viewer;
    this.init();
@@ -28,6 +29,9 @@
        rainSpeed: () => {
          return this.rainSpeed;
        },
        rainDensity: () => {
          return this.rainDensity;
        },
      },
    });
    this.viewer.scene.postProcessStages.add(this.rainStage);
@@ -49,7 +53,6 @@
  show(visible) {
    this.rainStage.enabled = visible;
  }
  rain() {
    return "uniform sampler2D colorTexture;\n\
              in vec2 v_textureCoordinates;\n\
@@ -57,6 +60,7 @@
              uniform vec4 rainColor;\n\
              uniform float rainSize;\n\
              uniform float rainSpeed;\n\
              uniform float rainDensity;\n\
              float hash(float x) {\n\
                  return fract(sin(x * 133.3) * 13.13);\n\
              }\n\
@@ -69,11 +73,20 @@
                  float a = tiltAngle;\n\
                  float si = sin(a), co = cos(a);\n\
                  uv *= mat2(co, -si, si, co);\n\
                   uv *= length(uv + vec2(0, 4.9)) / (rainSize * 3.0 + 0.1) + 0.5;\n\
                  float v = 1. - sin(hash(floor(uv.x * 100.)) * 2.);\n\
                  float b = clamp(abs(sin(20. * time * v + uv.y * (5. / (2. + v)))) - .95, 0., 1.) * 20.;\n\
                  c *= v * b;\n\
                  fragColor = mix(texture(colorTexture, v_textureCoordinates), vec4(c, 1), .5);\n\
                  uv *= length(uv + vec2(0, 4.9)) / (rainSize * 3.0 + 0.1) + 0.5;\n\
                  // 限制最大密度值,使用对数函数来压缩高密度范围\n\
                  float cappedDensity = min(rainDensity, 30.0 + (rainDensity - 30.0) * 0.1);\n\
                  float densityScale = pow(cappedDensity / 200.0, 0.4); // 使用0.4次幂进一步压缩\n\
                  // 减少基础雨滴数量\n\
                  float v = 1. - sin(hash(floor(uv.x * (25.0 + densityScale * 50.0))) * 2.);\n\
                  // 使用更严格的阈值函数,让高密度时增加更少的雨\n\
                  float densityThreshold = 0.96 - (0.15 * log(1.0 + cappedDensity / 50.0));\n\
                  float b = clamp(abs(sin(20. * time * v + uv.y * (5. / (2. + v)))) - densityThreshold, 0., 1.) * 20.;\n\
                  // 计算雨滴颜色\n\
                  vec3 finalColor = rainColor.rgb * v * b;\n\
                  // 调整混合系数\n\
                  float mixFactor = min(b * 0.05, 0.5);\n\
                  fragColor = mix(texture(colorTexture, v_textureCoordinates), vec4(finalColor, 1), mixFactor);\n\
              }\n\
              ";
  }
src/utils/tools.js
@@ -2,8 +2,8 @@
// import cameraIcon from "../assets/images/base/视频测点.png"
// import cameraIconSel from "../assets/images/base/视频测点sel.png"
import { ElLoading, ElMessage } from "element-plus";
import RainEffect from './rain'
import SnowEffect from './snow'
import RainEffect from "./rain";
import SnowEffect from "./snow";
let layerIsOpen = false;
const Cesium = SmartEarth.Cesium;
const colorAll = {
@@ -32,7 +32,7 @@
    return this;
  },
  hexToColor(hexColor) {
    const hex = hexColor.replace('#', '');
    const hex = hexColor.replace("#", "");
    const r = parseInt(hex.substring(0, 2), 16) / 255;
    const g = parseInt(hex.substring(2, 4), 16) / 255;
    const b = parseInt(hex.substring(4, 6), 16) / 255;
@@ -41,8 +41,8 @@
  // 清除天气特效
  delRain() {
    if (this.rainEffect) {
      this.rainEffect.destroy()
      this.rainEffect = null
      this.rainEffect.destroy();
      this.rainEffect = null;
    }
  },
  delSnow() {
@@ -53,22 +53,23 @@
  },
  // 雨天模拟
  toggleRain(option, show) {
    console.log(option, 'option')
    console.log(option, "option");
    // 先销毁旧实例
    if (this.rainEffect) {
      this.rainEffect.destroy()
      this.rainEffect = null
      this.rainEffect.destroy();
      this.rainEffect = null;
    }
    this.rainEffect = new RainEffect(earthCtrl.viewer, {
      tiltAngle: -0.2, //倾斜角度
      rainSize: option.rainSize, // 雨的大小
      rainSpeed: option.rainSpeed, // 雨的速度
      color: this.hexToColor(option.rainColor)  // 雨的颜色
    })
      rainDensity: option.rainDensity, // 雨的密度
      color: this.hexToColor(option.rainColor), // 雨的颜色
    });
  },
  // 雪天模拟
  toggleSnow(option = {}, show = true) {
    console.log(option, 'option');
    console.log(option, "option");
    const defaultOption = {
      snowSize: 0.02, // 默认雪的大小
      snowSpeed: 100.0, // 默认雪的速度
@@ -95,14 +96,12 @@
    this.regionTerrain = earthCtrl.factory.createRegionTerrain({});
    this.polygonPosition = [];
    const draw = earthCtrl.shapeTool.createDrawShapeTool((e) => {
    const draw = earthCtrl.shapeTool.createDrawShapeTool(e => {
      const polygonI = [];
      for (const i of e.result) {
        const ellipsoid = earthCtrl.coreMap.scene.globe.ellipsoid;
        const cartographic = ellipsoid.cartesianToCartographic(i);
        const lon = SmartEarth.Cesium.Math.toDegrees(
          cartographic.longitude
        ); // 经度
        const lon = SmartEarth.Cesium.Math.toDegrees(cartographic.longitude); // 经度
        const lat = SmartEarth.Cesium.Math.toDegrees(cartographic.latitude); // 纬度
        polygonI.push(lon, lat, 0);
        this.polygonPosition.push(lon, lat);
@@ -119,7 +118,7 @@
  // 坡度分析
  pdfx() {
    if (this.regionTerrain) {
      console.log('坡度分析');
      console.log("坡度分析");
      this.clearPreviousAnalysis(); // 先清除之前的分析
      this.regionTerrain.setType("slope");
      this.regionTerrain.update();
@@ -172,7 +171,7 @@
    if (show) {
      earthCtrl.factory.createSimpleGraphic(pic, {}, function (entity) {
        console.log(entity, "entity");
        window.Viewer = earthCtrl.viewer
        window.Viewer = earthCtrl.viewer;
        //开启编辑并启用属性弹窗
        earthCtrl.factory.SimpleGraphic.edit(true, {
          editProp: true,
@@ -188,7 +187,7 @@
  //  水平测量
  spjl() {
    earthCtrl.measure.horizontalDistance(colorAll, (e) => {
    earthCtrl.measure.horizontalDistance(colorAll, e => {
      console.log(e);
    }).onEnd = () => {
      console.log("水平测距已完成");
@@ -196,15 +195,15 @@
  },
  //直线测量
  jl() {
    earthCtrl.measure.lineDistance(colorAll, (e) => {
      console.log(e)
    earthCtrl.measure.lineDistance(colorAll, e => {
      console.log(e);
    }).onEnd = () => {
      console.log("直线测量已完成");
    };
  },
  // 垂直测量
  czgd() {
    earthCtrl.measure.height(colorAll, (e) => {
    earthCtrl.measure.height(colorAll, e => {
      console.log(e);
    }).onEnd = () => {
      console.log("垂直测距已完成");
@@ -212,20 +211,22 @@
  },
  //面积测量
  mjcl() {
    earthCtrl.measure.surfaceArea({
      ...colorAll,
      tin: true, // 是否显示tin三角网
      onlyTerrain: false // 是否只测量精细地形
    }, (e) => {
      console.log(e)
    }).onEnd = () => {
      console.log('面积测量已完成')
    }
    earthCtrl.measure.surfaceArea(
      {
        ...colorAll,
        tin: true, // 是否显示tin三角网
        onlyTerrain: false, // 是否只测量精细地形
      },
      e => {
        console.log(e);
      }
    ).onEnd = () => {
      console.log("面积测量已完成");
    };
  },
  // 清除测量
  clear() {
    earthCtrl.measure.clearResult()
    earthCtrl.measure.clearResult();
  },
  syfx(option) {
    this.viewShedTool = earthCtrl.analysis.createViewShed({
@@ -244,7 +245,7 @@
    if (!this.viewShedTool) {
      this.syfx(option);
    }
    this.viewShedTool.mouseCreate().then((res) => {
    this.viewShedTool.mouseCreate().then(res => {
      callback(res);
    });
  },
@@ -299,7 +300,7 @@
        polyline: Cesium.Color.fromCssColorString("#ffff0050"),
        polygon: Cesium.Color.fromCssColorString("#ffff0050"),
      },
      (e) => { }
      e => {}
    );
  },
  qxcl() {
@@ -309,7 +310,7 @@
        polyline: Cesium.Color.fromCssColorString("#ffff0050"),
        polygon: Cesium.Color.fromCssColorString("#ffff0050"),
      },
      (e) => { }
      e => {}
    );
  },
  fwjcl() {
@@ -319,7 +320,7 @@
        polyline: Cesium.Color.fromCssColorString("#ffff0050"),
        polygon: Cesium.Color.fromCssColorString("#ffff0050"),
      },
      (e) => { }
      e => {}
    );
  },
  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>场景截图<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
@@ -374,14 +375,12 @@
    this.earthCtrl.factory.createSimpleGraphic(
      "polygon",
      { showSize: false, removeEdit: true },
      (entity) => {
        let postitions = entity.polygon.hierarchy
          .getValue()
          .positions.reduce((obj, cur) => {
            let lonlat = this.cartesainToDegrees(cur);
            obj.push([lonlat.lng, lonlat.lat]);
            return obj;
          }, []);
      entity => {
        let postitions = entity.polygon.hierarchy.getValue().positions.reduce((obj, cur) => {
          let lonlat = this.cartesainToDegrees(cur);
          obj.push([lonlat.lng, lonlat.lat]);
          return obj;
        }, []);
        //多变形闭环
        postitions.push(postitions[0]);
        let gridRadius = 0.05;
@@ -423,7 +422,7 @@
        }
        hexres.features.forEach((item, index) => {
          if (turf.booleanContains(polygon, item)) {
            let newArr = item.geometry.coordinates[0].map((el) => {
            let newArr = item.geometry.coordinates[0].map(el => {
              return Cesium.Cartesian3.fromDegrees(el[0], el[1]);
            });
            //网格面
@@ -499,112 +498,87 @@
      this.RestrictTheHeight.removeFromMap();
      this.RestrictTheHeight = null;
    }
    earthCtrl.factory.createSimpleGraphic(
      "polygon",
      { showSize: false },
      (entity) => {
        let arr = [];
        entity.polygon.hierarchy.getValue().positions.forEach((position) => {
          let cartographic =
            SmartEarth.Cesium.Cartographic.fromCartesian(position);
          let lat = SmartEarth.Cesium.Math.toDegrees(cartographic.latitude);
          let lng = SmartEarth.Cesium.Math.toDegrees(cartographic.longitude);
          arr.push(lng, lat);
        });
        this.earthCtrl.viewer.entities.remove(entity);
        if (viewer.terrainProvider) {
          Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, [
            Cesium.Cartographic.fromDegrees(arr[0], arr[1]),
          ]).then((updatedPositions) => {
            this.RestrictTheHeight = earthCtrl.analysis.createRestrictTheHeight(
              {
                positions: arr,
                baseHeight: baseHeigh + updatedPositions[0].height,
                // color: SmartEarth.Cesium.Color.GREEN.withAlpha(0.5),
                color:
                  SmartEarth.Cesium.Color.fromCssColorString(
                    "#ff1515"
                  ).withAlpha(0.5),
              }
            );
          });
        } else {
    earthCtrl.factory.createSimpleGraphic("polygon", { showSize: false }, entity => {
      let arr = [];
      entity.polygon.hierarchy.getValue().positions.forEach(position => {
        let cartographic = SmartEarth.Cesium.Cartographic.fromCartesian(position);
        let lat = SmartEarth.Cesium.Math.toDegrees(cartographic.latitude);
        let lng = SmartEarth.Cesium.Math.toDegrees(cartographic.longitude);
        arr.push(lng, lat);
      });
      this.earthCtrl.viewer.entities.remove(entity);
      if (viewer.terrainProvider) {
        Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, [
          Cesium.Cartographic.fromDegrees(arr[0], arr[1]),
        ]).then(updatedPositions => {
          this.RestrictTheHeight = earthCtrl.analysis.createRestrictTheHeight({
            positions: arr,
            baseHeight: baseHeigh,
            color:
              SmartEarth.Cesium.Color.fromCssColorString("#ff1515").withAlpha(
                0.5
              ),
            baseHeight: baseHeigh + updatedPositions[0].height,
            // color: SmartEarth.Cesium.Color.GREEN.withAlpha(0.5),
            color: SmartEarth.Cesium.Color.fromCssColorString("#ff1515").withAlpha(0.5),
          });
        }
        });
      } else {
        this.RestrictTheHeight = earthCtrl.analysis.createRestrictTheHeight({
          positions: arr,
          baseHeight: baseHeigh,
          color: SmartEarth.Cesium.Color.fromCssColorString("#ff1515").withAlpha(0.5),
        });
      }
    );
    });
  },
  hcqfxPoint(width) {
    const pointGraphic = earthCtrl.factory.createSimpleGraphic(
      "point",
      {},
      (entity) => {
        const position = entity.position.getValue();
        const { lng, lat } = this.transformCartesianToCoord(position);
        const pointBuffer = earthCtrl.analysis.createBufferAnalysis({
          position: [lng, lat],
          color: SmartEarth.Cesium.Color.YELLOW.withAlpha(0.5),
          radius: width / 1000,
        });
        pointBuffer.initBuffer();
        this.Buffers.push(pointBuffer);
      }
    );
    const pointGraphic = earthCtrl.factory.createSimpleGraphic("point", {}, entity => {
      const position = entity.position.getValue();
      const { lng, lat } = this.transformCartesianToCoord(position);
      const pointBuffer = earthCtrl.analysis.createBufferAnalysis({
        position: [lng, lat],
        color: SmartEarth.Cesium.Color.YELLOW.withAlpha(0.5),
        radius: width / 1000,
      });
      pointBuffer.initBuffer();
      this.Buffers.push(pointBuffer);
    });
  },
  hcqfxLine(width) {
    this.earthCtrl.factory.createSimpleGraphic(
      "polyline",
      { showSize: false },
      (entity) => {
        const positions = entity.polyline.positions.getValue();
        let coordinates = [];
        for (let i = 0; i < positions.length; i++) {
          const { lng, lat } = this.transformCartesianToCoord(positions[i]);
          coordinates.push(lng, lat);
        }
        const polulineBuffer = earthCtrl.analysis.createBufferAnalysis({
          position: coordinates,
          color: SmartEarth.Cesium.Color.YELLOW.withAlpha(0.5),
          radius: width / 1000,
        });
        polulineBuffer.initPolylineBuffer();
        this.Buffers.push(polulineBuffer);
    this.earthCtrl.factory.createSimpleGraphic("polyline", { showSize: false }, entity => {
      const positions = entity.polyline.positions.getValue();
      let coordinates = [];
      for (let i = 0; i < positions.length; i++) {
        const { lng, lat } = this.transformCartesianToCoord(positions[i]);
        coordinates.push(lng, lat);
      }
    );
      const polulineBuffer = earthCtrl.analysis.createBufferAnalysis({
        position: coordinates,
        color: SmartEarth.Cesium.Color.YELLOW.withAlpha(0.5),
        radius: width / 1000,
      });
      polulineBuffer.initPolylineBuffer();
      this.Buffers.push(polulineBuffer);
    });
  },
  hcqfxPolygon(width) {
    this.earthCtrl.factory.createSimpleGraphic(
      "polygon",
      { showSize: false },
      (entity) => {
        let positions = entity.polygon.hierarchy.getValue().positions;
        let coordinates = [];
        for (let i = 0; i < positions.length; i++) {
          const { lng, lat } = this.transformCartesianToCoord(positions[i]);
          coordinates.push(lng, lat);
        }
        const { lng, lat } = this.transformCartesianToCoord(positions[0]);
    this.earthCtrl.factory.createSimpleGraphic("polygon", { showSize: false }, entity => {
      let positions = entity.polygon.hierarchy.getValue().positions;
      let coordinates = [];
      for (let i = 0; i < positions.length; i++) {
        const { lng, lat } = this.transformCartesianToCoord(positions[i]);
        coordinates.push(lng, lat);
        const polygonBuffer = earthCtrl.analysis.createBufferAnalysis({
          position: coordinates,
          color: SmartEarth.Cesium.Color.YELLOW.withAlpha(0.5),
          radius: width / 1000,
        });
        polygonBuffer.initPolylineBuffer();
        this.Buffers.push(polygonBuffer);
      }
    );
      const { lng, lat } = this.transformCartesianToCoord(positions[0]);
      coordinates.push(lng, lat);
      const polygonBuffer = earthCtrl.analysis.createBufferAnalysis({
        position: coordinates,
        color: SmartEarth.Cesium.Color.YELLOW.withAlpha(0.5),
        radius: width / 1000,
      });
      polygonBuffer.initPolylineBuffer();
      this.Buffers.push(polygonBuffer);
    });
  },
  // 动态视域分析
  dtsyfxPoint(callback) {
    earthCtrl.factory.createSimpleGraphic("point", {}, (entity) => {
    earthCtrl.factory.createSimpleGraphic("point", {}, entity => {
      let position = entity.position.getValue();
      let coord = this.transformCartesianToCoord(position);
      this.earthCtrl.viewer.entities.remove(entity);
@@ -707,9 +681,9 @@
  polygonArray: [],
  selectedEntity: null, //选中的实体
  addPointToMap(row) {
    const filteArr = this.pointsArray.filter((item) => item.type == row.type);
    const filteArr = this.pointsArray.filter(item => item.type == row.type);
    if (filteArr.length > 0) {
      filteArr.forEach((item) => {
      filteArr.forEach(item => {
        item.entity.show = true;
      });
      return;
@@ -750,9 +724,9 @@
    });
  },
  hidePointByType(row) {
    const filteArr = this.pointsArray.filter((item) => item.type == row.type);
    const filteArr = this.pointsArray.filter(item => item.type == row.type);
    if (filteArr.length > 0) {
      filteArr.forEach((item) => {
      filteArr.forEach(item => {
        item.entity.show = false;
      });
    }
@@ -770,14 +744,14 @@
    callback(poiInfo);
  },
  setSelectedEntity(entity) {
    this.pointsArray.forEach((item) => {
    this.pointsArray.forEach(item => {
      if (item.id === entity.id) {
        item.entity.billboard.image = cameraIconSel;
      }
    });
  },
  clearSelectedEntityStyle(entity) {
    this.pointsArray.forEach((item) => {
    this.pointsArray.forEach(item => {
      if (item.id === entity.id) {
        item.entity.billboard.image = cameraIcon;
      }
@@ -791,7 +765,7 @@
    }
  },
  createPolygonArea(item) {
    const findItem = this.polygonArray.find((row) => row.id === item.id);
    const findItem = this.polygonArray.find(row => row.id === item.id);
    if (findItem) {
      earthCtrl.viewer.flyTo(findItem.polygon);
      return;
@@ -806,9 +780,7 @@
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
      },
    });
    var polyPositions = curPolygon.polygon.hierarchy.getValue(
      Cesium.JulianDate.now()
    ).positions;
    var polyPositions = curPolygon.polygon.hierarchy.getValue(Cesium.JulianDate.now()).positions;
    var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center; //中心点
    polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter);
    curPolygon.position = polyCenter;
@@ -840,7 +812,7 @@
    this.polygonArray.push(obj);
  },
  clearPoygon() {
    this.polygonArray.forEach((item) => {
    this.polygonArray.forEach(item => {
      earthCtrl.viewer.entities.remove(item.polygon);
      earthCtrl.viewer.entities.remove(item.polyline);
    });
@@ -883,7 +855,7 @@
    if (graphic) {
      graphic.clear();
    }
    this.Buffers.map((item) => {
    this.Buffers.map(item => {
      item.removeFromMap();
    });
    this.Buffers = [];
@@ -927,10 +899,7 @@
      GroupID: 0,
      url: SmartEarthRootUrl + "Workers/image/waterNormals.jpg",
    };
    this.analysisFlood = earthCtrl.analysis.createSubmergence(
      method,
      (value) => { }
    );
    this.analysisFlood = earthCtrl.analysis.createSubmergence(method, value => {});
  },
  clearFlood() {
    this.analysisFlood && this.analysisFlood.endWater();