一、GeoTIFF 是什么?
GeoTIFF 是一种在普通 TIFF 图像文件基础上扩展的栅格格式,嵌入了空间参考信息(例如坐标系统、仿射变换、像素大小等),常用于:
遥感影像(MODIS、Landsat)
气象/气候产品(温度、降水)
模型输出(NDVI、GPP、趋势图)
分类图(土地覆盖、行政区划)
二、创建 GeoTIFF 时需要定义哪些属性?
三、如何设置合理的空间属性?(以全球 GPP 为例)
想创建一张全球的 GPP 栅格图,分辨率为 0.05°。
空间维度计算:
经度范围:-180 ~ 180(共 360°)
纬度范围:-90 ~ 90(共 180°)
分辨率:0.05°
width = int(360 / 0.05) = 7200
height = int(180 / 0.05) = 3600
仿射变换设置(以左上角为原点)
from rasterio.transform import from_origin
transform = from_origin(
west=-180, # 左上角经度
north=90, # 左上角纬度
xsize=0.05, # 经度方向像素宽度
ysize=0.05 # 纬度方向像素高度(正值)
)
坐标系统设置(CRS)
推荐使用地理坐标系统 WGS84:
crs = "EPSG:4326"
四、完整的 GeoTIFF 写入示例代码(单波段)
import numpy as np
import rasterio
from rasterio.transform import from_origin
# 模拟一张 GPP 数据图层(单位:gC/m²/year)
data = np.random.rand(3600, 7200).astype("float32") * 1000
data[data < 0.1] = np.nan # 模拟无效值
transform = from_origin(-180, 90, 0.05, 0.05)
with rasterio.open(
"GPP_global_0.05deg.tif",
"w",
driver="GTiff",
height=data.shape[0],
width=data.shape[1],
count=1,
dtype="float32",
crs="EPSG:4326",
transform=transform,
nodata=-9999,
compress="lzw"
) as dst:
dst.write(np.where(np.isnan(data), -9999, data), 1)
五、其他建议设置
💡 数据压缩
设置 compress="lzw" 可节省约 40% 空间,对浮点栅格尤其有效。
💡 多波段支持
如果你要同时保存多个时间点或多个变量,可以设置 count > 1,然后循环写入每个波段。
dst.write(band1, 1)
dst.write(band2, 2)