目录

上一个主题

10.5. 使用 RasterIO 作图

下一个主题

10.7. 读取和写入栅格文件的“窗口”

关注公众号


常见问题

  1. Windows下的安装说明
  2. Jupyter免费在线实验环境
  3. 勘误与补充


10.6. RasterIO的其他技术细节

10.6.1. 读取栅格带的颜色解释

可以从数据集中读取栅格带的颜色解释。

>>> import rasterio
>>> src = rasterio.open("RGB.byte.tiff")
>>> src.colorinterp[0]
<ColorInterp.gray: 1>

影像配准

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

坐标参考系

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

>>> import rasterio
>>> src = rasterio.open('RGB.byte.tiff')
>>> src.crs
CRS.from_dict(init='epsg:32651')

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

>>> src.crs.wkt
'PROJCS["WGS 84 / UTM zone 51N",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",123],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","32651"]]'

打开新文件进行写入时,还可以使用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.
/usr/lib/python3/dist-packages/rasterio/__init__.py:225: NotGeoreferencedWarning: Dataset has no geotransform set. The identity matrix may be returned.
  **kwargs)

坐标参考系坐标变换

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

>>> src.transform
Affine(30.0, 0.0, 394185.0,
       0.0, -30.0, 3469215.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 |

概览

概述是数据集的低分辨率版本,可以在不需要完全分辨率时加快渲染速度。通过预计算上采样的像素,缩小后的渲染速度会明显加快。

根据文件格式,可以在内部或外部存储概述。

在某些情况下,我们可能希望复制测试数据以避免更改原始数据。

>>> import shutil
>>> path = shutil.copy('RGB.byte.tiff', 'RGB.byte--2.tiff')

我们必须指定要为其构建概述的缩放因子。通常这些是2的指数

>>> factors = [2, 4, 8, 16]

为了控制视图的视觉质量,可以使用“最近”、“立方”、“平均”、“模式”和“高斯”重采样算法。这些可以通过 Resampling 枚举

>>> from rasterio.enums import Resampling

创建概述需要在中打开数据集 r+ 模式,这使我们能够在适当的位置更新数据。按照惯例,我们也在 rio_overview 命名空间,以便读者可以确定使用了什么重新采样方法。

>>> import rasterio
>>> dst = rasterio.open(path, 'r+')
>>> dst.build_overviews(factors, Resampling.average)
>>> dst.update_tags(ns='rio_overview', resampling='average')
>>> dst.close()

我们可以读取更新后的数据集并确认存在概述

>>> src = rasterio.open(path, 'r')
>>> [src.overviews(i) for i in src.indexes]
[[2, 4, 8, 16]]
>>> src.tags(ns='rio_overview').get('resampling')
'average'
>>> src.read().shape
(1, 7801, 7651)
>>> src.read(out_shape=(3, int(src.height / 4), int(src.width / 4))).shape
(3, 1950, 1912)