GDAL选项配置

gdal格式驱动程序和库的某些部分是可配置的。

从https://trac.osgeo.org/gdal/wiki/configooptions:

配置选项通常用于更改gdal和ogr驱动程序的默认行为,在某些情况下还用于更改gdal和ogr核心。它们本质上是用户可以设置的全局变量。

GDAL示例

以下是来自 GDAL's test suite .

gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
ds = gdal.Open('data/stefan_full_greyalpha.tif')
gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)

使用gdal的c或python api,您可以在需要之前调用一次函数来设置全局配置选项,并在完成重置之后再次调用该函数。

这种配置的缺点包括:

  • 选项的配置可以远离它们影响的代码。

  • 没有用于查找当前设置了哪些选项的API。

  • 如果 gdal.Open() 在上面的代码中引发异常, GTIFF_FORCE_RGBA 选项不会取消设置。

该代码示例可以归纳为多个选项,并使其能够更好地从错误中恢复。

options = {'GTIFF_FORCE_RGBA': 'YES'}
for key, val in options.items():
    gdal.SetConfigOption(key, val)
try:
    ds = gdal.Open('data/stefan_full_greyalpha.tif')
finally:
    for key, val in options.items():
        gdal.SetConfigOption(key, None)

这更好,但有很多样板文件。Rasterio使用了python语法元素、关键字参数和 with 语句,以使此更清晰、更易于使用。

栅格

with rasterio.Env(GTIFF_FORCE_RGBA=True, CPL_DEBUG=True):
    with rasterio.open('data/stefan_full_greyalpha.tif') as dataset:
       # Suite of code accessing dataset ``ds`` follows...

调用时返回的对象 rasterio.Env() 是上下文管理器。它处理特定代码块的gdal配置,并在该块因任何原因(成功或失败)退出时重置配置。栅格 with rasterio.Env() 模式将gdal配置组织成单个语句,并使其与代码块的关系清晰。

如果您想知道在任何时候配置了哪些选项,可以将其绑定到这样的名称。

with rasterio.Env(GTIFF_FORCE_RGBA=True, CPL_DEBUG=True) as env:
    for key, val in env.options.items():
        print(key, val)

# Prints:
# ('GTIFF_FORCE_RGBA', True)
# ('CPL_DEBUG', True)

何时使用rasterio.env()。

栅格代码通常不使用 Env 上下文块。例如,您可以使用 rasterio.open() 直接而不明确地创造 Env . 在这种情况下, open 函数将初始化执行代码的默认环境。通常,这个默认环境对于大多数用例来说都是足够的,您只需要创建一个显式的 Env 如果您正在自定义默认的gdal或格式选项。