1. 理解Rasterio中的仿射变换
在GIS和遥感数据处理中,仿射变换是将像素坐标(行、列)映射到地理坐标(x、y)的关键数学工具。Rasterio作为Python中强大的栅格数据处理库,其transform模块提供了完整的仿射变换实现。
注意:仿射变换不仅用于地理数据,任何需要将图像坐标映射到其他坐标系的场景都可以使用类似原理。
1.1 仿射变换的数学原理
仿射变换的矩阵表示为:
code复制[ x ] = [a, b, c] [ col ]
[ y ] [d, e, f] * [ row ]
[ 1 ]
这6个参数的实际含义是:
- a:x方向上的像素大小(东西方向分辨率)
- b:x轴旋转参数(通常为0)
- c:左上角像素中心的x坐标
- d:y轴旋转参数(通常为0)
- e:y方向上的像素大小(南北方向分辨率,通常为负值)
- f:左上角像素中心的y坐标
在实际应用中,我们通常遇到的是"北向上"的栅格数据,此时b和d为0,e为负值。例如,一个分辨率为30米的标准UTM栅格可能具有如下变换:
python复制from affine import Affine
transform = Affine(30.0, 0.0, 500000.0,
0.0, -30.0, 4500000.0)
1.2 为什么需要仿射变换?
仿射变换解决了三个核心问题:
- 位置定位:知道图像中每个像素对应的实际地理位置
- 数据对齐:将不同来源、不同分辨率的栅格数据对齐到同一坐标系
- 空间分析:进行距离测量、面积计算等空间运算
在实际项目中,我曾遇到过一个典型场景:需要将无人机拍摄的高分辨率影像与卫星影像对齐。通过正确理解和应用仿射变换,我们成功实现了亚米级的对齐精度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Rasterio中的Transform操作
2.1 基本转换操作
获取和查看变换
python复制import rasterio
with rasterio.open('data.tif') as src:
print(src.transform)
# 输出示例:| 30.00, 0.00, 500000.00|
# | 0.00,-30.00, 4500000.00|
# | 0.00, 0.00, 1.00|
坐标转换
python复制# 像素坐标 → 地理坐标
col, row = 100, 200
x, y = transform * (col, row)
# 地理坐标 → 像素坐标
x, y = 500100.0, 4499800.0
col, row = ~transform * (x, y) # 使用逆变换
技巧:在进行大量坐标转换时,先计算逆变换(~transform)再重复使用,可以提高性能。
2.2 创建变换的多种方式
方法1:直接指定参数
python复制from affine import Affine
transform = Affine(30.0, 0.
