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或格式选项。