# 无人机数据处理工具 将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月