迁移到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()affinetransform ,但传递给 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() 仍将接受 affinetransform 但是前者现在发出了一个反预测警告,后者如果没有收到 Affine() .

  • 如果 rasterio.open() 同时接收 affinetransform 发出警告并 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版中删除。它们已被完全可设置的数据集属性替换 crsnodatavalsdescriptionsunitsgcps .

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

创建选项

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