元数据¶
本章介绍OTB如何处理元数据。
OtbImageMetadata¶
OTB使用类 otbImageMetadata
和 otbImageMetadataBase
来存储元数据。

otbImageMetadataBase
封装了七个 std::map
要存储七种不同的元数据,请执行以下操作:
- 可以存储为双精度型的元数据的数字元数据
- 可存储为std::字符串的元数据的字符串元数据
- LUT 1D元数据可以存储为一维表的元数据
- 可存储为二维表的元数据的LUT二维元数据
- 可存储为时间对象的元数据的时间元数据
- 表示模型的元数据的几何元数据
- 存储为std::字符串的非泛型元数据的额外元数据
地图的密钥在文件中进行了描述 otbMetaDataKey.h
。该文件还定义了时间对象。
对于每个映射,该类提供了4个方法:
- 这个
[] operator
对于只读访问键中的元数据 - 这个
Add
方法来设置元数据值。 - 这个
Remove
用于删除元数据值的方法 - 这个
Has
方法来测试键是否有值
的一个实例 otbImageMetadata
用于存储元数据。它继承自 otbImageMetadataBase
因此,它封装了用于存储元数据的七个映射。它还包含一个向量 otbImageMetadataBase
存储特定于波段的元数据 (m_Bands
)。
元数据工作流¶
OTB通过下图描述的工作流在产品之间读写元数据:

GDAL输入/输出功能封装在
otbGDALImageIO
类,该类派生自otbImageIO
。此类负责从产品获取元数据(从类继承的供应商功能otbMetadataSupplierInterface
),并将它们作为关键字列表存储在存储器中。它还负责将元数据写入产品(从类继承的存储功能otbMetadataStorageInterface
)。然后调用ImageMetadataInterface(IMI)来解析元数据。每个传感器有一个IMI。我们使用经典的Factory来找出哪一个可以解析产品的元数据。IMI的parse方法将从ImageIO中提取元数据并填充ImageMetadata对象。
有些元数据不被GDAL读取。要解析这些元数据,IMI可以呼叫其他供应商,具体取决于文件格式:
- 为了解析XML文件,
otbXMLMetadataSupplier
使用GDAL的XML解析机制(“GDALMDReaderBase”类中的“ReadXMLToList”方法)将XML文件转换为GDAL ListString,它是一系列‘key=value’对。 - 为了解析文本文件,TextMetadataSupplier尝试解析‘key=value’对。
如果需要,可以添加其他供应商。这些课程(包括
otbGDALImageIO
)都实现了该方法GetMetadataValue
它从给定键返回元数据的值。基类还实现了方法GetAs
和GetAsVector
由IMI使用。- 为了解析XML文件,
IMI在不同的元数据供应商中查找相关的元数据,并使用
Add
方法来存储元数据。如果解析成功返回,则生成的ImageMetadata被提供给通过管道传播的ImageCommon。