影像配准

栅格数据集的地理参考有两个部分:栅格像素所在的本地、区域或全局系统的定义;以及像素坐标转换为该系统中坐标的参数。

坐标参考系

数据集的坐标参考系从其 crs 属性。

>>> import rasterio
>>> src = rasterio.open('tests/data/RGB.byte.tif')
>>> src.crs
CRS({'init': 'epsg:32618'})

Rasterio遵循pyproj,并使用dict格式的proj.4语法作为其本机CRS语法。如果您需要CRS的WKT表示,请参见CRS类的 wkt 属性。

>>> src.crs.wkt
'PROJCS["WGS 84 / UTM zone 18N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32618"]]'

打开新文件进行写入时,还可以使用CRS字符串作为参数。

>>> profile = {'driver': 'GTiff', 'height': 100, 'width': 100, 'count': 1, 'dtype': rasterio.uint8}
>>> with rasterio.open('/tmp/foo.tif', 'w', crs='EPSG:3857', **profile) as dst:
...     pass # write data to this Web Mercator projection dataset.

坐标变换

数据集的像素坐标系的原点在“左上角”(想象它显示在屏幕上)。列索引向右增加,行索引向下增加。在数据集的参考系统中,这些坐标到“世界”坐标的映射是用仿射变换矩阵完成的。

>>> src.transform
Affine(300.0379266750948, 0.0, 101985.0,
       0.0, -300.041782729805, 2826915.0)

这个 Affine 对象是具有元素的命名元组 a, b, c, d, e, f 对应于下面矩阵方程中的元素,其中像素的图像坐标为 x, y 它的世界坐标是 x', y' ::

| x' |   | a b c | | x |
| y' | = | d e f | | y |
| 1  |   | 0 0 1 | | 1 |

这个 Affine 类有一些有用的属性和方法,如https://github.com/sgilles/affine所述。