【WRF教程第3.5期】预处理系统 WPS 详解:以4.5版本为例

发布于:2024-12-22 ⋅ 阅读:(11) ⋅ 点赞:(0)

将静态数据写入 Geogrid 二进制格式

WRF 的 WPS 模块(尤其是 geogrid)用于插值静态地理数据,存储这些数据的格式是 简单的二进制栅格格式。

1. Geogrid 数据格式概述

Geogrid 支持三种主要类型的地理数据集:

1、单层或多层连续字段:如地形高度。
2、以主导类别表示的分类字段:如 USGS 土地利用数据集中每个网格点的主要土地类型。
3、以每个类别的分数表示的分类字段:如每个网格点的各土地类型分布比例。

以下是 Geogrid 格式的核心特征:

  • 数据存储为规则的 2D 或 3D 数组。
  • 数据以行优先(从南到北)顺序写入到文件中。
  • 文件中没有头部、记录标记或额外字节,所有数据按 big-endian 字节序 存储(可通过设置 index 文件中的 endian=little 使用 little-endian 字节序)。

在这里插入图片描述

2. 分类字段(Categorical Fields)格式

以主导类别为例,分类字段的存储格式如下:

  • 数据表示:将网格点的主导类别存储为整数(1, 2, 3…)。
  • 写入顺序:按行优先顺序写入文件,即从南到北、从西到东,逐行存储到文件中。
  • 文件大小:每个元素使用 1、2、3 或 4 字节整数存储,所有元素必须使用相同的字节数。

示例
对于一个网格大小为 1000 × 1000 的分类字段,若每个值用 2 字节存储,文件大小为:

1000 × 1000 × 2 = 2,000,000 字节

注意事项
Fortran 限制:Fortran 语言的非格式化写入会添加额外字节,因此不能直接生成 Geogrid 二进制文件。可以使用 Geogrid 提供的 C 函数 write_geogrid.c 来写入数据。
命名规则:文件名必须包括网格的起始和结束索引(五位整数),例如:

00001-01200.00001-00800

表示一个 1200 × 800 网格矩阵。

3. 连续字段(Continuous Fields)格式

特点
连续字段(如地形高度)不同于分类字段,因为它们可能包含:

  • 非整数值(如浮点数)。
  • 负值。

处理步骤
1、缩放:将所有值按比例因子缩放为整数,以保留所需精度。例如:

  • 若需要保留小数点后三位精度,-2.71828 被缩放为 -2718。
  • 缩放因子为 1 / 所需精度,如 1 / 0.001 = 1000。

2、处理负值:将所有负值转换为正值:
在 WPS 静态数据中,连续字段(continuous fields) 可能包含负值,而 Geogrid 二进制格式要求字段值必须为正整数。因此,在写入文件前,负值需要通过以下方法调整为正值。

调整规则:每个负值通过增加一个常量变为正值:

  • 1 字节存储:加上 2^8。
  • 2 字节存储:加上 2^16。
  • 3 字节存储:加上 2^24。
  • 4 字节存储:加上 2^32。

3、写入文件:按分类字段的方式逐行写入。

多层连续字段
多层连续字段(如 3D 数据集)处理方式类似:每个层单独处理为 2D 数组,按层索引从低到高依次写入文件。

分类字段的分数表示
如果分类字段以分数形式表示(每个类别的分布比例),可视为多层连续字段,每一层对应一个类别的分数。

4. 文件组织与命名规则

单文件存储
文件名格式:xstart-xend.ystart-yend

  • xstart 和 xend:x 方向的起始和结束索引。
  • ystart 和 yend:y 方向的起始和结束索引。
  • 索引必须从 1 开始,并用五位整数表示。

示例:

00001-01200.00001-01200

表示一个 1200 × 1200 的网格。

多文件存储

  • 如果数据集分为多个文件,每个文件必须是规则的矩形网格。
  • 文件之间的网格范围不能重叠,且每个文件的网格维度必须相同。
  • 若数据不能被整除分块,必须填充缺失值(missing_value)。

大数据集
如果网格点超过 99999(x 或 y 方向),需将数据分为多个数据集(如东、西半球分别存储)。

5. 元数据文件(index 文件)

每个数据集必须有一个名为 index 的元数据文件,描述数据的属性和组织方式。

示例 index 文件:

type = continuous
signed = yes
projection = regular_ll
dx = 0.00833333
dy = 0.00833333
known_x = 1.0
known_y = 1.0
known_lat = -89.99583
known_lon = -179.99583
wordsize = 2
tile_x = 1200
tile_y = 1200
tile_z = 1
tile_bdr=3
units="meters MSL"
description="Topography height"

关键字段说明
type:

  • categorical:分类字段。
  • continuous:连续字段。

signed:

  • yes:数据包含负值。
  • no:数据仅包含正值。

projection:数据的投影类型(如 regular_ll 表示经纬度网格)。

dx/dy:x 和 y 方向的网格间距。
known_x/known_y/known_lat/known_lon:数据集中已知点的网格索引和经纬度。

wordsize:每个网格点存储所需字节数(1, 2, 3 或 4)。

tile_x/tile_y/tile_z:网格的 x, y, z 方向维度。

tile_bdr:网格边界的缓冲区大小。

units:数据的单位(如 meters MSL 表示海平面高度)。

description:数据的描述信息。

NLCD Urban Fraction Field

注意:美国大陆有基于 30 米 NLCD 2011 土地覆盖准备的城市分数字段;此数据集可从 WPS 地理静态数据下载页面的“可选字段”部分获取。

本部分内容详细描述如何使用NLCD(National Land Cover Database) 数据生成 WRF 使用的 城市化比例场(FRC_URB2D),在生成自己所需的城市分数字段时十分有用。

WRF 使用静态地理数据来模拟地表物理过程,其中城市化比例场(FRC_URB2D)可以通过高分辨率的 NLCD 数据生成。以下是具体步骤:

1.1 下载 NLCD 数据

1、前往 Multi-Resolution Land Characteristics Consortium (MRLC) 网站,选择合适的 NLCD 数据集(1992、2001、2006 或 2011)。
2、选择覆盖 WRF 模拟域的区域。
3、确保选择 GeoTIFF 格式,方便后续处理。
4、如果直接下载的是 BIL 格式,可以跳过格式转换步骤。

1.2 转换 GeoTIFF 为二进制栅格格式

1、解压下载的文件包,会包含一个 .tif 文件和 .tfw 文件。

2、使用 GDAL 工具(Geospatial Data Abstraction Library) 将 .tif 文件转换为 ENVI 格式的二进制文件:

gdal_translate -of ENVI foo.tif data.bil
  • foo.tif 是下载的 GeoTIFF 文件。
  • data.bil 是生成的二进制文件,符合 geogrid 的栅格格式要求。

3、重命名文件:
根据生成的文件行数和列数,将 data.bil 重命名为:

00001-ncols.00001-nrows
  • ncols 是图像的列数(5 位整数,如 01200)。
  • nrows 是图像的行数(5 位整数,如 00800)。
  • 行列数可以在运行 gdal_translate 时打印的输出中找到。

1.3 提取城市类别并生成城市化比例场

使用一个转换程序,从二进制文件中提取城市类别(NLCD 中的城市类别通常对应特定值,如 21、22、23、24),并基于城市类别生成城市化比例场。

转换后的文件需要覆盖原始土地利用文件,命名规则同上(如 00001-ncols.00001-nrows)。

1.4 创建元数据文件(index 文件)

index 文件描述了栅格数据的基本信息,供 geogrid.exe 使用。以下是一个示例:

type=continuous
projection=albers_nad83
dx=30.0
dy=30.0
known_x=1.0
known_y=2351.0            # <- 根据数据调整
known_lat =   40.096571   # <- 根据 .tfw 文件调整
known_lon = -105.405615   # <- 根据 .tfw 文件调整
truelat1=29.5
truelat2=45.5
stdlon=-96.0
wordsize=1
scale_factor=0.01
row_order=top_bottom
tile_x=2407               # <- 根据数据调整
tile_y=2351               # <- 根据数据调整
tile_z=1
units="unitless"
description="urban fraction"

关键字段说明:

  • type:数据类型,城市化比例场为连续字段(continuous)。
  • projection:投影方式,NLCD 使用 Albers Equal Area NAD83。
  • dx/dy:网格分辨率(单位:米),NLCD 数据为 30 m。
  • known_x, known_y:网格中已知点的索引。
  • known_lat, known_lon:已知点的纬度和经度(从 .tfw 文件中获取)。
  • wordsize:每个像素的存储字节数,这里为 1 字节。
  • scale_factor:缩放因子,城市化比例场通常在 0-1 范围内,因此乘以 100 转换为整数存储。
  • tile_x, tile_y:网格大小(行列数)。
  • units:数据单位。

1.5 修改 GEOGRID.TBL 配置

在 WPS/geogrid 目录中,修改 GEOGRID.TBL 文件,添加以下条目:

===============================
name=FRC_URB2D
priority=1
dest_type=continuous
fill_missing = 0.
interp_option=default: average_gcell(1.0)+four_pt
abs_path=default:/path/to/dataset/
===============================
  • 替换 /path/to/dataset/ 为步骤 3 和 4 中生成文件所在的路径。
  • fill_missing = 0. 指定缺失值填充的默认值为 0。

1.6 运行 geogrid

配置完成后,运行 geogrid.exe,生成包含 FRC_URB2D 的网格静态文件。

INDEX 选择

与 GEOGRID.TBL 相关的是与每个静态数据集相关的索引文件。索引文件定义特定于该数据集的参数,而 GEOGRID.TBL 文件描述地理网格应如何处理每个数据集。与 GEOGRID.TBL 一样,索引文件中的规范采用关键字=值的形式。以下是可能的关键字及其可能的值。
在这里插入图片描述

参考