[Java-collab] ISO19115/ISO19111 VerticalExtent/VerticalCRS and Multidimensional Coverage

Martin Desruisseaux martin.desruisseaux at geomatys.fr
Fri May 30 07:03:59 EDT 2008


Hello all

Daniele Romagnoli a écrit :
> (...snip...)
> VerticalCRS (as defined in 19111) which can't be used to handle 
> ellipsoidal height since this height only lives within a 3D GeographicCRS.
> Under these conditions, how should I handle the 3rd component of a 
> GeographicCRS to follow the 19115/19111?

As far a 19111 is concerned, 3D and 4D CRS should be handle as CompoundCRS. Or 
to be more specific, you need to build an array on SingleCRS of length 2 or 3:

General case *except* GeographicCRS with ellipsoidal height:
------------------------------------------------------------
SingleCRS[] components = new SingleCRS[] {
     horizontalCRS, // Typically a 2D GeographicCRS or a ProjectedCRS
     verticalCRS,
     temporalCRS
};


Special case for a GeographicCRS with ellipsoidal height:
------------------------------------------------------------
SingleCRS[] components = new SingleCRS[] {
     geographicCRS,  // Shall be 3D.
     temporalCRS
};


Then, give this array to the CompoundCRS constructor.



> (...snip...)
> Now I'm not sure about the meaning of that SC_CRS. It is referring to a 
> general CRS containing a "height related" component (Such as a 3D 
> GeographicCRS or a CompoundCRS)?. Or the SC_CRS has been used to 
> indicate the base class of a VerticalCRS to point out that the Datum 
> class is no more needed)?

The SC_CRS object mentioned in ISO 19111/19115 is called 
CoordinateReferenceSystem in GeoAPI. This mapping between the GeoAPI name and 
the original ISO 19111 name is documented in the following annotation:

@UML(identifier="SC_CRS", specification=ISO_19111)

which appears just before the class declaration:

http://geoapi.sourceforge.net/snapshot/javadoc/org/opengis/referencing/crs/CoordinateReferenceSystem.html

Actually the naming and class hierarchy in ISO specifications are a little bit 
convolved regarding that "CRS" class for historical reasons (compatibility and 
interoperability between ISO 19111 and ISO 19115 because the later defined 
objects that duplicate ISO 19111).

VerticalCRS extends CoordinateReferenceSystem and thus inherit a datum field. 
You can invoke VerticalCRS.getDatum() in order to get the VerticalDatum.

http://geoapi.sourceforge.net/snapshot/javadoc/org/opengis/referencing/crs/VerticalCRS.html#getDatum()

> Maybe the ISO 19115 VerticalExtent could be related to a more general 
> CoordinateReferenceSystem within it lives instead of a VerticalCRS.

ISO 19111 defines a "domain of validity" for every CoordinateReferenceSystem. So 
it is possible to invoke VerticalCRS.getDomainOfValidity() in order to get an 
Extent. Whatever this extent is relevant or not is left to implementations...

http://geoapi.sourceforge.net/snapshot/javadoc/org/opengis/referencing/ReferenceSystem.html#getDomainOfValidity()


	Martin


More information about the Java-collab mailing list