影像配准¶
栅格数据集的地理参考有两个部分:栅格像素所在的本地、区域或全局系统的定义;以及像素坐标转换为该系统中坐标的参数。
坐标参考系¶
数据集的坐标参考系从其 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所述。