wangjuncheng
2025-04-21 51af02271fe8a6d3e2db7bef90df1ea5f571a173
src/utils/tools.js
@@ -96,7 +96,7 @@
    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;
@@ -170,7 +170,7 @@
  CreateLabel(pic, show) {
    if (show) {
      earthCtrl.factory.createSimpleGraphic(pic, {}, function (entity) {
        console.log(entity, "entity");
        console.log(entity.polyline.positions.getValue(), "entity");
        window.Viewer = earthCtrl.viewer;
        //开启编辑并启用属性弹窗
        earthCtrl.factory.SimpleGraphic.edit(true, {
@@ -187,7 +187,7 @@
  //  水平测量
  spjl() {
    earthCtrl.measure.horizontalDistance(colorAll, e => {
    earthCtrl.measure.horizontalDistance(colorAll, (e) => {
      console.log(e);
    }).onEnd = () => {
      console.log("水平测距已完成");
@@ -195,7 +195,7 @@
  },
  //直线测量
  jl() {
    earthCtrl.measure.lineDistance(colorAll, e => {
    earthCtrl.measure.lineDistance(colorAll, (e) => {
      console.log(e);
    }).onEnd = () => {
      console.log("直线测量已完成");
@@ -203,7 +203,7 @@
  },
  // 垂直测量
  czgd() {
    earthCtrl.measure.height(colorAll, e => {
    earthCtrl.measure.height(colorAll, (e) => {
      console.log(e);
    }).onEnd = () => {
      console.log("垂直测距已完成");
@@ -217,7 +217,7 @@
        tin: true, // 是否显示tin三角网
        onlyTerrain: false, // 是否只测量精细地形
      },
      e => {
      (e) => {
        console.log(e);
      }
    ).onEnd = () => {
@@ -245,7 +245,7 @@
    if (!this.viewShedTool) {
      this.syfx(option);
    }
    this.viewShedTool.mouseCreate().then(res => {
    this.viewShedTool.mouseCreate().then((res) => {
      callback(res);
    });
  },
@@ -300,7 +300,7 @@
        polyline: Cesium.Color.fromCssColorString("#ffff0050"),
        polygon: Cesium.Color.fromCssColorString("#ffff0050"),
      },
      e => {}
      (e) => {}
    );
  },
  qxcl() {
@@ -310,7 +310,7 @@
        polyline: Cesium.Color.fromCssColorString("#ffff0050"),
        polygon: Cesium.Color.fromCssColorString("#ffff0050"),
      },
      e => {}
      (e) => {}
    );
  },
  fwjcl() {
@@ -320,7 +320,7 @@
        polyline: Cesium.Color.fromCssColorString("#ffff0050"),
        polygon: Cesium.Color.fromCssColorString("#ffff0050"),
      },
      e => {}
      (e) => {}
    );
  },
  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>场景截图<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
@@ -375,12 +375,14 @@
    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;
@@ -422,7 +424,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]);
            });
            //网格面
@@ -498,87 +500,112 @@
      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 => {
    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 {
          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),
            baseHeight: baseHeigh,
            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);
    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);
      }
      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]);
    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]);
        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);
@@ -681,9 +708,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;
@@ -724,9 +751,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;
      });
    }
@@ -744,14 +771,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;
      }
@@ -765,7 +792,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;
@@ -780,7 +807,9 @@
        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;
@@ -812,7 +841,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);
    });
@@ -855,7 +884,7 @@
    if (graphic) {
      graphic.clear();
    }
    this.Buffers.map(item => {
    this.Buffers.map((item) => {
      item.removeFromMap();
    });
    this.Buffers = [];
@@ -899,7 +928,10 @@
      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();