Changes
Page history
Update Remove OSSIM
authored
Aug 11, 2020
by
Julien Osman
Show whitespace changes
Inline
Side-by-side
Remove-OSSIM.md
View page @
4d32f9d4
...
...
@@ -42,6 +42,79 @@ Benefits:
## Presentation of the new architecture
### The new ImageMetadata object
To replace OSSIM's MetadataDictionary, a new
*ImageMetadata*
object is
introduced. It inherits from
*ImageMetadataBase*
.
```
mermaid
classDiagram
class ImageMetadataBase
ImageMetadataBase : - NumericKeys
ImageMetadataBase : - StringKeys
ImageMetadataBase : - LUT1DKeys
ImageMetadataBase : - LUT2DKeys
ImageMetadataBase : - TimeKeys
ImageMetadataBase : - GeometryKeys
ImageMetadataBase : - ExtraKeys
ImageMetadataBase : - [] operator(key)
ImageMetadataBase : - Add(key, value)
ImageMetadataBase : - Remove(key)
ImageMetadataBase : - Has(key)
ImageMetadataBase : - ToKeywordList(kwl)
ImageMetadataBase : - FromKeywordList(kwl)
ImageMetadataBase : - Fuse(imd)
class ImageMetadata
ImageMetadata : - Bands
ImageMetadata : - slice(start, end)
ImageMetadata : - append(imd)
ImageMetadata : - compact()
ImageMetadata : - Merge(imd)
ImageMetadata : - AppendToKeywordLists(kwlv)
ImageMetadata : - AppendToBandKeywordLists(kwlv)
ImageMetadata : - FromKeywordLists(kwlv)
ImageMetadataBase <|-- ImageMetadata
ImageMetadata "1" *-- "0..*" ImageMetadataBase
```
*ImageMetadataBase*
encapsulates seven std::map to store seven
different kind of metadata:
-
Numeric metadata for the metadata that can be stored as a double
-
String metadata for the metadata that can be stored as a std::string
-
LUT 1D metadata the metadata that can be stored as a one
dimension table
-
LUT 2D metadata for the metadata that can be stored as two
dimensions table
-
Time metadata for the metadata that can be stored as a
*time*
object
-
Geometry metadata for the metadata that represent a model
-
Extra metadata for non generic metadata stored as std::string
The keys of the maps are described in the file otbMetaDataKey. This
file also defines the
*time*
object.
The
*ImageMetadataBase*
class also provides 4 methods:
-
the
*[] operator*
for a read-only access the metadata from the key
-
the
*Add*
method to set a metadata value
-
the
*Remove*
method to delete a metadata value
-
the
*Has*
method to test if a key has a value
The
*ImageMetadata*
class is used to store the metadata. It contains a
std::vector
*Bands*
that contains one
*ImageMetadataBase*
for each
band of the product. The metadata that are common to all the bands are
stored in the
*ImageMetadata*
object itself. It also provides some
useful methods:
-
the
*slice*
method to access the metadata of a range of bands
-
the
*append*
method to concatenate two
*ImageMetadata*
objects
-
the
*compact*
method to put to the top level the metadata that are
common to all the bands
-
the
*Merge*
method to merge with another
*ImageMetadata*
### Metadata parsing
Here is a new workflow to replace the current function
...
...
@@ -54,7 +127,7 @@ Here is a new workflow to replace the current function
a (in-memory) XML tree. This tree is given to a
ImageMetadataInterface (IMI) that will look for needed
information. The parsing is be done by different classes,
d
depending on the file format. They can all derive from the base
depending on the file format. They can all derive from the base
class MetadataSupplierInterface. The three suppliers are:
*
GDALImageIO will use GDALDataset::GetMetadata() to extract
'key=value' pairs and format them into a XML tree.
...
...
@@ -62,7 +135,7 @@ Here is a new workflow to replace the current function
("ReadXMLToList" method from the "GDALMDReaderBase" class) to
convert the XML file into a GDAL ListString, which is a
succession of 'key=value' pairs.
*
TextMetadataSupplier tr
y
s to parse 'key=value' pairs.
*
TextMetadataSupplier tr
ie
s to parse 'key=value' pairs.
Those classes all implement the method
*GetMetadataValue*
which
returns the value of the metadata from a given key. The base class
...
...
@@ -72,9 +145,9 @@ Here is a new workflow to replace the current function
1.
The GDAL input/output capabilities are encapsulated in the
GDALImageIO class, which derivates from ImageIO. This class is in
charge of fetching the metadata from the product (supplier
capabilities
h
inerited from the class MetadataSupplierInterface),
and of writ
t
ing the metadata to the product (storage capabilities
h
inerited from the class MetadataStorageInterface).
capabilities in
h
erited from the class MetadataSupplierInterface),
and of writing the metadata to the product (storage capabilities
in
h
erited from the class MetadataStorageInterface).
1.
We use a classic IMIFactory to find if a given IMI (associated to a
given sensor) can parse the metadata of a product. The IMI's
...
...
...
...