dji-wpml · git:20260817.df9e35f · 2026-08-17 · sha256 b494ef733fd8b517
dji-wpml git:20260817.df9e35fA
Immutable. This exact content is served forever at /api/v1/blob/b494ef733fd8b517.
--- name: dji-wpml description: 处理大疆 WPML 航线文件(template.kml / waylines.wpml / .kmz 归档)的生成、解析、修改与校验。当用户提到"大疆航线文件""DJI wayline""WPML""KMZ 航线""template.kml""waylines.wpml"、或要求生成/解析/修改/检查航点、建图航拍、倾斜摄影、航带飞行、目标检测巡逻等航线文件时使用。 --- # DJI WPML 航线文件 WPML(WayPoint Markup Language)是大疆基于 KML 2.2 扩展的航线文件格式标准,航线文件一律以 `.kmz` 后缀归档(ZIP 格式)。本技能帮助你生成、解析、修改、校验符合 DJI 官方标准的航线文件。 ## 何时使用 - 生成新的航线文件(航点飞行 / 建图航拍 / 倾斜摄影 / 航带飞行 / 目标检测巡逻) - 解析或修改已有的 `template.kml` / `waylines.wpml` - 打包或解包 `.kmz` 归档 - 校验航线文件是否合法、能否被 DJI Pilot 2 / 司空 2 正确解析 ## 基础知识 ### 文件结构 一个标准 WPML `.kmz` 解压后包含: | 文件/目录 | 名称 | 职责 | |---|---|---| | `template.kml` | 模板文件 | 定义业务属性,方便用户快速调整编辑(测区、重叠率、模板参数) | | `waylines.wpml` | 执行文件 | 定义明确的飞行与负载动作指令,由软件依据模板参数演算生成,供无人机执行 | | `res/` | 资源目录 | 航线所需辅助资源(精准复拍参考照片 / 目标检测区域 / 仿地 DSM 高程) | 航线名称即文件名(`new_waypoints.kmz` 的航线名是 `new_waypoints`)。**内部各文件/文件夹命名必须遵循此规范,否则航线文件读取失败。** ### XML 头部与命名空间(两个文件都必须) ```xml <?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"> ``` ### 两种高度体系(最容易出错,务必分清) - **template.kml 用 `wpml:heightMode` + `wpml:height`**(编辑体系):`EGM96`(海拔高)/ `relativeToStartPoint`(相对起飞点)/ `aboveGroundLevel`(AGL,仅司空2)/ `realTimeFollowSurface`(实时仿地,仅建图航拍模版,M3E/M3T/M3M) - **waylines.wpml 用 `wpml:executeHeightMode` + `wpml:executeHeight`**(执行体系):`WGS84`(椭球高)/ `relativeToStartPoint`(相对起飞点高)/ `realTimeFollowSurface`(仅 M3E/M3T/M3M) - `ellipsoidHeight` 与 `height` 是同一位置不同高程参考平面的表达,需配合使用 - 若数据来自非椭球坐标系(如 EGM96),转换为 WGS84 需做高程转换,否则飞行高度不准 ## 硬性规则 1. **文件头**:XML 声明必须是 `<?xml version="1.0" encoding="UTF-8"?>`,根元素必须是带上述两个命名空间的 `<kml>` 2. **航点序号**:`wpml:index` 必须从 0 开始**单调连续递增**,在一条航线内唯一,范围 [0, 65535] 3. **模板/航线/动作 ID**:`wpml:templateId`、`wpml:waylineId`、`wpml:actionGroupId`、`wpml:actionId` 建议从 0 开始单调连续递增,范围 [0, 65535] 4. **必需字段**:`missionConfig` 下的 `flyToWaylineMode`、`finishAction`、`exitOnRCLost`、`takeOffSecurityHeight`、`globalTransitionalSpeed`、`globalRTHHeight` 必填;`droneInfo`/`payloadInfo` 必填 5. **枚举值**:所有枚举字段必须使用官方文档定义的值(如 `finishAction` 只能是 `goHome`/`noAction`/`autoLand`/`gotoFirstWaypoint`),禁止自造枚举 6. **坐标格式**:`<coordinates>经度,纬度</coordinates>`(经度在前、纬度在后),经度 [-180,180]、纬度 [-90,90] 7. **条件必需**:注意"当且仅当"类规则,例如 `wpml:height`/`ellipsoidHeight` 仅在 `useGlobalHeight=0` 时必需,`waypointSpeed` 仅在 `useGlobalSpeed=0` 时必需,`executeRCLostAction` 仅在 `exitOnRCLost=executeLostAction` 时必需 8. **数值范围**:速度 [1,15] m/s、`takeOffSecurityHeight` 遥控器 [1.2,1500]/机场 [8,1500] m、重叠率 [0,100] 等,超范围值会导致解析失败 9. **生成后必须校验**:生成或修改文件后,运行 `scripts/validate_wayline.py` 检查 ## 工作流 1. 明确用户要生成哪种模板:`waypoint`(航点飞行)/ `mapping2d`(建图航拍)/ `mapping3d`(倾斜摄影)/ `mappingStrip`(航带飞行)/ `targetdetection`(目标检测巡逻) 2. 按需加载对应参考文档(见下方"按需加载") 3. 生成文件内容,遵守上述硬性规则 4. 用校验脚本验证:`python scripts/validate_wayline.py <file>` 5. 如需打包 KMZ,用 `python scripts/package_kmz.py <template.kml> <waylines.wpml> -o <输出.kmz> [--res <res目录>]`(详见 `reference/kmz-archive.md`) ## 按需加载 - **要生成或修改 template.kml** → 加载 `reference/template-kml.md` - **要生成或修改 waylines.wpml** → 加载 `reference/waylines-wpml.md` - **要查询共用元素**(droneInfo/payloadInfo/actionGroup/偏航角/转弯参数/动作参数) → 加载 `reference/common-elements.md` - **要打包/解包 KMZ 归档** → 加载 `reference/kmz-archive.md`(配合 `scripts/package_kmz.py` 打包、`scripts/validate_wayline.py` 校验) - **涉及目标检测巡逻(targetdetection)** → 加载 `reference/template-kml.md` + `reference/common-elements.md` + `reference/kmz-archive.md`(`res/area` 区域与 `res/dsm` 高程) ## 模板速查 | 模板 | `wpml:templateType` | 关键结构 | |---|---|---| | 航点飞行 | `waypoint` | `Folder` 下多个 `Placemark(Point)`,每个含 `index`/高度/速度/偏航/转弯参数,可挂 `actionGroup` | | 建图航拍 | `mapping2d` | `Placemark` 内 `Polygon` 定义测区,含 `overlap`/`direction`/`margin`/`shootType`/`height` 等 | | 倾斜摄影 | `mapping3d` | 同建图航拍,另有 `inclinedGimbalPitch`/`inclinedFlightSpeed`,生成 5 条航线(1 正射 + 4 倾斜) | | 航带飞行 | `mappingStrip` | `LineString` 定义航带,含 `singleLineEnable`/`cuttingDistance`/`leftExtend`/`rightExtend` 等 | | 目标检测巡逻 | `targetdetection` | 测区 `Polygon` + `targetDetectionActionEnable` + `targetDetection` 动作(含 `targetParam` 模型参数),可选仿地(`dsmFile`) |