如何创建 GeoTIFF(.tif)文件及设置合理的空间属性

一、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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值