无人机管理后台前端(已迁走)
chenyao
2025-10-24 fa66a91747f1dcdf4d64f4f7c60275927dce8fea
src/hooks/common.js
@@ -26,14 +26,17 @@
   if (!placemark?.length) return []
   const isWGS84 = execute_height_mode === 'WGS84'
   const list = placemark.map(item => {
      const [longitude, latitude] = item.point.coordinates.trim().split(',')
      const [longitude, latitude] = item.point.coordinates.trim().split(',').map(i => _.round(i, 6))
      const [latitude1, longitude1] = (item?.waypoint_heading_param?.waypoint_poi_point?.trim()?.split(',') || [])
         .map(i => _.round(i, 6))
      let action_modes = item?.action_group?.action || []
      action_modes = Array.isArray(action_modes) ? action_modes : [action_modes]
      return {
         longitude: _.round(longitude, 8),
         latitude: _.round(latitude, 8),
         height: isWGS84 ? item.execute_height : item.execute_height + startPoint.height,
         longitude,
         latitude,
         height: _.round(item.execute_height,2),
         waypoint_speed: item.waypoint_speed,
         waypoint_poi_point: longitude1 ? { longitude: longitude1, latitude: latitude1 } : undefined,//兴趣点
         action_modes,
      }
   })
@@ -42,9 +45,6 @@
      flyRotateYaw: 0,
      pointType: 'start',
      waypoint_speed: auto_flight_speed,
      heading: 0, // 椎体 heading
      arrowHeading: 0, // 飞行器 heading
      pitch: 0, //椎体俯仰角
      fov: 19.5, // 这个是椎体的展示截面大小
   }
   list.forEach(item => {
@@ -56,7 +56,6 @@
            item1.action_actuator_func_param.focal_length = Number(focal_length) / 24
         }
      })
      item.arrowHeading = 0
   })
   return [pointStart, ...list]
}
@@ -69,6 +68,7 @@
   const waylinesXMLJSON = XMLToJSON(waylinesXML)?.['Document']
   const templateXMLObj = camelToSnake(removeTextKey(templateXMLJSON))
   const waylinesXMLObj = camelToSnake(removeTextKey(waylinesXMLJSON))
   const {
      mission_config: {
         take_off_ref_point,
@@ -77,12 +77,16 @@
      folder: {
         payload_param: { image_format } = {},
         placemark: {
            polygon
            polygon,
            margin: buffer_distance_meters = 0
         },
         wayline_coordinate_sys_param:{height_mode} = {},
         global_height, auto_flight_speed,
         template_type: templateType
      } = {},
   } = templateXMLObj
   const [latitude, longitude, height] = take_off_ref_point.split(',').map(item => _.round(item, 6))
   let startPoint = { latitude, longitude, height: Number.isNaN(height) ? 0 : height }
   const {
      mission_config: { take_off_security_height } = {},
@@ -98,14 +102,9 @@
      execute_height_mode = polygonPointFolder.execute_height_mode
      pointPlacemark = polygonPointFolder.placemark
   }
   const [latitude, longitude, height] = take_off_ref_point.split(',').map(item => _.round(item, 6))
   let startPoint = { latitude, longitude, height }
   // 取出点位
   const coordinates = polygon?.outer_boundary_is.linear_ring
      .coordinates?.split('\n') || []
   // 数组转换
   let polygonList = coordinates.map((coordinate) =>
      coordinate
@@ -113,9 +112,21 @@
         .split(',')
         .map((v) => Number(v)),
   )
   polygonList.pop()
   const templatePlacemark = templateXMLObj.folder.placemark
   // 点航线list
   let pointList = handlePointListForKmz({
      placemark: polygonPointFolder.placemark,
      startPoint,
      execute_height_mode,
      auto_flight_speed
   }).map((i,index)=> {
      // 注入是否使用全局高度参数
      return {
         ...i,
         use_global_height: index > 0 ? templatePlacemark[index-1]?.use_global_height : 0
      }
   })
   return {
      image_format,
      startPoint,
@@ -124,11 +135,14 @@
      take_off_ref_point,
      drone_enum_value,
      drone_sub_enum_value,
      take_off_security_height,
      execute_height_mode,
      take_off_security_height,//起飞安全高度
      execute_height_mode,//执行高度模式
      height_mode,//高度模式
      pointList,//航点航线 点list
      templateType,
      pointPlacemark,
      polygonList
      polygonList,
      buffer_distance_meters
   }
}