254 lines
6.0 KiB
Markdown
254 lines
6.0 KiB
Markdown
# 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格式**:
|
||
```csv
|
||
1157855289,403491370,500110,435.789
|
||
1157855290,403491371,500111,436.123
|
||
1157855291,403491372,500112,437.456
|
||
```
|
||
|
||
**Excel格式**:
|
||
- 第一行(如果有标题)将被忽略
|
||
- 数据从第二行开始读取
|
||
|
||
### 坐标转换
|
||
- 经纬度数据会自动除以 10^7 进行单位转换
|
||
- 这是因为原始GPS数据通常以放大整数形式存储
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
pip install pandas plotly openpyxl
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 命令行使用
|
||
|
||
#### 基本用法
|
||
```bash
|
||
# 处理CSV文件
|
||
python 3Dview.py data.csv
|
||
|
||
# 处理Excel文件
|
||
python 3Dview.py trajectory.xlsx
|
||
|
||
# 指定输出文件
|
||
python 3Dview.py data.csv -o my_visualization.html
|
||
```
|
||
|
||
#### 高级参数
|
||
```bash
|
||
# 自定义列索引
|
||
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代码调用
|
||
|
||
#### 基本调用
|
||
```python
|
||
from 3Dview import main
|
||
|
||
# 处理CSV文件
|
||
success = main('trajectory.csv')
|
||
|
||
# 处理Excel文件
|
||
success = main('flight_data.xlsx', sheet_name='Sheet1')
|
||
```
|
||
|
||
#### 完整参数调用
|
||
```python
|
||
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轨迹可视化` | 图表标题 |
|
||
|
||
### 函数参数
|
||
|
||
```python
|
||
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 米
|
||
```
|
||
|
||
## 示例应用
|
||
|
||
### 无人机飞行轨迹
|
||
```python
|
||
from 3Dview import main
|
||
|
||
# 可视化无人机飞行路径
|
||
main(
|
||
input_file='drone_flight.xlsx',
|
||
output_file='drone_path_3d.html',
|
||
title='无人机飞行轨迹3D可视化',
|
||
sheet_name='GPS_Data'
|
||
)
|
||
```
|
||
|
||
### 地面车辆轨迹
|
||
```python
|
||
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月
|