当前位置: 首页 > article >正文

js模板式生成大疆上云kml文件(含详细注释,已封装成函数)

代码: 

// KML模板函数,用于填充JSON数据
export default function kmlTemplate (data) {
 return `<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:wpml="http://www.dji.com/wpmz/1.0.2">
  <Document>
    <Folder>
      <!-- Step 1: Implement File Creation Information -->
  <!-- 航线创作者 -->
  <wpml:author>Name</wpml:author>
  <!-- 航线创造时间的时间戳 -->
  <wpml:createTime>1637600807044</wpml:createTime>
  <!-- 航线更新的时间戳 -->
  <wpml:updateTime>1637600875837</wpml:updateTime>
 
  <!-- Step 2: Setup Mission Configuration -->
  <wpml:missionConfig>
    <wpml:flyToWaylineMode>safely</wpml:flyToWaylineMode>
    <wpml:finishAction>goHome</wpml:finishAction>
    <!-- 失控是否继续执行航线 -->
    <!-- goContinue/executeLostAction:退出航线,执行失控动作 -->
    <wpml:exitOnRCLost>goContinue</wpml:exitOnRCLost>
    <!-- 失控动作类型goback/lamding/hover -->
    <wpml:executeRCLostAction>hover</wpml:executeRCLostAction>
    <!-- 安全起飞高度 -->
    <wpml:takeOffSecurityHeight>20</wpml:takeOffSecurityHeight>
    <!-- 参考起飞点 -->
    <wpml:takeOffRefPoint>23.98057,115.987663,100</wpml:takeOffRefPoint>
    <!-- 参考起飞点海拔高度 -->
    <wpml:takeOffRefPointAGLHeight>35</wpml:takeOffRefPointAGLHeight>
    <!-- 全局航线过渡速度 ; 8m/s-->
    <wpml:globalTransitionalSpeed>8</wpml:globalTransitionalSpeed>
    <wpml:droneInfo>
      <!-- Declare drone model with M30 -->
      <!-- 飞行器机型主类型 -->
      <!-- 89(机型:M350 RTK),60(机型:M300 RTK),67(机型:M30/M30T),77(机型:M3E/M3T/M3M),91(机型:M3D/M3TD) -->
      <wpml:droneEnumValue>67</wpml:droneEnumValue>
      <!-- 飞行器机型子类型 -->
      <!-- 当“飞行器机型主类型”为“67(机型:M30/M30T)”时:0(机型:M30双光),1(机型:M30T三光)
      当“飞行器机型主类型“为”77(机型:M3E/M3T/M3M)“时:0(机型:M3E)1(机型:M3T)2(机型:M3M)
      当“飞行器机型主类型“为”91(机型:M3D/M3TD)“时:0(机型:M3D)1(机型:M3TD -->
      <wpml:droneSubEnumValue>0</wpml:droneSubEnumValue>
    </wpml:droneInfo>
    <wpml:payloadInfo>
      <!-- Declare payload model with M30 -->
      <!-- 负载机型主类型 -->
      <!-- 42(H20)43(H20T)52(M30双光相机)53(M30T三光相机)61(H20N)66(Mavic 3E 相机)67(Mavic 3T 相机)
      68(Mavic 3M 相机)80(Matrice 3D 相机)81(Matrice 3TD 相机)65534(PSDK 负载)82(H30)83(H30T) -->
      <wpml:payloadEnumValue>52</wpml:payloadEnumValue>
      <!-- 负载挂载位置 -->
      <!-- 0:飞行器1号挂载位置。M300 RTK,M350 RTK机型,对应机身左前方。其它机型,对应主云台。
           1:飞行器2号挂载位置。M300 RTK,M350 RTK机型,对应机身右前方。
           2:飞行器3号挂载位置。M300 RTK,M350 RTK机型,对应机身上方。 -->
      <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
    </wpml:payloadInfo>
  </wpml:missionConfig>
 
  <!-- Step 3: Setup A Folder for Waypoint Template -->
  <Folder>
    <wpml:templateType>waypoint</wpml:templateType>
    <wpml:useGlobalTransitionalSpeed>0</wpml:useGlobalTransitionalSpeed>
    <!-- 模板ID
* 注:在一个kmz文件内该ID唯一。建议从0开始单调连续递增。
在template.kml和waylines.wpml文件中,将使用该id将模板与所生成的可执行航线进行关联。 -->
    <wpml:templateId>0</wpml:templateId>
    <!-- 坐标系参数 -->
    <wpml:waylineCoordinateSysParam>
      <wpml:coordinateMode>WGS84</wpml:coordinateMode>
      <wpml:heightMode>EGM96</wpml:heightMode>
      <wpml:globalShootHeight>50</wpml:globalShootHeight>
      <!-- 飞行器离被摄面高度(相对地面高)* 注:仅适用于模板类型mapping2d,mapping3d,mappingStrip -->
      <wpml:positioningType>GPS</wpml:positioningType>
      <!-- 是否开启仿地飞行,0不开启,1开启 -->
      <wpml:surfaceFollowModeEnable>1</wpml:surfaceFollowModeEnable>
      <wpml:surfaceRelativeHeight>100</wpml:surfaceRelativeHeight>
    </wpml:waylineCoordinateSysParam>
    <wpml:autoFlightSpeed>7</wpml:autoFlightSpeed>
    <wpml:gimbalPitchMode>usePointSetting</wpml:gimbalPitchMode>
    <!-- 全局偏航角模式参数 -->
    <wpml:globalWaypointHeadingParam>
    <!-- 飞行器偏航角模式 -->
      <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
      <!-- 飞行器偏航角度 -->
      <wpml:waypointHeadingAngle>45</wpml:waypointHeadingAngle>
      <wpml:waypointPoiPoint>24.323345,116.324532,31.000000</wpml:waypointPoiPoint>
      <!-- 飞行器偏航角转动方向 -->
      <!-- clockwise:顺时针旋转飞行器偏航角
           counterClockwise:逆时针旋转飞行器偏航角
           followBadArc:沿最短路径旋转飞行器偏航角 -->
      <wpml:waypointHeadingPathMode>clockwise</wpml:waypointHeadingPathMode>
    </wpml:globalWaypointHeadingParam>
    <!-- 全局航点类型(全局航点转弯模式) -->
    <!-- coordinateTurn:协调转弯,不过点,提前转弯
         toPointAndStopWithDiscontinuityCurvature:直线飞行,飞行器到点停
         toPointAndStopWithContinuityCurvature:曲线飞行,飞行器到点停
         toPointAndPassWithContinuityCurvature:曲线飞行,飞行器过点不停 -->
    <wpml:globalWaypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:globalWaypointTurnMode>
    <!-- 全局航段轨迹是否尽量贴合直线 -->
    <!-- 0:航段轨迹全程为曲线 1:航段轨迹尽量贴合两点连线 -->
    <wpml:globalUseStraightLine>0</wpml:globalUseStraightLine>
      ${data.map(point => `
        <Placemark>
          <Point>
            <coordinates>${point.longitude},${point.latitude},${point.height}</coordinates>
          </Point>
          <wpml:index>0</wpml:index>
      <wpml:ellipsoidHeight>90.2</wpml:ellipsoidHeight>
      <wpml:height>100</wpml:height>
      <!-- 0:不使用全局设置;1:使用全局设置 -->
      <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
      <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
      <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
      <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
      <wpml:gimbalPitchAngle>0</wpml:gimbalPitchAngle>
      <!-- Declare action group for waypoint 1# -->
      <wpml:actionGroup>
        <wpml:actionGroupId>0</wpml:actionGroupId>
        <wpml:actionGroupStartIndex>1</wpml:actionGroupStartIndex>
        <wpml:actionGroupEndIndex>1</wpml:actionGroupEndIndex>
        <!-- 	动作执行模式 -->
        <!-- sequence:串行执行。即动作组内的动作依次按顺序执行。 -->
        <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
        <wpml:actionTrigger>
        <!-- 	reachPoint:到达航点时执行betweenAdjacentPoints:航段触发,均匀转云台multipleTiming:等时触发multipleDistance:等距触发
        * 注:“betweenAdjacentPoints”需配合动作"gimbalEvenlyRotate"使用,“multipleTiming” 配合动作 
        “takePhoto” 即可实现等时间隔拍照,“multipleDistance” 配合动作 “takePhoto” 即可实现等距离间隔拍照。 -->
          <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
        </wpml:actionTrigger>
        <!-- Declare the 1st action: rotate gimbal -->
        <wpml:action>
          <wpml:actionId>0</wpml:actionId>
          <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
          <wpml:actionActuatorFuncParam>
          <!-- 云台转动模式 -->
          <!-- -	absoluteAngle:绝对角度,相对于正北方的角度 -->
            <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
            <!-- 0不能/1能 -->
            <wpml:gimbalPitchRotateEnable>0</wpml:gimbalPitchRotateEnable>
            <wpml:gimbalPitchRotateAngle>0</wpml:gimbalPitchRotateAngle>
            <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
            <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
            <!-- yaw偏航 -->
            <wpml:gimbalYawRotateEnable>1</wpml:gimbalYawRotateEnable>
            <wpml:gimbalYawRotateAngle>30</wpml:gimbalYawRotateAngle>
            <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
            <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
            <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
          </wpml:actionActuatorFuncParam>
        </wpml:action>
        <!-- Declare the 2nd action: take photo -->
        <wpml:action>
          <wpml:actionId>1</wpml:actionId>
          <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
          <wpml:actionActuatorFuncParam>
            <wpml:fileSuffix>point1</wpml:fileSuffix>
            <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
          </wpml:actionActuatorFuncParam>
        </wpml:action>
      </wpml:actionGroup>
        </Placemark>
      `).join('')}
    </Folder>
  </Document>
</kml>
`;}

注意:如此生成的航线缺乏规范且死板,需要后端domj4针对飞行器姿态和云台姿态生成符合生产需求的对应航线文件,更多的帮自己和大家节省对照查阅官方文档的时间。


http://www.kler.cn/news/358467.html

相关文章:

  • 爬虫学习——25.JS逆向(1)
  • 关于Qt中QMenu控件踩坑实录
  • Codeforces Round 980 (Div. 2) D 题解
  • element ui plus 版本 日期时间选择器的差异
  • UE5 gameplay学习1 蓝图修改材质和参数
  • 408数据结构-折半查找,分块查找 自学知识点整理
  • 101、QT摄像头录制视频问题
  • 有限状态机和抽象类多态
  • 再论保距变换概念让5000年都无人能识的N外标准自然数一下子浮出水面推翻百年集论
  • WebGL编程指南 - 颜色与纹理
  • 【AWS AMI跨境备份】跨境使用 S3 备份和还原 AMI 镜像
  • 最新版!《末日地带2》十四项修改器 增加健康/增加信心/设置游戏速度
  • Scala中的reduce
  • PROFINET开发EtherNet/IP开发Vline板卡在称重设备行业的应用
  • Python SQL 注入攻击及其防护措施:编写安全的数据库查询
  • 数据结构之链表——单向链表
  • Centos7系统Python3.11.2版本安装
  • 理解ES6中的模块
  • Leetcode刷题. 贪心算法
  • MySQL【知识改变命运】10