迁移到Rasterio 1.0

affine.affine()与gdal样式的地理转换

在Rasterio 1.0的发展道路上,API最大的变化之一是对gdal风格的geotransforms的全面贬低,而支持 affine 类库。作为参考, affine.Affine() 看起来像:

affine.Affine(a, b, c,
              d, e, f)

一个gdal地质转换看起来像:

(c, a, b, f, d, e)

从根本上讲,这两个结构提供了相同的信息,但是 Affine() 对象更有用。

以下是此功能的历史记录:

  1. 最初,函数 transform 参数需要gdal geotransform。

  2. 介绍 affine 库涉及创建临时 affine 的参数 rasterio.open() 和A src.affine 属性。用户可以通过 Affine() 到 affine 或 transform ,但传递给 transform 将发出折旧警告。

  3. src.transform 仍然是gdal geotransform,但发出了警告。用户被指向 src.affine 在过渡阶段。

  4. 由于上述更改,已将多个函数添加到接受 transform 参数。而不是添加 affine 每个人的论点 transform 参数可以是 Affine() 对象或gdal geotransform,后者发出相同的拒绝警告。

最初的计划是移除 affine argument + property, and assume that the object passed to transform is an Affine(). However, after further discussion 后来决定 Affine() gdal geotransforms都是6个元素元组,用户可能会遇到无法解释的错误和输出,因此会引发异常以更好地突出显示错误。

1.0b1之前:

  • rasterio.open() 仍将接受 affine 和 transform 但是前者现在发出了一个反预测警告,后者如果没有收到 Affine() .

  • 如果 rasterio.open() 同时接收 affine 和 transform 发出警告并 transform 使用。

  • src.affine 仍然存在,但会发出一个折旧警告。

  • src.transform 返回一个 Affine() .

  • 所有其他栅格功能 transform 参数现在在接收到gdal geotransform时引发异常。

售票处

  • #86 -宣布从gdal geotransforms向 Affine() .

  • #763 -迁移的实施和一些进一步的讨论。

    从1.0b1开始:

  • 在 rasterio.open “affine”将不再是transform关键字参数的别名。

  • 数据集对象将不再具有仿射属性。

  • transform关键字参数和属性始终是 Affine 班级。

I/O操作

与读取带区数据和数据集掩码相关的方法在1.0中发生了更改。

从1.0b1版开始,不再有 read_mask 方法,仅 read_masks . 当数据集的格式允许时,可以在读写“w+”模式下打开数据集;当从“w”模式下打开的数据集读取带区数据或掩码时,将发出警告。

从1.0.0开始,“w”模式将变为只写模式,禁止从“w”中打开的数据集读取数据或屏蔽。

已弃用: rasterio.drivers()

以前,用户可以注册gdal的驱动程序,并打开数据源:

import rasterio

with rasterio.drivers():

    with rasterio.open('tests/data/RGB.byte.tif') as src:
        pass

但是Rasterio1.0包含了更多与gdal环境的交互,所以 rasterio.drivers() 已替换为:

import rasterio
import rasterio.env

with rasterio.Env():

    with rasterio.open('tests/data/RGB.byte.tif') as src:
        pass

售票处

  • #665 -折旧 rasterio.drivers() 以及介绍 rasterio.Env() .

远离的: src.read_band()

这个 read_band() 方法已被替换为 read() ,允许更快的I/O,并将多个频段读取为一个频段 numpy.ndarray() .

例如:

import numpy as np
import rasterio

with rasterio.open('tests/data/RGB.byte.tif') as src:
    data = np.array(map(src.read_band, (1, 2, 3)))
    band1 = src.read_band(1)

现在是:

import rasterio

with rasterio.open('tests/data/RGB.byte.tif') as src:
    data = src.read((1, 2, 3))
    band1 = src.read(1)

售票处

  • # 83 -介绍 src.read() .

  • #96 , #284 -折旧 src.read_band() .

远离的: src.read_mask()

这个 src.read_mask() 方法为整个数据源生成了一个单独的掩码,但无法处理为每个频带生成一个单独的掩码,因此已弃用该方法,取而代之的是 src.read_masks() 尽管没有直接的替代品。

售票处

  • #284 -折旧 src.read_mask() .

已移动:用于处理数据集窗口的函数

顶层的几个功能 rasterio 用于处理数据集窗口的命名空间已移动到 rasterio.windows.* :

  • rasterio.get_data_window()

  • rasterio.window_union()

  • rasterio.window_intersection()

  • rasterio.windows_intersect()

售票处

  • #609 -介绍 rasterio.windows .

感动: rasterio.tool

此模块已完全删除,其内容已移动到几个不同的位置:

rasterio.tool.show()      -> rasterio.plot.show()
rasterio.tool.show_hist() -> rasterio.plot.show_hist()
rasterio.tool.stats()     -> rasterio.rio.insp.stats()
rasterio.tool.main()      -> rasterio.rio.insp.main()

售票处

  • #609 -折旧 rasterio.tool .

感动: rasterio.tools

此模块已完全删除,其内容已移动到几个不同的位置:

rasterio.tools.mask.mask()   -> rasterio.mask.mask()
rasterio.tools.merge.merge() -> rasterio.merge.merge()

售票处

  • #609 -折旧 rasterio.tools .

远离的: rasterio.warp.RESAMPLING

此枚举已被替换为 rasterio.warp.Resampling .

已删除:数据集的 ul() 方法

此方法已被替换为 xy() 方法。

签名更改

对于两者 rasterio.features.sieve() 和 rasterio.features.rasterize() 这个 output 参数已替换为 out . 以前的使用 output 发出了折旧警告。

数据集属性集的取消预测_ * and get_* 方法

方法get_crs、set_crs、set_nodatavals、set_descriptions、set_units和set_gcps已弃用,将在1.0版中删除。它们已被完全可设置的数据集属性替换 crs , nodatavals , descriptions , units 和 gcps .

在单位和描述的情况下,设置“波段”单位和“设置波段”描述方法仍然支持rio edit info命令。

创建选项

Rasterio不再将数据集创建选项保存到已创建数据集的元数据中,并将忽略从1.0版开始的此类元数据。用户可以通过在其环境中设置rio_ignore_creation_kwds=true来选择此选项。