Initial commit: GasFlux project with core processing pipelines

This commit is contained in:
2026-01-05 09:33:27 +08:00
commit f085d7c5fe
50 changed files with 10634 additions and 0 deletions

295
DATA_PROCESSOR_README.md Normal file
View File

@ -0,0 +1,295 @@
# 无人机数据处理工具
将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`, `四元数_q3`
- `pitch`, `roll`, `yaw`
- `H2O`, `原始风向`, `原始风速`
### 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
#### ⚙️ 自定义参数
```python
# 自定义参数
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. 交互式输入模式(推荐新用户)
```bash
# 直接运行脚本,会自动进入交互式模式
python data_processor.py
# 或者明确指定交互式模式
python data_processor.py --interactive
```
在交互式模式下,程序会提示您:
- 输入Excel文件路径
- 指定输出CSV文件路径可选
- 确认处理参数
### 2. 命令行参数模式
```bash
# 基本用法
python data_processor.py your_data.xlsx
# 指定输出路径
python data_processor.py input.xlsx -o output.csv
# 查看帮助
python data_processor.py --help
```
### 3. Python脚本直接调用推荐
```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`
```python
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代码调用
```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输入要求
```csv
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` 参数调整计算数量
## 🔧 依赖要求
```bash
pip install pandas openpyxl requests
```
确保GasFlux的`qiya.py`模块可用。
## ⚠️ 注意事项
### 数据质量
- 确保Excel文件格式正确
- 检查日期时间格式
- 验证经纬度坐标范围
### API限制
- Open-Meteo有每日请求限制
- 批量处理时注意请求频率
- 网络连接稳定很重要
### 内存使用
- 大文件处理时注意内存占用
- 可以分批处理超大数据集
## 🎯 应用场景
### 无人机通量测量
1. **数据采集**: 无人机飞行收集原始数据
2. **数据处理**: 使用本脚本转换为标准格式
3. **通量计算**: 输入GasFlux进行气体通量分析
### 数据预处理工作流
```
原始Excel → 数据处理脚本 → GasFlux格式 → 通量计算 → 结果分析
```
## 📈 处理结果验证
处理完成后检查:
- ✅ 时间戳格式正确 (YYYY-MM-DD HH:MM:SS)
- ✅ 经纬度坐标合理范围
- ✅ 高度值从0开始 (已减去最小值)
- ✅ 气压值在合理范围 (900-1100 hPa)
- ✅ 所有必需字段都存在
## 🛠️ 故障排除
### 常见问题
#### 1. 文件读取错误
```
确保Excel文件未损坏列名与预期一致
```
#### 2. 时间格式错误
```
检查文件名格式,确包含小时信息 (HH_MM_SS...)
```
#### 3. 气压计算失败
```
检查网络连接,确认日期格式正确
```
#### 4. 坐标转换异常
```
验证经纬度数据是数值类型,不是字符串
```
## 📞 支持
如遇问题,请检查:
1. 输入数据格式是否正确
2. 网络连接是否正常
3. GasFlux依赖是否完整安装
4. Python版本兼容性
---
**版本**: 1.0.0
**最后更新**: 2024年12月