6.0 KiB
6.0 KiB
3D轨迹可视化工具
一个用于将GPS轨迹数据转换为可交互3D可视化的Python工具。
功能特性
- 🎯 多格式支持: 支持CSV和Excel文件 (.csv, .xlsx, .xls)
- 📊 3D交互式图表: 基于Plotly的完全可交互3D可视化
- 🎨 智能着色: 按高程自动着色,颜色映射到海拔高度
- 🔧 灵活配置: 可自定义列索引、工作表等参数
- 📱 响应式设计: 生成的HTML可在任何现代浏览器中查看
数据格式要求
文件格式
- CSV文件: 逗号分隔值文件
- Excel文件: .xlsx 或 .xls 格式
数据列要求
文件至少需要包含4列数据,按以下顺序排列:
| 列索引 | 列名 | 数据类型 | 说明 |
|---|---|---|---|
| 0 | 经度 | 数值 | GPS经度坐标(原始格式) |
| 1 | 纬度 | 数值 | GPS纬度坐标(原始格式) |
| 2 | 高程 | 数值 | 飞行器高程(可选) |
| 3 | 融合高程 | 数值 | 融合后的高程数据 |
数据示例
CSV格式:
1157855289,403491370,500110,435.789
1157855290,403491371,500111,436.123
1157855291,403491372,500112,437.456
Excel格式:
- 第一行(如果有标题)将被忽略
- 数据从第二行开始读取
坐标转换
- 经纬度数据会自动除以 10^7 进行单位转换
- 这是因为原始GPS数据通常以放大整数形式存储
安装依赖
pip install pandas plotly openpyxl
使用方法
1. 命令行使用
基本用法
# 处理CSV文件
python 3Dview.py data.csv
# 处理Excel文件
python 3Dview.py trajectory.xlsx
# 指定输出文件
python 3Dview.py data.csv -o my_visualization.html
高级参数
# 自定义列索引
python 3Dview.py data.xlsx --lon-col 1 --lat-col 2 --alt-col 4
# 指定Excel工作表
python 3Dview.py data.xlsx --sheet-name "Flight_Data"
# 自定义标题
python 3Dview.py data.csv --title "无人机飞行轨迹"
# 组合使用
python 3Dview.py trajectory.xlsx \
--lon-col 0 \
--lat-col 1 \
--alt-col 3 \
--sheet-name 0 \
--output flight_path.html \
--title "2024年飞行数据"
2. Python代码调用
基本调用
from 3Dview import main
# 处理CSV文件
success = main('trajectory.csv')
# 处理Excel文件
success = main('flight_data.xlsx', sheet_name='Sheet1')
完整参数调用
from 3Dview import main
success = main(
input_file='drone_trajectory.xlsx',
output_file='visualization.html',
lon_col=0, # 经度列索引
lat_col=1, # 纬度列索引
alt_col=3, # 融合高程列索引
sheet_name=0, # Excel工作表索引
title='无人机轨迹3D可视化'
)
if success:
print("可视化生成成功!")
输出结果
HTML文件内容
- 3D散点图: 每个数据点在三维空间中的位置
- 颜色编码: 点的颜色根据高程自动映射
- 交互功能: 支持旋转、缩放、平移等操作
控制说明
- 鼠标左键拖拽: 旋转视角
- 鼠标滚轮: 缩放视图
- 鼠标右键拖拽: 平移视图
- 双击: 重置到初始视角
- 悬停: 显示数据点的详细信息
参数说明
命令行参数
| 参数 | 简称 | 默认值 | 说明 |
|---|---|---|---|
input_file |
- | 必需 | 输入文件路径 |
--output |
-o |
3d_view.html |
输出HTML文件路径 |
--lon-col |
- | 0 |
经度列索引 |
--lat-col |
- | 1 |
纬度列索引 |
--alt-col |
- | 3 |
融合高程列索引 |
--sheet-name |
- | 0 |
Excel工作表名称或索引 |
--delimiter |
- | None |
CSV分隔符(自动检测) |
--title |
- | 3D轨迹可视化 |
图表标题 |
函数参数
def main(
input_file, # 输入文件路径
output_file='3d_view.html', # 输出文件路径
lon_col=0, # 经度列索引
lat_col=1, # 纬度列索引
alt_col=3, # 高程列索引
delimiter=None, # CSV分隔符
title='3D轨迹可视化', # 图表标题
sheet_name=0 # Excel工作表
):
故障排除
常见问题
1. 文件读取错误
错误:输入文件不存在: xxx
解决: 检查文件路径是否正确,文件是否存在
2. 列数不足
数据文件至少需要4列,经度、纬度、高程、融合高程。当前只有X列。
解决: 检查数据文件格式,确保包含所需列
3. Excel工作表不存在
Worksheet 'Sheet1' not found
解决: 检查Excel文件中的工作表名称,或使用索引(如0)
4. 坐标转换问题
如果坐标显示不正确,检查:
- 经纬度数据格式是否正确
- 单位转换是否合适(除以10^7)
数据验证
运行脚本时会显示以下统计信息:
成功加载数据:XXX 个数据点
经度范围: XXX.XXXXXX - XXX.XXXXXX
纬度范围: XXX.XXXXXX - XXX.XXXXXX
高程范围: XXX.XX - XXX.XX 米
示例应用
无人机飞行轨迹
from 3Dview import main
# 可视化无人机飞行路径
main(
input_file='drone_flight.xlsx',
output_file='drone_path_3d.html',
title='无人机飞行轨迹3D可视化',
sheet_name='GPS_Data'
)
地面车辆轨迹
from 3Dview import main
# 可视化车辆行驶轨迹
main(
input_file='vehicle_gps.csv',
output_file='vehicle_path.html',
title='车辆轨迹可视化',
alt_col=2 # 如果没有高程数据,使用其他列
)
技术细节
依赖库
- pandas: 数据处理
- plotly: 3D可视化
- openpyxl: Excel文件读取
坐标系统
- 输入: 原始GPS坐标(通常为度×10^-7)
- 处理: 转换为标准经纬度坐标
- 显示: WGS84地理坐标系
性能考虑
- 大文件处理: 建议分批处理超大数据集
- 内存使用: 每个数据点占用约50-100字节内存
- 渲染性能: 浏览器对大量数据点的渲染有限制
许可证
本工具遵循与主项目相同的许可证。
版本: 1.0.0 最后更新: 2024年12月