7.7 KiB
7.7 KiB
无人机数据处理工具
将Excel格式的无人机测量数据转换为GasFlux标准输入格式的完整解决方案。
📋 处理流程
输入数据格式
Excel文件必须包含以下列(顺序可以不同):
| 列名 | 数据类型 | 说明 |
|---|---|---|
日期 |
字符串 | 日期 (YYYY-MM-DD 或 YYYY/MM/DD) |
时间 |
字符串 | 时间 (HH:MM:SS 或 H:MM:SS) |
经度 |
数值 | GPS经度坐标 (原始大数值) |
纬度 |
数值 | GPS纬度坐标 (原始大数值) |
高程 |
数值 | 飞行器高程 |
融合高程 |
数值 | 融合后的海拔高度 |
速度x |
数值 | 东向速度分量 |
速度y |
数值 | 北向速度分量 |
速度z |
数值 | 垂直速度分量 |
四元数_q0-q3 |
数值 | 姿态四元数 |
pitch |
数值 | 俯仰角 |
roll |
数值 | 横滚角 |
yaw |
数值 | 偏航角 |
CH4 |
数值 | 甲烷浓度 |
H2O |
数值 | 水蒸气浓度 |
修正风向 |
数值 | 修正后的风向 |
修正风速 |
数值 | 修正后的风速 |
原始风向 |
数值 | 原始风向 |
原始风速 |
数值 | 原始风速 |
风温 |
数值 | 风温 (温度) |
🔄 处理步骤详解
1. 列删除
自动删除以下不需要的列:
高程,速度x,速度y,速度z四元数_q0,四元数_q1,四元数_q2,四元数_q3pitch,roll,yawH2O,原始风向,原始风速
2. 时间修正
根据文件名提取小时信息并修正时间列:
文件名示例: 08_34_01_间隔高度5m.xlsx
- 提取:
08(小时) - 时间转换:
0:34:01→08:34:01
3. 坐标转换
经纬度坐标除以 10^7 进行单位转换:
原始经度: 1157855289 → 转换后: 115.7855289
原始纬度: 403491370 → 转换后: 40.3491370
4. 气压计算(智能优化)
使用 qiya.py 模块智能计算地面气压,支持两种计算模式:
🎯 三级智能计算策略
- 高度变化小(默认容差≤10米):只计算一次平均气压,应用到所有行
- 中等变化:使用高度分档策略,每个档位计算一次气压
- 高度变化大:逐行计算气压,支持进度条显示
📏 高度分档优化
- 分档间隔:默认2米一个档位(可自定义)
- 档位计算:每个档位使用中间高度和平均位置计算一次气压
- 减少API调用:大幅降低重复计算,提高效率
📊 计算参数
- 日期格式: 转换为
YYYY-MM-DD(自动提取日期部分) - 时间格式: 提取小时部分
HH - 海拔高度: 使用
融合高程列或档位中心高度 - API调用: Open-Meteo 历史天气数据
- 进度条: 自动显示计算进度(需要安装tqdm)
⚙️ 自定义参数
# 自定义参数
df = calculate_pressure(
df,
max_samples=None,
height_tolerance=10.0, # 高度变化容差
height_bin_size=2.0 # 高度分档间隔
)
5. 高度调整
对 融合高程 进行基准调整:
调整后高度 = 原始高度 - 最小高度
6. 时间戳融合
将 日期 和 时间 列合并:
输入: 日期="2024-01-15", 时间="08:34:01"
输出: timestamp="2024-01-15 08:34:01"
7. 字段重命名
转换为GasFlux标准字段名:
| 原始字段 | GasFlux字段 | 数据类型 |
|---|---|---|
日期+时间 |
timestamp |
datetime |
经度 |
latitude |
float |
纬度 |
longitude |
float |
融合高程 |
height_ato |
float |
修正风向 |
windir |
float |
修正风速 |
windspeed |
float |
风温 |
temperature |
float |
气压计算结果 |
pressure |
float |
CH4 |
ch4 |
float |
🚀 使用方法
1. 交互式输入模式(推荐新用户)
# 直接运行脚本,会自动进入交互式模式
python data_processor.py
# 或者明确指定交互式模式
python data_processor.py --interactive
在交互式模式下,程序会提示您:
- 输入Excel文件路径
- 指定输出CSV文件路径(可选)
- 确认处理参数
2. 命令行参数模式
# 基本用法
python data_processor.py your_data.xlsx
# 指定输出路径
python data_processor.py input.xlsx -o output.csv
# 查看帮助
python data_processor.py --help
3. Python脚本直接调用(推荐)
# 最简单的方式
from src.gasflux.data_processor import process_file
# 处理文件并返回DataFrame
df = process_file('your_data.xlsx')
# 或者指定输出文件名
df = process_file('input.xlsx', 'output.csv')
# 使用返回的DataFrame进行进一步分析
print(df.head())
print(df['ch4'].describe())
4. 完整使用脚本
复制以下代码到新文件(如 process_my_data.py):
from src.gasflux.data_processor import process_file
# 修改这里的输入文件名
input_file = "08_34_01_间隔高度5m.xlsx" # 您的Excel文件名
output_file = "processed_data.csv" # 输出文件名(可选)
try:
df = process_file(input_file, output_file)
print("✅ 处理成功!")
print(f"数据形状: {df.shape}")
print(f"列名: {list(df.columns)}")
print(df.head())
except Exception as e:
print(f"❌ 处理失败: {e}")
Python代码调用
from src.gasflux.data_processor import process_excel_file
# 处理单个文件
df = process_excel_file('path/to/data.xlsx')
# 查看结果
print(df.head())
print(df.columns)
📊 输出格式
处理后的数据完全符合GasFlux输入要求:
timestamp,latitude,longitude,height_ato,windspeed,windir,temperature,pressure,ch4
2024-01-15 08:34:01,115.785529,40.349137,10.5,3.2,180.5,22.3,1013.25,2.15
2024-01-15 08:34:02,115.785530,40.349138,10.8,3.1,181.2,22.4,1013.26,2.18
...
⚙️ 配置选项
文件名格式
脚本根据文件名自动提取时间信息:
- 格式:
{HH}_{MM}_{SS}_{其他信息}.xlsx - 示例:
08_34_01_间隔高度5m.xlsx→ 小时=08
气压计算
- 默认只计算前20行数据(避免过多API调用)
- 可以修改
max_samples参数调整计算数量
🔧 依赖要求
pip install pandas openpyxl requests
确保GasFlux的qiya.py模块可用。
⚠️ 注意事项
数据质量
- 确保Excel文件格式正确
- 检查日期时间格式
- 验证经纬度坐标范围
API限制
- Open-Meteo有每日请求限制
- 批量处理时注意请求频率
- 网络连接稳定很重要
内存使用
- 大文件处理时注意内存占用
- 可以分批处理超大数据集
🎯 应用场景
无人机通量测量
- 数据采集: 无人机飞行收集原始数据
- 数据处理: 使用本脚本转换为标准格式
- 通量计算: 输入GasFlux进行气体通量分析
数据预处理工作流
原始Excel → 数据处理脚本 → GasFlux格式 → 通量计算 → 结果分析
📈 处理结果验证
处理完成后检查:
- ✅ 时间戳格式正确 (YYYY-MM-DD HH:MM:SS)
- ✅ 经纬度坐标合理范围
- ✅ 高度值从0开始 (已减去最小值)
- ✅ 气压值在合理范围 (900-1100 hPa)
- ✅ 所有必需字段都存在
🛠️ 故障排除
常见问题
1. 文件读取错误
确保Excel文件未损坏,列名与预期一致
2. 时间格式错误
检查文件名格式,确包含小时信息 (HH_MM_SS...)
3. 气压计算失败
检查网络连接,确认日期格式正确
4. 坐标转换异常
验证经纬度数据是数值类型,不是字符串
📞 支持
如遇问题,请检查:
- 输入数据格式是否正确
- 网络连接是否正常
- GasFlux依赖是否完整安装
- Python版本兼容性
版本: 1.0.0 最后更新: 2024年12月