lxl
2022-10-25 e5626382db6861bc6d73b33b4cfb40df3525dd5e
src/views/Synthesis/analyse.vue
@@ -12,15 +12,26 @@
        <div class="div_li">{{ $t(item.name) }}</div>
      </li>
    </ul>
    <mapinfo ref="mapinfo" />
  </div>
</template>
<script>
import $ from 'jquery';
// 测量-信息弹窗
import mapinfo from '../Tools/mapinfo.vue';
export default {
  components: {
    mapinfo,
  },
  data() {
    return {
      changeAnalsyFlag: null,
      isoline: null,
      isolineFlag: false,
      isslopeFlag: false,
      isslopeType: null,
      dxpmIndex: null,
      itemsOne: [
        {
          id: '1',
@@ -65,25 +76,243 @@
      ],
    };
  },
  mounted() {
    if (this.isoline == null) {
      this.isoline = new SmartEarth.ElevationTool(sgworld);
    }
  },
  methods: {
    changeAnalsy(res) {
      var that = this;
      switch (res.id) {
        case '1':
          this.isolineFlag = !this.isolineFlag;
          this.isoline.tf = this.isolineFlag;
          this.isoline.render();
          that.isolineFlag = !that.isolineFlag;
          elevationTool.tf = that.isolineFlag;
          elevationTool.render();
          break;
        case '2':
          elevationTool.type = 'slope';
          that.isslopeFlag = !that.isslopeFlag;
          if (that.isslopeFlag == true) {
            elevationTool.type = 'slope';
          } else {
            elevationTool.type = 'none';
          }
          elevationTool.render();
          break;
        case '3':
          var value = {
            name: 'Analysis',
            id: 3,
          };
          this.$bus.$emit('mapChangeBox', value);
          // var jsonurl =
          //   'http://192.168.20.39:9055/gisserver/wnsserver/beijingdaohang_wns?start=' +
          //   '116.0867468497,39.937314280233' +
          //   '&end=' +
          //   '116.0860003269,39.936289981725' +
          //   '&propertyName=Shape&tolerance=500&request=FindPath&format=json';
          // $.ajax({
          //   url: jsonurl,
          //   async: false,
          //   type: 'GET',
          //   dataType: 'json',
          //   contentType: 'application/json;charset=utf-8',
          //   success: (data) => {
          //     data.features.forEach((e) => {
          //       if (e.geometry.type == 'LineString') {
          //         //this.executeFly3D(e.geometry.coordinates);
          //         this.executeFly3D(e.geometry.coordinates);
          //       }
          //     });
          //   },
          // });
          break;
        case '4':
          if (window.AnalysisDXPM) {
            this.clear(res.id);
          } else {
            this.addterrainSectionAnalysis();
          }
          break;
        case '5':
          if (window.AnalysisFlood) {
            this.clear(res.id);
          } else {
            this.addAnalysisFlood();
          }
          break;
        case '6':
          var that = this;
          var volumetricMeasurementTool =
            sgworld.Creator.createVolumetricMeasureTool();
          volumetricMeasurementTool.startDrawing(
            { ...this.colorAll, onlyTerrain: false },
            'auto',
            (data) => {
              if (volumetricMeasurementTool.popupData) {
                volumetricMeasurementTool.popupData.value = `填方:${
                  data.volume.fill.toFixed(4) + data.unit.fill
                }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`;
              } else {
                data.id = sgworld.Core.getuid();
                this.measureData.set(data.id, volumetricMeasurementTool);
                let popupData = that.openMeasureResultInfo('体积方量', data);
                volumetricMeasurementTool.popupData = popupData;
              }
            }
          );
          break;
        case '7':
          window.model = null;
          var url =
            'http://183.162.245.49:8099/pcdata/JC_MAX_MX/SN/tileset.json';
          model = sgworld.Creator.create3DTilesets(
            '',
            url,
            { height: 670 },
            {},
            '0',
            true,
            (data) => {
              sgworld.Navigate.flyToObj(data);
            }
          );
          setTimeout(() => {
            model.clippingModel({
              direction: 'x',
            });
          }, 5000);
          break;
        case '8':
          if (openStreetMap.item.show == false) {
            openStreetMap.item.show = true;
            sgworld.Analysis.createCurtainContrast(0, 1);
          } else {
            openStreetMap.item.show = false;
            sgworld.Analysis.clearCurtainContrast();
          }
          break;
      }
    },
    clear(res) {
      switch (res) {
        case '4':
          layer.close(this.dxpmIndex);
          this.dxpmIndex = undefined;
          if (window.AnalysisDXPM) {
            window.AnalysisDXPM.flyPoint &&
              Viewer.entities.remove(window.AnalysisDXPM.flyPoint);
            window.AnalysisDXPM && window.AnalysisDXPM.deleteObject();
            window.AnalysisDXPM = undefined;
          }
          break;
        case '5':
          window.AnalysisFlood && window.AnalysisFlood.endWater();
          window.AnalysisFlood = undefined;
          break;
      }
    },
    openMeasureResultInfo(name, data) {
      let info = '';
      switch (name) {
        case '水平距离':
        case '空间距离':
          info = '总长度:' + data.distance[data.distance.length - 1];
          break;
        case '海拔高度':
          info = '海拔:' + data.height;
          break;
        case '垂直高度':
          info = `${data.gddistance}<br>${data.kjdistance}<br>${data.spdistance}`;
          break;
        case '表面面积':
        case '平面面积':
          info = data.mj;
          break;
        case '角度':
          data.labels.forEach((label) => {
            info += label.label.text.getValue() + '<br>';
          });
          break;
        case '体积方量':
          info = `填方:${
            data.volume.fill.toFixed(4) + data.unit.fill
          }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`;
          break;
      }
      return (
        this.$refs &&
        this.$refs.mapinfo &&
        this.$refs.mapinfo.open(name, info, {
          close: () => {
            // 清除测量
            this.clearMeasure(data.id);
          },
        })
      );
    },
    clearMeasure(id) {
      if (id) {
        let data = this.measureData.get(id);
        data && data.deleteObject && data.deleteObject();
        // 体积方量
        data && data.cleanUp && data.cleanUp();
        this.measureData.delete(id);
      } else {
        this.measureData.forEach((data) => {
          data.deleteObject && data.deleteObject();
          // 体积方量
          data.cleanUp && data.cleanUp();
        });
        this.measureData.clear();
      }
    },
    addterrainSectionAnalysis() {
      window.AnalysisDXPM = sgworld.Command.execute(
        2,
        6,
        { cyjj: 50, objid: 0 },
        (Distance) => {
          if (Distance.gcs && Distance.gcs.length) {
            window.AnalysisDXPM.analyseData = Distance;
            this.dxpmIndex = layer.open({
              type: 2,
              title: '分析结果',
              shade: false,
              area: ['80%', '280px'],
              offset: 'b',
              skin: 'other-class',
              content: '/SmartEarthSDK/Workers/analysis/AnalysisDXPM.html',
              end: () => {
                this.dxpmIndex && this.clear('4');
              },
            });
          } else {
            //剖面
            window.AnalysisDXPM && window.AnalysisDXPM.deleteObject();
          }
        }
      );
    },
    addAnalysisFlood() {
      var method = {
        pointSelect: true,
        spood: 20,
        GroupID: 0,
        url: '/SmartEarthSDK/Workers/image/waterNormals.jpg',
      };
      window.AnalysisFlood = sgworld.Command.execute(
        2,
        2,
        method,
        (value) => {}
      );
    },
  },
  mounted() {
    this.measureData = new Map();
    this.colorAll = {
      point: Cesium.Color.fromCssColorString('#ff0000'),
      polyline: Cesium.Color.fromCssColorString('#ffff00').withAlpha(0.6),
      polygon: Cesium.Color.fromCssColorString('#ffff00').withAlpha(0.6),
    };
  },
};
</script>