WorldCover 数据处理文档
1. 概述
WorldCover是OlmoEarth预训练数据集使用的六种派生地图之一,提供全球土地覆盖分类信息。该数据由ESA (European Space Agency) 提供,用于增强模型对地球表面覆盖类型的理解。
与OpenStreetMap不同,WorldCover本身已是栅格数据格式,因此处理流程相对简单,无需额外的栅格化步骤。
2. 模态定义
WorldCover在 olmoearth_pretrain/data/constants.py 中定义如下:
| 属性 | 值 | 说明 |
|---|---|---|
| 名称 | worldcover |
模态标识符 |
| 分辨率因子 | 16 | 对应10m分辨率(BASE_RESOLUTION × 16 = 10m) |
| 波段集 | ["B1"] |
单波段土地覆盖分类 |
| 多时相 | False |
静态数据,无时间维度 |
| 空间变化 | True |
具有空间分辨率 |
3. 处理管线架构
3.1 整体架构对比
| 模态 | 数据源 | 中间格式 | 最终格式 | 主要处理步骤 |
|---|---|---|---|---|
| OpenStreetMap | 矢量GeoJSON | GeoJSON | GeoTIFF(栅格化) | 加载→转换→栅格化 |
| WorldCover | 栅格GeoTIFF | GeoTIFF | GeoTIFF | 加载→转换 |
6. 统一窗口配置
6.1 为什么需要统一窗口
为了确保 WorldCover 与其他模态(如 OSM、Sentinel-1/2、SRTM 等)能够正确对齐并合并到同一空间维度,必须使用统一的窗口定义文件。
如果每个模态各自从经纬度范围重新推导 tiles,可能会导致:
- tile 边界不一致
- 空间错位
- 无法正确合并多模态数据
6.2 生成统一窗口 JSON
python scripts/tools/generate_olmoearth_windows.py \
--bbox 118.2889,29.1564,120.7598,30.5935 \
--output data/hangzhou_olmoearth_windows.json \
--resolution 10 \
--window-size 256
参数说明:
-
--bbox: 目标区域的经纬度范围,格式为min_lon,min_lat,max_lon,max_lat -
--output: 输出的窗口 JSON 文件路径 -
--resolution: 分辨率(单位:米),WorldCover 使用 10m -
--window-size: 窗口大小(像素),默认 256
6.3 窗口 JSON 格式
生成的 hangzhou_olmoearth_windows.json 每个条目包含:
| 字段 | 说明 | 示例 |
|---|---|---|
id |
窗口唯一标识符 | EPSG:32650_243_-1324 |
name |
窗口名称(含分辨率) | EPSG:32650_10_243_-1324 |
crs |
坐标参考系统 | EPSG:32650 |
resolution |
分辨率(米) | 10.0 |
col |
网格列索引 | 243 |
row |
网格行索引 | -1324 |
bounds |
米制边界 | {"minx": 622080.0, ...} |
bbox |
WGS84 边界 | [118.2735, 30.6080, ...] |
6.4 多模态处理流程
┌──────────────────────────────────────────────────────────────────────┐
│ 统一窗口生成 │
│ generate_olmoearth_windows.py → hangzhou_olmoearth_windows.json │
└──────────────────────────────────────────────────────────────────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ OSM 处理 │ │ WorldCover处理 │ │ Sentinel处理 │
│ (使用同一JSON) │ │ (使用同一JSON) │ │ (使用同一JSON) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
▼
┌───────────────────────────┐
│ H5 合并与转换 │
│ run_h5_conversion.py │
└───────────────────────────┘
9. 数据规范
9.1 时间范围
WorldCover数据使用固定时间范围:
-
起始时间:
2021-01-01T00:00:00+00:00 -
结束时间:
2022-01-01T00:00:00+00:00
9.2 空间分辨率
| 分辨率因子 | 实际分辨率 | 说明 |
|---|---|---|
| 16 | 10m/pixel | WorldCover原始分辨率 |
9.3 数据类型
- 格式: GeoTIFF
- 数据类型: 整数(土地覆盖分类编码)
-
NoData值:
-99999(全局MISSING_VALUE)
11. 本地TIF文件处理流程
当您拥有本地大尺寸WorldCover TIF文件时,可以使用专用脚本来处理,无需通过rslearn在线下载。
11.1 处理步骤
┌─────────────────────────────────────────────────────────────────┐
│ 本地TIF裁剪处理流程 │
├─────────────────────────────────────────────────────────────────┤
│ 输入: 大尺寸TIF文件 (如36000×36000像素,10m分辨率) │
│ └── 覆盖范围: 118.2889°E ~ 120.7598°E, │
│ 29.1564°N ~ 30.5935°N │
│ ▼ │
│ Step 1: 加载统一窗口配置 (hangzhou_olmoearth_windows.json) │
│ └── 共6272个窗口,每个256×256像素 │
│ ▼ │
│ Step 2: 扫描TIF文件目录 │
│ ▼ │
│ Step 3: 坐标转换 (窗口EPSG:32650 → TIF的CRS) │
│ ▼ │
│ Step 4: 窗口匹配 (查找覆盖窗口的TIF文件) │
│ ▼ │
│ Step 5: 裁剪输出 (256×256 GeoTIFF) │
│ ▼ │
│ Step 6: 元数据生成 (CSV格式) │
│ ▼ │
│ 输出: 10_worldcover/ (GeoTIFF) + 10_worldcover.csv (元数据) │
└─────────────────────────────────────────────────────────────────┘
11.2 执行命令
# 设置参数
export DATA_PATH="/mnt/si000082vai5/default/embedding/yangxiong/git/data/in/"
export OUTPUT_PATH="/mnt/si000082vai5/default/embedding/yangxiong/git/data/olmoearth_dataset"
export WINDOWS_JSON="/usr/local/olmo_earth/olmoearth_pretrain/data/hangzhou_olmoearth_windows.json"
# 创建输出目录
mkdir -p "$OUTPUT_PATH/10_worldcover"
mkdir -p "$OUTPUT_PATH/10_worldcover_meta"
# 运行处理脚本
cd /usr/local/olmo_earth/olmoearth_pretrain
python3 olmoearth_pretrain/dataset_creation/rslearn_to_olmoearth/worldcover/process_local_worldcover_detailed.py \
--data_path "$DATA_PATH" \
--windows_json "$WINDOWS_JSON" \
--olmoearth_path "$OUTPUT_PATH" \
--workers 16
我的命令
python olmoearth_pretrain/dataset_creation/rslearn_to_olmoearth/worldcover/process_local_worldcover_detailed.py \
--data_path "/mnt/si000082vai5/default/Person/kongfanqiang/datatemp/worldcover" \
--windows_json "/mnt/si000082vai5/default/Person/kongfanqiang/datatemp/kfqceshi_data/hangzhou_kfqSelf_olmoearth_windows.json" \
--olmoearth_path "/mnt/si000082vai5/default/Person/kongfanqiang/datatemp/kfqceshi_data/output" \
--workers 16
11.3 关键技术点
| 步骤 | 说明 |
|---|---|
| 坐标转换 | TIF可能使用WGS84经纬度,窗口使用EPSG:32650,需自动转换 |
| 窗口匹配 | 只处理TIF覆盖范围内的窗口,跳过超出范围的窗口 |
| 裁剪尺寸 | 输出固定256×256像素的GeoTIFF文件 |
| 并行处理 | 使用多进程提高大文件处理效率 |
11.4 脚本位置
olmoearth_pretrain/dataset_creation/rslearn_to_olmoearth/worldcover/
└── process_local_worldcover_detailed.py # 本地TIF处理脚本
要使用这个脚本,其他脚本都有问题
12. 注意事项
-
并行处理: 使用
forkserver启动方法避免多进程问题 -
数据完整性: 跳过未完成的窗口(
is_layer_completed检查) -
时间跨度: WorldCover为静态数据,使用
TimeSpan.STATIC - 分辨率一致性: 确保输入输出分辨率匹配(10m)
- 与OSM差异: WorldCover无需栅格化步骤,直接转换栅格数据
-
元数据汇总: 需要运行
make_meta_summary.py完成最终元数据合并 -
本地TIF处理: 使用
process_local_worldcover.py处理本地大尺寸TIF文件