Skip to content

hecongyuan/dji_way_line

Repository files navigation

DJI 航线生成器 (DJI Waypoint KMZ Generator)

一个基于 Vue 3 + CesiumJS 的 DJI 无人机航线规划工具,支持生成符合 WPML 1.0.6 标准的 KMZ 航线文件,可直接导入大疆司空 2 (DJI FlightHub 2) 和 Matrice 系列无人机。

License Vue Cesium

English | 简体中文

仓库地址GitHub | Gitee

⭐ Star 历史

Star History Chart

🎨 界面预览

主界面

主界面

  • 左侧:航线库面板,显示已创建的航线列表
  • 右侧:3D 地图视图(基于高德地图+Cesium)
  • 底部:坐标信息和系统状态显示
  • 右上角:地图控制工具栏

创建航线

创建航线

  • 当前支持航线类型:巡逻航线、面状航线(更多类型开发中)
  • 选择飞行器型号(Matrice 3/4 系列)
  • 选择挂载设备(Matrice 4E/4T)
  • 自定义航线名称

航线编辑

航线编辑

  • 实时显示航线统计(距离、时长、面积)
  • 任务配置面板(飞行参数、高度模式)
  • 地图上可视化航线路径和航点
  • 一键生成/导入 KMZ 文件

📅 开发计划 (Roadmap)

  • 巡逻航线生成、跟司空2兼容
  • m4t 真机测试:在实际环境中验证 Matrice 4T 的飞行和 摄影功能。

💼 如需商业版,请联系作者(微信:hecongyuan2026

商业版航点航线截图

✨ 核心功能

🗺️ 航线规划

  • 可视化地图编辑:基于高德地图 + CesiumJS 的 3D 地图界面
  • 当前支持航线类型
    • 巡逻航线:在地图上添加航点,支持循环或单程巡逻任务
    • 面状航线:绘制区域自动生成 S 形扫描路径,支持 AI 目标识别
    • 更多航线类型(航点、带状、斜面、几何体等)正在开发中
  • 实时预览:航线路径实时显示,支持闭合航线和单程航线
  • 坐标系转换:自动转换 GCJ-02(高德)和 WGS84(GPS)坐标系

🤖 面状航线 AI 扫描 (Matrice 4T)

  • 智能扫描路径生成:自动生成 S 形扫描路径
  • 目标识别配置:支持人、车、船三种目标类型
  • 参数可调
    • 扫描间距(5-200m)
    • 航线方向(0-359°)
    • 边界内缩(0-50m)
    • 云台俯仰角(-90° ~ 30°)
  • 重叠率设置:航向重叠 80%,旁向重叠 70%

📐 高度模式

  • 海拔高度 (WGS84):绝对海拔高度,基于 WGS84 椭球
  • 相对起飞点高度:相对于起飞点的高度
  • 相对地形高度 (实时仿地):实时跟随地形起伏,保持相对地面高度恒定

🎯 任务配置

  • 飞行参数:速度、高度、起飞安全高度
  • 失控动作:返航、悬停、降落、继续执行
  • 完成动作:返航、降落、悬停、返回首航点
  • 爬升模式:垂直爬升、倾斜爬升

📦 KMZ 导入导出

  • 导出 KMZ:生成符合 WPML 1.0.6 标准的 KMZ 文件
  • 导入 KMZ:解析现有 KMZ 文件,恢复航线和配置
  • 兼容性:完全兼容大疆司空 2 和 Matrice 系列无人机

🚀 快速开始

环境要求

  • Node.js >= 20.x
  • pnpm >= 10.x (推荐) 或 npm

安装依赖

# 使用 pnpm (推荐)
pnpm install

# 或使用 npm
npm install

开发运行

# 启动开发服务器
pnpm dev

#
npm run dev

访问 http://localhost:5173 即可使用。

生产构建

# 构建生产版本
pnpm build

#
npm run build

构建产物将输出到 dist 目录。

📖 使用指南

1. 绘制航线

巡逻航线

  1. 选择“巡逻航线”类型
  2. 在地图上点击添加巡逻航点
  3. 设置航点参数(速度、高度、云台角度)
  4. 支持循环巡逻和单程巡逻

面状航线(AI 扫描)

  1. 选择“面状航线”类型
  2. 在地图上绘制扫描区域(至少 3 个点)
  3. 系统自动生成 S 形扫描路径
  4. 调整扫描参数(间距、方向、边距)
  5. 选择 AI 识别目标(人、车、船) - 仅 Matrice 4T 支持

2. 配置参数

基础参数

  • 飞行速度:1-15 m/s,推荐 10 m/s
  • 飞行高度:20-500 m,推荐 60 m
  • 起飞安全高度:10-200 m,推荐 20 m

高度模式选择

  • 海拔高度:适用于地形平坦区域
  • 相对起飞点:适用于起飞点和目标区域高度相近的场景
  • 实时仿地:适用于山地、丘陵等地形起伏较大的区域

3. 生成 KMZ

  1. 点击 生成 KMZ 按钮
  2. 文件自动下载(mission.kmz
  3. 导入大疆司空 2 或无人机遥控器

4. 导入 KMZ

  1. 点击 导入 KMZ 按钮
  2. 选择已有的 KMZ 文件
  3. 系统自动解析并恢复航线和配置

🛠️ 技术栈

前端框架

  • Vue 3.5:渐进式 JavaScript 框架
  • Vite 5.4:下一代前端构建工具

地图引擎

  • CesiumJS 1.135:3D 地球和地图引擎
  • Vue-Cesium 3.2:CesiumJS 的 Vue 3 封装
  • 高德地图:底图服务(GCJ-02 坐标系)

核心库

  • JSZip 3.10:KMZ 文件压缩/解压
  • UUID:生成唯一标识符(自定义实现)

📁 项目结构

way_line/
├── src/
│   ├── components/
│   │   └── WaypointGenerator/
│   │       ├── index.vue              # 主组件
│   │       ├── MapViewer.vue          # 地图视图
│   │       ├── ControlPanel.vue       # 控制面板
│   │       ├── MissionConfig.vue      # 任务配置
│   │       └── WaypointList.vue       # 航点列表
│   ├── utils/
│   │   ├── kmzGenerator.js            # KMZ 生成器
│   │   ├── kmzParser.js               # KMZ 解析器
│   │   ├── routePlanner.js            # 路径规划算法
│   │   ├── coordTransform.js          # 坐标转换 (GCJ-02 ↔ WGS84)
│   │   └── geoUtils.js                # 地理计算工具
│   ├── App.vue                        # 应用根组件
│   └── main.js                        # 应用入口
├── public/                            # 静态资源
├── package.json                       # 项目配置
├── vite.config.js                     # Vite 配置
└── README.md                          # 项目文档

🔧 核心算法

坐标转换

项目实现了 GCJ-02(火星坐标系)和 WGS84(GPS 坐标系)之间的相互转换:

  • 存储:使用 GCJ-02 坐标(与高德地图一致)
  • 显示:直接使用 GCJ-02 坐标(无偏移)
  • 导出:转换为 WGS84 坐标(大疆标准)

这确保了:

  • ✅ 前端点击位置和显示位置完全一致
  • ✅ 导入大疆后位置准确无偏移

S 形扫描路径生成

基于多边形区域自动生成 S 形扫描路径:

  1. 坐标投影:将经纬度转换为平面坐标(米)
  2. 多边形收缩:根据边距参数向内收缩
  3. 坐标旋转:根据方向角旋转坐标系
  4. 扫描线生成:在旋转后的坐标系中生成水平扫描线
  5. 交点计算:计算扫描线与多边形的交点
  6. 路径优化:S 形连接,减少转弯次数
  7. 反向旋转:转换回原坐标系
  8. 坐标还原:转换回经纬度

距离和时间计算

使用 Haversine 公式计算航点间的大圆距离:

const R = 6371000; // 地球半径(米)
const φ1 = lat1 * π / 180;
const φ2 = lat2 * π / 180;
const Δφ = (lat2 - lat1) * π / 180;
const Δλ = (lng2 - lng1) * π / 180;

const a = sin²(Δφ/2) + cos(φ1) · cos(φ2) · sin²(Δλ/2);
const c = 2 · atan2(√a, (1−a));
const d = R · c;

📝 KMZ 文件结构

生成的 KMZ 文件符合 DJI WPML 1.0.6 标准:

mission.kmz
└── wpmz/
    ├── template.kml       # 模板定义(区域、参数)
    └── waylines.wpml      # 航线定义(航点、动作)

template.kml

  • 任务配置(速度、高度模式、失控动作等)
  • 区域定义(多边形坐标)
  • AI 巡逻参数(方向、边距、重叠率、目标类型)
  • 云台和相机参数

waylines.wpml

  • 航点列表(坐标、高度、速度)
  • 航点动作(云台角度、拍照、录像)
  • AI 目标检测动作
  • 航线统计(距离、时间)

⚠️ 注意事项

坐标系统

  • 前端地图使用 GCJ-02(高德地图)
  • 导出 KMZ 使用 WGS84(GPS 标准)
  • 系统自动处理转换,无需手动操作

高度设置

  • 海拔高度:需要知道区域的实际海拔
  • 相对起飞点:适用于大部分场景
  • 实时仿地:需要无人机支持实时测距传感器

AI 巡逻

  • 仅支持 Matrice 4T 及以上型号
  • 需要在大疆司空 2 中启用 AI 功能
  • 扫描间距建议 10-50m,根据目标大小调整

文件兼容性

  • 生成的 KMZ 文件符合 WPML 1.0.6 标准
  • 兼容大疆司空 2 和 Matrice 系列无人机
  • 建议在导入前备份原有航线

🐛 常见问题

Q: 导入大疆后位置偏移?

A: 已通过坐标转换解决。如果仍有偏移,请检查:

  • 地图底图是否为高德地图
  • 是否在中国境内(坐标转换仅在中国有效)

Q: AI 巡逻航线显示为虚线?

A: 虚线表示模板,实线表示确定航线。已添加 distanceduration 参数,应显示为实线。

Q: 扫描路径方向不对?

A: 调整 航线方向角度

  • 0° = 南北向(垂直)
  • 90° = 东西向(水平)

Q: 生成的航线点数太多?

A: 减小扫描间距或增大重叠率会增加航点数。建议:

  • 扫描间距:20-50m
  • 重叠率:保持默认 80%/70%

📄 许可证

本项目采用 GPL-3.0 许可证 (GNU General Public License v3.0)。

主要条款

  • 商业使用:允许商业使用
  • 修改:允许修改源代码
  • 分发:允许分发原始或修改后的版本
  • 专利授权:提供明确的专利授权
  • 私人使用:允许私人使用和修改

限制条件

  • ⚠️ 相同许可证:修改后的衍生作品必须使用相同的 GPL-3.0 许可证
  • ⚠️ 开源要求:分发时必须提供完整的源代码
  • ⚠️ 版权声明:必须保留原作者的版权声明和许可证信息
  • ⚠️ 状态变更说明:修改文件时必须注明修改内容

为什么选择 GPL-3.0?

  1. 保护开源生态:确保衍生作品也保持开源,防止闭源商用
  2. 专利保护:GPL-3.0 提供了明确的专利授权,保护用户免受专利诉讼
  3. 促进共享:鼓励开发者共享改进,共同推动项目发展
  4. DRM 限制:禁止使用 DRM(数字版权管理)限制用户权利

详细许可证内容请查看 LICENSE 文件。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📧 联系方式

  • 作者微信hecongyuan2026
  • Emailh285121973@gmail.com
  • 问题反馈:通过 GitHub Issues 提交

微信二维码

👥 社区交流群

欢迎加入 DJI 航线生成器社区交流群,与其他开发者和用户交流使用经验、分享航线规划技巧、获取最新功能更新!

社区交流群二维码

About

大疆航线生成

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published