jihongshun
7 天以前 cd1ecbca4881ba9d19858562f724aac3d152b901
树结构更改逻辑算法
已修改2个文件
178 ■■■■■ 文件已修改
src/utils/components/init-map.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/shootPoint/components/shootPointDialog.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/components/init-map.vue
@@ -45,7 +45,7 @@
      <div class="cesiumContent">
        <div class="flyAction">
          <div class="actionName">{{currentAction ?currentAction.type :'' }}</div>
          <i class="el-icon-delete" />
          <i class="el-icon-delete" @click="deleteAction(chooseItem)" />
        </div>
        <div class="flayDataAll">
          <div class="flyData">
@@ -198,7 +198,7 @@
let  pois = [globalon, globalat,0] 
let cameraVideo 
let ScopeElement; //光轴、视频
let preVideoScopePrimitiveArrTie = [];
// let preVideoScopePrimitiveArrTie = [];
let scratchSetViewMatrix3 = new Cesium.Matrix3();
let chooseId
// let  pois = [0, 0,0] 
@@ -269,7 +269,8 @@
        newTakeVideo: '',  // 编辑时的新数据
        isEditingVideo: false,  // 控制是否处于编辑状态
        actionCounter:0,
        currentAction:null
        currentAction:null,
        preVideoScopePrimitiveArrTie:[]
    }
  },
  mounted(){
@@ -941,6 +942,7 @@
        }
      })
      const result = Object.keys(grouped).map((key, idx) => {
        console.log(group)
        const group = grouped[key];
        const positionGround = group.groundPoiId.getValue(Cesium.JulianDate.now())
        const positionAerialPo = group.aerialPoiId.getValue(Cesium.JulianDate.now())
@@ -1063,8 +1065,8 @@
        pmObj.name = data.name;
        pmObj.primitive = cameraVideo;
        viewerM.scene.primitives.add(cameraVideo);
        preVideoScopePrimitiveArrTie.push(pmObj);
        preVideoScopePrimitiveArrTie.map((item)=>{
        this.preVideoScopePrimitiveArrTie.push(pmObj);
        this.preVideoScopePrimitiveArrTie.map((item)=>{
          if(item.id != chooseId){
            item.primitive.show = false
          }
@@ -1157,7 +1159,7 @@
      document.getElementById('cammoveResultCon').innerHTML = camResult;
      // 计算距离(单位:米)
      const distanceBetween = Cesium.Cartesian3.distance(point1, point2)
      preVideoScopePrimitiveArrTie.map((item)=>{
      this.preVideoScopePrimitiveArrTie.map((item)=>{
        if(item.id == chooseId){
          let obj = this.updateSZScope(Cesium.Math.toDegrees(position.longitude),Cesium.Math.toDegrees(position.latitude),position.height,heading,pitch,roll,this.zoomRatio,distanceBetween)
          item.primitive.inverseViewMatrix = obj.M
@@ -1241,18 +1243,19 @@
    DealVisualCone(data,node){
      this.rowData = data
      console.log(data)
      this.pointGround = {
      console.log(this.preVideoScopePrimitiveArrTie)
      this.pointFly = {
        lon:data.children[0].longitude,
        lat:data.children[0].latitude,
        height:data.children[0].height
      }
      this.pointFly = {
      this.pointGround = {
        lon:data.longitude,
        lat:data.latitude,
        height:data.height
      }
      if(data.children && data.children?.length > 0) {
        preVideoScopePrimitiveArrTie.map((item)=>{
        this.preVideoScopePrimitiveArrTie.map((item)=>{
          if(item.name != data.children[0].label){
            item.primitive.show = false
          }else{
@@ -1260,7 +1263,7 @@
          }
        })
      }else {
        preVideoScopePrimitiveArrTie.map((item)=>{
        this.preVideoScopePrimitiveArrTie.map((item)=>{
          if(item.name != data.label){
            item.primitive.show = false
          }else {
@@ -1283,6 +1286,20 @@
      }else if(action.type == '结束录像'){
      }
    },
    deleteAction(item){
      console.log(item.children[0].actions)
      if(!this.currentAction) return;
      console.log(this.currentAction)
      const point = this.currentAction.point;
      // 从 point.actions 中删除
      const index = item.children[0].actions.findIndex(a => a.id === this.currentAction.id);
      if(index !== -1){
        item.children[0].actions.splice(index, 1);
      }
      this.$message.success("已删除操作");
      this.currentAction = null;
    },
    changeTime(val) {
      this.time += val;
      if (this.time < 0) this.time = 0; // 最小值限制
@@ -1303,25 +1320,36 @@
      this.takePhoto = this.newTakePhoto;  // 点击对号时,更新数据
      this.isEditingPhoto = false;  // 结束编辑
      this.currentAction.extra.value = this.newTakePhoto
      window.addEventListener("keydown", this.onKeyDown);
      window.addEventListener("keyup", this.onKeyUp);
    },
    cancelEditing() {
      this.newTakePhoto = this.takePhoto;  // 点击取消时,恢复原数据
      this.isEditingPhoto = false;  // 结束编辑
      window.addEventListener("keydown", this.onKeyDown);
      window.addEventListener("keyup", this.onKeyUp);
    },
    startEditingVideo() {
      this.newTakeVideo = this.takeVideo;  // 进入编辑时,保存当前的值
      this.isEditingVideo = true;
      window.removeEventListener("keydown", this.onKeyDown);
      window.removeEventListener("keyup", this.onKeyUp);
    },
    validateVideoInput() {
      this.takeVideo = this.newTakeVideo;  // 点击对号时,更新数据
      this.isEditingVideo = false;  // 结束编辑
      this.currentAction.extra.value = this.newTakeVideo
      window.addEventListener("keydown", this.onKeyDown);
      window.addEventListener("keyup", this.onKeyUp);
    },
    cancelVideoEditing() {
      this.newTakeVideo = this.takeVideo;  // 点击取消时,恢复原数据
      this.isEditingVideo = false;  // 结束编辑
      window.addEventListener("keydown", this.onKeyDown);
      window.addEventListener("keyup", this.onKeyUp);
    },
    doAction(point, type){
      console.log(point)
      this.actionCounter++;
      let action = { 
        id: this.actionCounter, 
@@ -1338,7 +1366,7 @@
          action.extra.value = 'stopVideo'
      }
      console.log(action)
      point.actions.push(action);
      point.children[0].actions.push(action);
      console.log(point)
      this.$emit('dealAction',point)
      this.time = 10
src/views/system/shootPoint/components/shootPointDialog.vue
@@ -45,7 +45,7 @@
                        <!-- 航点列表 -->
                        <div class="waypoints">
                          <div 
                            v-for="(wp, index) in waypoints"
                            v-for="(wp, index) in treeData"
                            :key="index" 
                            class="waypoint-item"
                            :class="{ active: selectedIndex === index }"
@@ -56,8 +56,8 @@
                                class="el-icon-success" 
                              ></i>
                              <div class="waypoint-contnet">
                                <span class="waypoint-index">{{ wp.label }}</span>
                                <span v-for="(action, aIndex) in wp.actions"
                                <span class="waypoint-index">{{ wp.label + wp.children[0].label }}</span>
                                <span v-for="(action, aIndex) in wp.children[0].actions"
                                      :key="action.id" 
                                      class="action-icon"
                                      @click.stop="clickItem(action)">
@@ -164,24 +164,27 @@
    }
  },  
  methods:{
    toggleSelect(wq,index) {
      this.chooseItem = wq
    toggleSelect(data,index) {
      this.chooseItem = data
      console.log(this.treeData)
      console.log(wq)
      console.log(data)
      // 如果点击的是当前行,则取消选中
      if (this.selectedIndex === index) {
        this.selectedIndex = null
      } else {
        this.selectedIndex = index
      }
      const result = this.treeData.filter(item =>
          item.children && item.children.some(child => child.label === wq.label)
      );
      const dataObj = result[0]
      const from = [dataObj.children[0]?.longitude,dataObj.children[0]?.latitude, dataObj.children[0]?.height];
      const to = [dataObj.longitude,dataObj.latitude, dataObj.height];
      // const result = this.treeData.filter(item =>
      //     item.children && item.children.some(child => child.label === data.label)
      // );
      // const dataObj = result[0]
      // const from = [dataObj.children[0]?.longitude,dataObj.children[0]?.latitude, dataObj.children[0]?.height];
      // const to = [dataObj.longitude,dataObj.latitude, dataObj.height];
       const from = [data.children[0].longitude,data.children[0].latitude, data.children[0].height];
        const to = [data.longitude,data.latitude, data.height];
        // this.flyToAndLookAt(from, to);
      this.flyToAndLookAt(from, to);
      this.$refs.initMap.DealVisualCone(dataObj)
      this.$refs.initMap.DealVisualCone(data)
    },
   // 计算 heading(偏航角)
    computeHeading(fromCartesian, toCartesian) {
@@ -251,6 +254,8 @@
    },
    dealTreeData(arrList){
      console.log(arrList)
      console.log(this.treeData)
      console.log(this.lastTableArr)
      this.treeData = arrList
      const childrenArr = arrList
        .filter(item => Array.isArray(item.children))
@@ -410,7 +415,10 @@
    },
    //合并逻辑  将附近n米范围内的点合并 并且处理成数据
    mergePoint(arr,mergeNumber,viewer){
      this.treeData = arr
      console.log(arr)
      console.log(this.treeData)
      // this.treeData = arr
      this.treeData = this.lastTableArr
      const result = this.replaceCloseChildrenWithHighestPoint(this.treeData,mergeNumber);
      // const updated = this.insertRaisedPoints(result, 0,0, 236, 130);
      const updated = this.insertRaisedPoints(result, globalon, globalat, towerHeight);
@@ -472,7 +480,7 @@
          const groundA = result[i];
          const raisedA = {
            id: this.generateId(),
            label: groundA.label+ "-加高",
            label: groundA.label+ "-加高111",
            longitude: groundA.longitude,
            latitude: groundA.latitude,
            height: groundA.height,
@@ -480,8 +488,9 @@
              {
                ...pointA,
                id: this.generateId(),
                label: pointA.label + "-加高",
                height: pointA.height + 50
                label: pointA.label + "-加高2222",
                height: pointA.height + 50,
                actions:[]
              }
            ]
          };
@@ -499,8 +508,9 @@
              {
                ...pointB,
                id: this.generateId(),
                label: pointB.label + "-加高",
                height: pointB.height + 50
                label: pointB.label + "-加高3333",
                height: pointB.height + 50,
                actions:[]
              }
            ]
          };
@@ -653,47 +663,50 @@
          type: 'warning'
        })
      }
      console.log(this.$refs.initMap.preVideoScopePrimitiveArrTie)
      console.log(this.treeData)
      console.log(this.waypoints)
      // this.dialogVisible = false
      // const dealArr = this.submitDealData()
      const transformed = this.treeData.map((ground, index) => {
        const pointNumber = index + 1;
        const child = ground.children?.[0] || {};
    //   const transformed = this.treeData.map((ground, index) => {
    //     const pointNumber = index + 1;
    //     const child = ground.children?.[0] || {};
        return {
          altitude: child.height,
          ardGroundPoint: [
            {
              height: ground.height,
              latitude: ground.latitude,
              longitude: ground.longitude,
              pointNumber: 1,
              targetName: ground.label
            }
          ],
          latitude: child.latitude,
          longitude: child.longitude,
          pointNumber: pointNumber,
          targetName: child.label
        };
    })
    console.log(transformed)
    let parmas = {
      templateName:this.form.templateName,
      modelId:this.chooseModelId,
      ardListWayPointsLS:transformed
    }
    addPoint(parmas).then(res=>{
      console.log(res)
      if(res.code == 200) {
        this.$message({
          message: '新增模板成功',
          type: 'success'
        })
        this.$emit('on-submit')
        this.$emit('close')
      }
    })
    console.log(parmas)
    //     return {
    //       altitude: child.height,
    //       ardGroundPoint: [
    //         {
    //           height: ground.height,
    //           latitude: ground.latitude,
    //           longitude: ground.longitude,
    //           pointNumber: 1,
    //           targetName: ground.label
    //         }
    //       ],
    //       latitude: child.latitude,
    //       longitude: child.longitude,
    //       pointNumber: pointNumber,
    //       targetName: child.label
    //     };
    // })
    // console.log(transformed)
    // let parmas = {
    //   templateName:this.form.templateName,
    //   modelId:this.chooseModelId,
    //   ardListWayPointsLS:transformed
    // }
    // addPoint(parmas).then(res=>{
    //   console.log(res)
    //   if(res.code == 200) {
    //     this.$message({
    //       message: '新增模板成功',
    //       type: 'success'
    //     })
    //     this.$emit('on-submit')
    //     this.$emit('close')
    //   }
    // })
    // console.log(parmas)
    },
    // 计算点A绕点B逆时针旋转指定角度后的新位置
    //  空中点或者地面点笛卡尔坐标 塔的笛卡尔坐标    塔的朝向值
@@ -720,6 +733,7 @@
      console.log(byLabel)
      console.log(this.lastTableArr)
      console.log( this.waypoints)
      this.treeData = this.lastTableArr
    },
    addOrUpdate(list, newItem, key = 'label', vm = null) {
      let index = list.findIndex(item => item[key] === newItem[key]);