Surpriseplus
2022-11-12 50f52beb0ed100105166f62027cd0b15e6b596dc
src/views/Synthesis/measurement.vue
@@ -12,45 +12,252 @@
        <div class="div_li">{{ $t(item.name) }}</div>
      </li>
    </ul>
    <mapinfo ref="mapinfo" />
  </div>
</template>
<script>
// 测量-信息弹窗
import mapinfo from '../Tools/mapinfo.vue';
export default {
  components: { mapinfo },
  data() {
    return {
      colorAll: {},
      measureData: null,
      itemsOne: [
        {
          id: "1",
          name: "synthesis.distancemeasure",
          class: "g1",
          id: '1',
          name: 'synthesis.synthobj.m1',
          class: 'g1',
        },
        {
          id: "2",
          name: "synthesis.heightsurve",
          class: "g2",
          id: '2',
          name: 'synthesis.synthobj.m2',
          class: 'g2',
        },
        {
          id: "3",
          name: "synthesis.areasurvey",
          class: "g3",
          id: '3',
          name: 'synthesis.synthobj.m3',
          class: 'g3',
        },
        {
          id: "4",
          name: "synthesis.volummeasure",
          class: "g4",
          id: '4',
          name: 'synthesis.synthobj.m4',
          class: 'g4',
        },
        {
          id: '5',
          name: 'synthesis.synthobj.m5',
          class: 'g1',
        },
        {
          id: '6',
          name: 'synthesis.synthobj.m6',
          class: 'g2',
        },
        {
          id: '7',
          name: 'synthesis.synthobj.m7',
          class: 'g3',
        },
        {
          id: '8',
          name: 'synthesis.synthobj.m8',
          class: 'g4',
        },
      ],
    };
  },
  created() {
    var cover_Id = this.$store.state.syntiesis.menu;
    var cover_perms = this.$store.state.permsEntity;
    for (var i = 0; i < cover_perms.length; i++) {
      if (cover_perms[i].pid == cover_Id) {
        this.showViewMenu(cover_perms[i]);
      }
    }
  },
  methods: {
    changeMeasure(res) {
      var res_val = {
        url: "",
        name: res.name,
      };
      this.$bus.$emit("changetool", res_val);
    showViewMenu(res) {
      if (res.cnName != '测量') return;
    },
    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();
      }
    },
    changeMeasure(res) {
      switch (res.id) {
        case '1':
          var measure = window.sgworld.Command.execute(
            0,
            2,
            this.colorAll,
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo('水平距离', data);
            }
          );
          break;
        case '2':
          var measure = window.sgworld.Command.execute(
            0,
            10,
            this.colorAll,
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo('空间距离', data);
            }
          );
          break;
        case '3':
          var measure = window.sgworld.Command.execute(
            1,
            11,
            this.colorAll,
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo('海拔高度', data);
            }
          );
          break;
        case '4':
          var measure = window.sgworld.Command.execute(
            0,
            5,
            this.colorAll,
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo('垂直高度', data);
            }
          );
          break;
        case '5':
          var measure = window.sgworld.Command.execute(
            0,
            8,
            {
              ...this.colorAll,
              tin: true, // 是否显示tin三角网
              onlyTerrain: false, // 是否只测量精细地形
            },
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo('表面面积', data);
            }
          );
          break;
        case '6':
          var measure = window.sgworld.Command.execute(
            0,
            3,
            this.colorAll,
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo('平面面积', data);
            }
          );
          break;
        case '7':
          var volumetricMeasurementTool =
            window.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 = window.sgworld.Core.getuid();
                this.measureData.set(data.id, volumetricMeasurementTool);
                let popupData = this.openMeasureResultInfo('体积方量', data);
                volumetricMeasurementTool.popupData = popupData;
              }
            }
          );
          break;
        case '8':
          var measure = window.sgworld.Command.execute(
            0,
            12,
            this.colorAll,
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo('角度', data);
            }
          );
          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);
          },
        })
      );
    },
  },
  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>
@@ -75,18 +282,18 @@
  margin: 0px;
}
.g1 {
  background: url("../../assets/img/synthesis/图层 31.png") no-repeat center;
  background: url('../../assets/img/synthesis/图层 31.png') no-repeat center;
}
.g2 {
  background: url("../../assets/img/synthesis/图层 31 拷贝.png") no-repeat
  background: url('../../assets/img/synthesis/图层 31 拷贝.png') no-repeat
    center;
}
.g3 {
  background: url("../../assets/img/synthesis/矩形 13 拷贝.png") no-repeat
  background: url('../../assets/img/synthesis/矩形 13 拷贝.png') no-repeat
    center;
}
.g4 {
  background: url("../../assets/img/synthesis/图层 18 拷贝.png") no-repeat
  background: url('../../assets/img/synthesis/图层 18 拷贝.png') no-repeat
    center;
}
.backimge7 {