标记数据集和带区¶
加达尔 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'другая строка'}
与图像数据一样,在关闭数据集之前,标签不会写入磁盘上的文件。