月球大数据地理空间分析展示平台-【中台】
Surpriseplus
2023-09-08 78345e3940e5252c63e2e52b57a1fd18af982a2b
src/views/resourceQuery/resourceQuery.vue
@@ -1,6 +1,18 @@
<template>
  <div class="resourceQuery">
    <moon-map></moon-map>
    <div class="bottom_btn_TWO">
      <div
        v-show="mapFlag == '2D'"
        class="ChangeMap twoImg"
        @click="setMapImg('2D')"
      ></div>
      <div
        v-show="mapFlag != '2D'"
        class="ChangeMap threeImg"
        @click="setMapImg('3D')"
      ></div>
    </div>
    <div
      class="left_menu"
      @click="leftDialog =true"
@@ -29,12 +41,12 @@
            <el-form-item label="传感器类型">
              <el-select
                style="width: 100%"
                v-model="form.region"
                v-model="form.sensorType"
                placeholder=""
              >
                <el-option
                  v-for="(e, i) in stretchOptions"
                  :label="e.label"
                  v-for="(e, i) in sensorOption"
                  :label="e.name"
                  :value="e.value"
                  :key="i"
                />
@@ -43,12 +55,12 @@
            <el-form-item label="数据类型">
              <el-select
                style="width: 100%"
                v-model="form.region"
                v-model="form.mataType"
                placeholder=""
              >
                <el-option
                  v-for="(e, i) in stretchOptions"
                  :label="e.label"
                  v-for="(e, i) in metaOption"
                  :label="e.name"
                  :value="e.value"
                  :key="i"
                />
@@ -57,7 +69,7 @@
            <el-form-item label="时间范围">
              <el-date-picker
                style="width: 100%"
                v-model="form.time"
                v-model="acqTime"
                type="datetimerange"
                range-separator="至"
                start-placeholder="开始日期"
@@ -66,12 +78,7 @@
              >
              </el-date-picker>
            </el-form-item>
            <el-form-item>
              <!-- <div class="btnstyle editBtn">
              <el-button type="primary" @click="onSubmit">确定</el-button>
              <el-button class="delbtn">取消</el-button>
            </div> -->
            </el-form-item>
          </el-form>
          <div class="KJCX">
            <div class="KJCX_title">空间查询</div>
@@ -104,6 +111,13 @@
                <span>多边形</span>
                <div class="btn_bg db"></div>
              </div>
              <div
                class="KJCX_btn"
                @click="setDrawMenu(5)"
              >
                <span>清除</span>
                <div class="btn_bg qc"></div>
              </div>
            </div>
          </div>
        </div>
@@ -118,33 +132,39 @@
            <el-button
              type="primary"
              class="btnbox"
              @click="setQueryRetrieval"
            >检索</el-button>
          </div>
          <div>
            <el-button
              type="primary"
              class="btnbox delbtn"
              @click="setQueryRestRetrieval"
            >重置</el-button>
          </div>
        </div>
      </div>
      <div v-show="listDialog">
      </div>
      <!-- <div class="pagination">
      <div
        class="pagination"
        v-show="listDialog"
      >
        <el-pagination
          small
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="currentPage4"
          :current-page="form.pageIndex"
          :page-sizes="[100, 200, 300, 400]"
          :page-size="100"
          :page-size="form.pageSize"
          layout="sizes, prev, pager, next, jumper"
          :total="400"
          :total="form.count"
        >
        </el-pagination>
      </div> -->
      <!-- <div class="list_box">
      </div>
      <div
        class="list_box"
        v-show="listDialog"
      >
        <div
          class="list"
          v-for="(e, i) in list"
@@ -158,19 +178,19 @@
              <span class="attribute_content">{{ e.name }}</span>
            </div>
            <div class="attribute">
              <span class="attribute_title">存情位量:</span>
              <span class="attribute_content">{{ e.time }}</span>
              <span class="attribute_title">存储位置:</span>
              <span class="attribute_content">{{ e.dirName }}</span>
            </div>
            <div class="attribute">
              <span class="attribute_title">生产时间:</span>
              <span class="attribute_content">{{ e.data }}</span>
              <span class="attribute_content">{{ e.createTime }}</span>
            </div>
            <div
              class="attribute"
              style="margin: 0"
            >
              <span class="attribute_title">数据大小:</span>
              <span class="attribute_content">dsadas</span>
              <span class="attribute_content">{{ e.sizes }}M</span>
            </div>
          </div>
          <div
@@ -180,10 +200,13 @@
            <i class="el-icon-more"></i>
          </div>
        </div>
      </div> -->
      <!-- <div class="bottom_box">
        <span class="msg_box">显示第{{ paginationData.pageNo }}到{{
            paginationData.pageSize
      </div>
      <div
        class="bottom_box"
        v-show="listDialog"
      >
        <span class="msg_box">显示第{{ (( (form.pageIndex - 1)* form.pageSize) + 1 )}}到{{(form.pageIndex*form.pageSize)
          }}条,共{{ list.length }}条记录,已选择{{
            listChecked.length
          }}条</span>
@@ -191,17 +214,20 @@
          <el-button
            type="primary"
            class="btnbox"
            @click="setListCheckAll"
          >全选</el-button>
          <el-button
            type="primary"
            class="btnbox delbtn"
            @click="setListRemoveCheckAll"
          >取消</el-button>
        </div>
      </div> -->
      </div>
    </div>
    <div
      class="details_box"
      v-show="detailsBox"
      v-drag="true"
    >
      <div class="details_t">
        <i
@@ -210,18 +236,22 @@
        ></i>
      </div>
      <div class="details_table">
        <div class="table_header">
          <div class="table_td">属性</div>
          <div class="table_td">属性值</div>
        <div style="height: 430px;overflow: auto;">
          <div class="table_header">
            <div class="table_td">属性</div>
            <div class="table_td">属性值</div>
          </div>
          <div
            class="table_tr"
            v-for="(e, i) in tableList"
            :key="i"
          >
            <div class="table_td">{{ e.alias}}</div>
            <div class="table_td">{{ e.value }}</div>
          </div>
        </div>
        <div
          class="table_tr"
          v-for="(e, i) in tableList"
          :key="i"
        >
          <div class="table_td">{{ e.name }}</div>
          <div class="table_td">{{ e.value }}</div>
        </div>
      </div>
    </div>
    <el-dialog
@@ -262,6 +292,8 @@
<script>
import * as turf from "@turf/turf"
import moonMap from "../../components/MapView/moonMap.vue"; //地图
import { meta_type, sensor_type } from "../datamanage/js/layerManage";
import { select_meta_ByPageAndCount, encr, selectByPageAndCount } from '../../api/api'
export default {
  components: {
    moonMap,
@@ -272,107 +304,262 @@
        pageNo: 1,
        pageSize: 10,
      },
      tableList: [
        {
          name: "dataid",
          value: "LC81350352022001LGN00",
        },
        {
          name: "satellite",
          value: "LANDSAT8",
        },
        {
          name: "datatype",
          value: "OLLTIRS",
        },
        {
          name: "ines samples",
          value: "7931.0",
        },
        {
          name: "sensor",
          value: "7811.0",
        },
      ],
      tableList: [],
      listChecked: [],
      list: [
        {
          name: "名称",
          CQWZ: "位置",
          time: "时间",
          data: "大小",
          checked: false,
        },
        {
          name: "名称",
          CQWZ: "位置",
          time: "时间",
          data: "大小",
          checked: false,
        },
        {
          name: "名称",
          CQWZ: "位置",
          time: "时间",
          data: "大小",
          checked: false,
        },
        {
          name: "名称",
          CQWZ: "位置",
          time: "时间",
          data: "大小",
          checked: false,
        },
      ],
      list: [],
      currentPage4: 4,
      form: {
        name: "",
        region: "",
        selectName: "",
        layerUrl: "",
        children: [],
        value1: "",
        sensorType: 0,
        mataType: 0,
        wkt: null,
        pageIndex: 1,
        pageSize: 100,
        count: 0,
        startDate: null,
        endDate: null
      },
      stretchOptions: [
        {
          value: "目录",
          label: "目录",
        },
      ],
      acqTime: '',
      sensorOption: [],
      metaOption: [],
      detailsBox: false,
      listDialog: false,
      leftDialog: true,
      drawType: null,
      dialogVisible: false,
      bufferNumber: 100,
      geoWkt: null,
      wktEntity: null,
      mapFlag: '2D'
    };
  },
  methods: {
    details(val) {
      this.detailsBox = true;
    setMapImg(res) {
      if (res == "2D") {
        this.mapFlag = "3D";
        window.earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE2D;
      } else if (res == "3D") {
        this.mapFlag = "2D";
        window.earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE3D;
      }
    },
    setListCheckAll() {
      for (var i in this.list) {
        var checked = this.list[i].checked
        if (!checked) {
          this.list[i].checked = true;
          this.listChecked.push(this.list[i]);
          this.setAddCheckLayer(this.list[i]);
        }
      }
    },
    setListRemoveCheckAll() {
      for (var i in this.list) {
        if (this.list[i].checked) {
          this.list[i].checked = false;
          this.setRemoveCheckLayer(this.list[i]);
        }
      }
      this.listChecked = [];
    },
    async details(e) {
      const data = await selectByPageAndCount({
        ns: 'lf',
        pageIndex: 1,
        pageSize: 100000,
        tab: 'sys_meta'
      })
      if (data.code != 200) return
      var std = [];
      var result = data.result;
      e.createUser = e.createName;
      e.depcode = e.depName
      e.dircode = e.dirName;
      e.updateUser = e.updateName;
      e.verid = e.verName;
      if (e.sensortype > 0) {
        for (var i in this.sensorOption) {
          if (this.sensorOption[i].value == e.sensortype) {
            e.sensortype = this.sensorOption[i].name
          }
        }
      } else {
        e.sensortype = null
      }
      if (e.mataType > 0) {
        for (var i in this.metaOption) {
          if (this.metaOption[i].value == e.mataType) {
            e.mataType = this.metaOption[i].name
          }
        }
      } else {
        e.mataType = null
      }
      for (var i in result) {
        for (var key in e) {
          if (result[i].field == key) {
            result[i].value = e[key]
          }
          if (result[i].field == 'gid' && key == 'id') {
            result[i].value = e[key]
          }
        }
      }
      this.detailsBox = true;
      this.tableList = result;
    },
    setQueryRestRetrieval() {
      this.listDialog = false;
      this.setFromStart();
      this.setDrawMenu(5);
      this.listChecked = [];
      Viewer.entities.removeAll()
    },
    async setQueryRetrieval() {
      var obj = JSON.parse(JSON.stringify(this.form))
      if (this.geoWkt) {
        obj.wkt = encr(this.geoWkt)
      } else {
        obj.wkt = null;
      }
      if (this.acqTime) {
        obj.endDate = this.setFromDate(this.acqTime[0])
        obj.startDate = this.setFromDate(this.acqTime[1])
      } else {
        obj.endDate = null
        obj.startDate = null
      }
      if (obj.sensorType == 0) {
        obj.sensorType = ''
      }
      if (obj.mataType == 0) {
        obj.mataType = ''
      }
      const data = await select_meta_ByPageAndCount(obj);
      if (data.code != 200) return
      this.form.count = data.count;
      var result = data.result;
      for (var i in result) {
        if (result[i].createTime) {
          result[i].createTime = this.setFromDate(result[i].createTime)
        }
        if (result[i].updateTime) {
          result[i].updateTime = this.setFromDate(result[i].updateTime)
        }
        if (result[i].acqTime) {
          result[i].acqTime = this.setFromDate(result[i].acqTime)
        }
      }
      if (result) {
        this.list = result;
      } else {
        this.list = [];
      }
      this.listDialog = true;
    },
    setFromDate(res) {
      var time = new Date(res);
      var y = time.getFullYear();
      var m = time.getMonth() + 1;
      var d = time.getDate();
      var h = time.getHours();
      var mm = time.getMinutes();
      var s = time.getSeconds();
      return (
        y +
        '-' +
        this.add0(m) +
        '-' +
        this.add0(d) +
        ' ' +
        this.add0(h) +
        ':' +
        this.add0(mm) +
        ':' +
        this.add0(s)
      );
    },
    //格式化时间
    add0(m) {
      return m < 10 ? "0" + m : m;
    },
    //大小值改变
    handleSizeChange(val) {
      console.log(`每页 ${val} 条`);
      this.form.pageIndex = 1;
      this.form.pageSize = val;
      this.setQueryRetrieval();
    },
    handleCurrentChange(val) {
      this.form.pageIndex = val;
      this.setQueryRetrieval();
      console.log(`当前页: ${val}`);
    },
    checkedList(val) {
      val.checked = !val.checked;
      if (val.checked) {
        this.listChecked.push(val);
        this.setAddCheckLayer(val);
      }
      if (this.listChecked.length > 0) {
        if (!val.checked) {
          this.listChecked.forEach((e, i) => {
            if (e.name == val.name) {
            if (e.id == val.id) {
              this.listChecked.splice(i, 1);
              this.setRemoveCheckLayer(val);
            }
          });
        }
      }
    },
    setAddCheckLayer(res) {
      if (!res.geom) return
      var wkt = this.$wkt.parse(res.geom).coordinates[0]
      var geom = [];
      for (var i in wkt) {
        geom.push(Cesium.Cartesian3.fromDegrees(wkt[i][0], wkt[i][1]))
      }
      Viewer.entities.add({
        name: res.name + "&&" + res.id,
        polygon: {
          hierarchy: geom,
          material: Cesium.Color.WHITE.withAlpha(0.1),
          // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
          outline: true,
          outlineColor: Cesium.Color.fromCssColorString("rgba(130,167,33, 1)"),
          outlineWidth: 10,
          classificationType: Cesium.ClassificationType.BOTH,//贴地形和3dtile
          clampToGround: true,//开启贴地
          height: 0,
        },
      });
    },
    setRemoveCheckLayer(res) {
      var name = res.name + "&&" + res.id;
      var entity = Viewer.entities._entities._array
      for (var i = 0; i < entity.length; i++) {
        if (entity[i].name == name) {
          Viewer.entities.remove(entity[i])
          i--;
        }
      }
    },
    setDrawMenu(res) {
      this.bufferNumber = 100;
@@ -393,6 +580,9 @@
          this.drawType = 'polygon';
          this.setDrawEntity();
          break
        case 5:
          this.setClearWktGeom();
          break
      }
    },
    handleClose() {
@@ -411,9 +601,12 @@
      if (this.drawType != 'point') {
        config = { showSize: false }
      }
      if (this.wktEntity) {
        this.setClearWktGeom();
      }
      var that = this;
      sgworld.Creator.createSimpleGraphic(this.drawType, config, (entity) => {
        sgworld.Creator.SimpleGraphic.clear()
        that.querySatialQuery(entity);
      });
    },
@@ -433,8 +626,44 @@
          res_val = res.polygon.hierarchy.getValue().positions;
          break;
      }
      var val = this.getEntityGeometry(res_val, this.drawType)
      debugger
      sgworld.Creator.SimpleGraphic.clear()
      this.geoWkt = this.getEntityGeometry(res_val, this.drawType)
      if (this.geoWkt) {
        this.$nextTick(() => {
          this.setAddWktEntity(this.geoWkt)
        })
      }
    },
    setAddWktEntity(res) {
      var wkt = this.$wkt.parse(res).coordinates[0];
      var geom = [];
      for (var i in wkt) {
        geom.push(Cesium.Cartesian3.fromDegrees(wkt[i][0], wkt[i][1], wkt[i][2] ?? 0))
      }
      this.wktEntity = Viewer.entities.add({
        name: '资源查询',
        polygon: {
          hierarchy: geom,
          material: Cesium.Color.WHITE.withAlpha(0.2),
          //heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
          outline: true,
          outlineColor: Cesium.Color.RED,
          outlineWidth: 10,
          classificationType: Cesium.ClassificationType.BOTH,//贴地形和3dtile
          clampToGround: true,//开启贴地
          height: 0,
        },
      });
    },
    setClearWktGeom() {
      if (this.wktEntity) {
        Viewer.entities.remove(this.wktEntity)
        this.wktEntity = null;
        this.geoWkt = null;
      }
    },
    getEntityGeometry(res, type) {
      var res_val;
@@ -480,7 +709,7 @@
    },
    setTurfBuffer(geom, distance, type) {
      return turf.buffer(geom, distance, { units: 'miles' });
      return turf.buffer(geom, distance, { units: 'meters' });
    },
    fixToPositon(restVal, digits = 6) {
      restVal.geometry.coordinates.forEach(coord => {
@@ -503,9 +732,31 @@
      std.lng = Cesium.Math.toDegrees(cartographic.longitude)
      std.alt = cartographic.height
      return std
    },
    getSensorMeta() {
      this.metaOption = meta_type;
      this.sensorOption = sensor_type;
    },
    setFromStart() {
      this.form = {
        name: "",
        sensorType: 0,
        mataType: 0,
        wkt: null,
        pageIndex: 1,
        pageSize: 100,
        count: 0,
        startDate: null,
        endDate: null
      }
      this.acqTime = ''
    }
  },
  created() { },
  mounted() {
    this.getSensorMeta();
    this.setFromStart();
  }
};
</script>
@@ -524,7 +775,7 @@
    background-size: 100% 100%;
  }
  .left_box {
    width: 427px;
    min-width: 427px;
    height: auto;
    left: 10px;
    top: 10px;
@@ -611,6 +862,10 @@
            background: url("../../assets/img/db.png") no-repeat center;
            background-size: 100% 100%;
          }
          .qc {
            background: url("../../assets/img/清除.png") no-repeat center;
            background-size: 100% 100%;
          }
        }
        /deep/ .el-input.is-disabled .el-input__wrapper,
        /deep/ .el-input__wrapper {
@@ -645,8 +900,9 @@
    }
    .list_box {
      overflow: auto;
      //   height: 350px;
      height: 42%;
      height: 350px;
      //height: 42%;
      .list {
        padding: 10px;
        background: #0d131d;
@@ -730,6 +986,7 @@
  .details_box {
    width: 533px;
    // height: 430px;
    overflow: auto;
    background: rgba(7, 8, 14, 0.8);
    padding: 10px;
    position: absolute;
@@ -785,4 +1042,27 @@
.dialogContent /deep/.el-icon-plus {
  color: #606266 !important;
}
.bottom_btn_TWO {
  position: absolute;
  z-index: 39;
  /*  prettier-ignore */
  bottom: 68PX;
  /*  prettier-ignore */
  right: 70PX;
  .ChangeMap {
    /*  prettier-ignore */
    width: 30PX;
    /*  prettier-ignore */
    height: 30PX;
    /*  prettier-ignore */
    border: 1PX solid rgba(255, 255, 255, 0.1);
  }
  .twoImg {
    background: url("../../assets/img/2D.png") no-repeat;
  }
  .threeImg {
    background: url("../../assets/img/3D.png") no-repeat;
  }
}
</style>