标记数据集和带区

加达尔 data model 包括主要类的键和值对的集合。在该模型中,这些是“元数据”,但由于它们不必仅用于元数据,因此这些键、值对在栅格中被称为“标记”。

阅读标签

在下面的示例中,我将使用栅格交互检查器。

$ rasterio.insp tests/data/RGB.byte.tif
Rasterio 0.6 Interactive Inspector (Python 2.7.5)
Type "src.name", "src.read(1)", or "help(src)" for more information.
>>>

标记属于命名空间。要从默认命名空间获取数据集标记的副本,请调用 tags() 没有参数。

>>> import rasterio
>>> src = rasterio.open("tests/data/RGB.byte.tif")
>>> src.tags()
{'AREA_OR_POINT': 'Area'}

数据集的带区也可能有标记。以下是第一个带区的默认命名空间中的标记,使用的位置带区索引参数访问 tags() .

>>> src.tags(1)['STATISTICS_MEAN']
'29.947726688477'

这些是我用来测试栅格的样本数据附带的标签。实际上,在标签中维护统计信息是不可靠的,因为当波段的图像数据发生变化时,标签不会自动更新。

3个标准的、非默认的gdal标记命名空间是“subdatasets”、“image_structure”和“rpc”。您可以使用 ns 关键字 tags() .

>>> src.tags(ns='IMAGE_STRUCTURE')
{'INTERLEAVE': 'PIXEL'}
>>> src.tags(ns='SUBDATASETS')
{}
>>> src.tags(ns='RPC')
{}

正在写入标记

可以在默认名称空间或其他名称空间中,使用 update_tags() 方法。Unicode标记值,至少对于TIFF文件也是如此。

import rasterio

with rasterio.open(
        '/tmp/test.tif',
        'w',
        driver='GTiff',
        count=1,
        dtype=rasterio.uint8,
        width=10,
        height=10) as dst:

    dst.update_tags(a='1', b='2')
    dst.update_tags(1, c=3)
    with pytest.raises(ValueError):
        dst.update_tags(4, d=4)

    # True
    assert dst.tags() == {'a': '1', 'b': '2'}
    # True
    assert dst.tags(1) == {'c': '3' }

    dst.update_tags(ns='rasterio_testing', rus=u'другая строка')
    # True
    assert dst.tags(ns='rasterio_testing') == {'rus': u'другая строка'}

与图像数据一样,在关闭数据集之前,标签不会写入磁盘上的文件。