Description
The base type of all coverage (including raster) data is Coverage, which is defined by ISO 19123. A Coverage is not necessarily a grid (raster). It is rather a collection of "geometry - record" pairs where the geometries are pixels in the particular case of rasters. ISO 19123 defines many Coverage subtypes: DiscreteCoverage, ContinuousCoverage, etc.. The types which seem closest to a raster are ContinuousQuadrilateralGridCoverage and DiscreteGridPointCoverage. However even those types are more complex than the majority of the needs to be handled by Apache SIS. For now SIS defines only one class, GridCoverage, which is simpler (at the cost of being less powerful) than ISO 19123 classes. We tried to define GridCoverage in a way that should not conflict with future ISO 19123 compliant development.
A key simplification done in SIS GridCoverage compared to ISO 19123 Coverage is that, in addition of assuming that values are distributed on a grid, it also assumes that all values are stored as numbers. Those numbers may be associated to categories (e.g. 1 = clouds), but they still numbers. By contrast ISO 19123 allows the storage of more complex structures: Record where each record may contain other records. An ISO 19123 Record may be seen as a simple Feature, i.e. a feature where the multiplicity of all attributes is constrained to [1…1].
In the same way than ISO 19123 allows various coverage types (not necessarily gridded) and defines subclasses for the particular case of coverage using a grid, we may want a more general class in Apache SIS for any coverage storing data as numbers (as a simplification of the more general Record type). The methods could be:
public abstract class NumericCoverage { public abstract CoordinateReferenceSystem getCoordinateReferenceSystem(); public abstract List<SampleDimension> getSampleDimensions(); }
GridCoverage would extend that class and add a getGridGeometry() method. The main difference between this proposed NumericCoverage compared to ISO 19123 Coverage is the getSampleDimensions() method, which can be seen as a specialization of the following method:
public interface Coverage { RecordType getRangeType(); }
The class name is difficult to chose. Current proposal is NumericCoverage. We found usage of that term on a web page about Atmospheric Dispersion Index: "The coverage descriptions, which indicate few, scattered, broken, or overcast, are translated into numeric coverage classes." — while I'm not sure it describes the same thing. We searched also NumericalCoverage but found less relevant usages.
This NumericCoverage class would be a complement of ISO 19123 classes. It should not prevent us to implement more fully ISO 19123 in the future. The "Numeric" part in NumericCoverage describes a characteristic of the range (ISO 19123 coverages have two parts: domain and range), in the same way than the "Discrete" and "Continuous" parts in ISO 19123 DiscreteCoverage and ContinuousCoverage also refer to the range.