A {@code DerivedCRS} instance may also implement one of the interfaces listed below,
- * provided that the conditions in the right column are meet:
+ * A Engineering CRSs used on moving platforms are usually intermediate coordinate reference
- * systems that are computationally required to calculate coordinates referenced to
- * {@linkplain GeocentricCRS geocentric}, {@linkplain GeographicCRS geographic} or
- * {@linkplain ProjectedCRS projected} CRSs. These engineering coordinate reference
- * systems are subject to all the motions of the platform with which they are associated.
- * In this case "contextually local" means that the associated coordinates are meaningful
- * only relative to the moving platform. Earth curvature is usually irrelevant and is therefore
- * ignored. In the spatial sense their applicability may extend from the immediate vicinity of
- * the platform (e.g. a moving seismic ship) to the entire earth (e.g. in space applications).
- * The determining factor is the mathematical model deployed in the positioning calculations.
- * Transformation of coordinates from these moving Engineering CRSs to earth-referenced coordinate
- * reference systems involves time-dependent coordinate operation parameters.
+ * This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.AffineCS},
@@ -63,7 +55,8 @@
* {@link org.opengis.referencing.cs.SphericalCS},
* {@link org.opengis.referencing.cs.UserDefinedCS}.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/GeneralDerivedCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/GeneralDerivedCRS.java
index ecc743b1b..fa7f61a00 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/GeneralDerivedCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/GeneralDerivedCRS.java
@@ -17,7 +17,6 @@
*/
package org.opengis.referencing.crs;
-import org.opengis.referencing.datum.Datum;
import org.opengis.referencing.operation.Conversion;
import org.opengis.annotation.UML;
import org.opengis.annotation.Classifier;
@@ -28,19 +27,16 @@
/**
- * A coordinate reference system that is defined by its coordinate conversion from another coordinate reference system.
- * Derived CRS are not directly associated to a {@linkplain org.opengis.referencing.datum.Datum datum}.
+ * A In principle, all sub-types of {@link CoordinateReferenceSystem} may take on the role of either source or
- * derived CRS with the exception of a {@link GeocentricCRS} and a {@link ProjectedCRS}. The latter is modelled
- * as an object class under its own name, rather than as a general derived CRS of type "projected".
- * This has been done to honour common practice, which acknowledges projected CRSs as one of the best known
- * types of coordinate reference systems.
- *
- * @author Martin Desruisseaux (IRD)
- * @version 4.0
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 3.1
* @since 1.0
+ *
+ * @deprecated As of ISO 19111:2019, this interface is renamed as {@link DerivedCRS}.
*/
+@Deprecated(since="3.1", forRemoval=true)
@Classifier(Stereotype.ABSTRACT)
@UML(identifier="SC_GeneralDerivedCRS", specification=ISO_19111, version=2007)
public interface GeneralDerivedCRS extends SingleCRS {
@@ -49,30 +45,14 @@ public interface GeneralDerivedCRS extends SingleCRS {
*
* @return the base coordinate reference system.
*/
- @UML(identifier="baseCRS", obligation=MANDATORY, specification=ISO_19111)
- SingleCRS getBaseCRS();
+ @UML(identifier="baseCRS", obligation=MANDATORY, specification=ISO_19111, version=2007)
+ CoordinateReferenceSystem getBaseCRS();
/**
* Returns the conversion from the {@linkplain #getBaseCRS() base CRS} to this CRS.
*
* @return the conversion from the base CRS.
- *
- * @departure rename
- * "{@code conversion}" may be confusing as a method name
- * since it does not indicate which CRS is the source or which is the target.
- * The OGC 01-009 specification used the {@code toBase()} method name.
- * By analogy with 01-009, GeoAPI defines a method name which contains the "{@code FromBase}" expression.
*/
- @UML(identifier="conversion", obligation=MANDATORY, specification=ISO_19111)
+ @UML(identifier="conversion", obligation=MANDATORY, specification=ISO_19111, version=2007)
Conversion getConversionFromBase();
-
- /**
- * Returns the same datum as the base CRS datum.
- *
- * @return the datum of this derived CRS, which is the {@linkplain #getBaseCRS() base CRS} datum.
- */
- @Override
- default Datum getDatum() {
- return getBaseCRS().getDatum();
- }
}
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java
index 9faaf9ab5..039fc3e35 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java
@@ -43,7 +43,8 @@
* handling both using the {@code SC_GeodeticCRS} parent type.
* GeoAPI keeps them since the distinction between those two types is in wide use.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java
index 02082198c..8b06966dd 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java
@@ -25,17 +25,16 @@
/**
- * A 2- or 3-dimensional coordinate reference system associated with a geodetic datum.
- * Geodetic CRSs provide an accurate representation of the geometry of geographic features
- * for a large portion of the Earth's surface.
- *
- * This type of CRS can be used with coordinate systems of type
+ * A 2- or 3-dimensional CRS used over the whole planet or substantial parts of it.
+ * This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.CartesianCS},
* {@link org.opengis.referencing.cs.SphericalCS} or
- * {@link org.opengis.referencing.cs.EllipsoidalCS}.
+ * {@link org.opengis.referencing.cs.EllipsoidalCS}.
+ * In the latter case, the {@link GeographicCRS} specialization should be used.
*
- * @author Martin Desruisseaux (IRD)
- * @version 3.0
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 3.1
* @since 2.1
*/
@UML(identifier="SC_GeodeticCRS", specification=ISO_19111, version=2007)
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java
index da2febaf8..a48de9b27 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java
@@ -53,7 +53,8 @@
* same goal.
*
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/ImageCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/ImageCRS.java
index 0db329de5..c78a4f8e4 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/ImageCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/ImageCRS.java
@@ -28,7 +28,7 @@
/**
- * A 2-dimensional engineering coordinate reference system applied to locations in images.
+ * A 2-dimensional engineering Note:
* image coordinate reference systems are treated as a separate sub-type because a separate
@@ -39,7 +39,7 @@
* {@link org.opengis.referencing.cs.CartesianCS} or
* {@link org.opengis.referencing.cs.AffineCS}.
*
- * @author Martin Desruisseaux (IRD)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java
index 17abcd739..dc3993cde 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java
@@ -27,7 +27,7 @@
/**
- * A 1-dimensional coordinate reference system which uses parameter values or functions.
+ * A 1-dimensional
CRS which uses parameter values or functions.
* A coordinate reference system shall be of the parametric type if a physical or material
* property or function is used as the dimension.
* The values or functions can vary monotonically with height.
@@ -40,6 +40,7 @@
*
This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.ParametricCS}.
*
+ * @author OGC Topic 2 (for abstract model and documentation)
* @author Johann Sorel (Geomatys)
* @version 3.1
* @since 3.1
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/ProjectedCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/ProjectedCRS.java
index 317cab426..34fbd4d73 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/ProjectedCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/ProjectedCRS.java
@@ -37,7 +37,8 @@
*
This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.CartesianCS}.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*
@@ -45,7 +46,7 @@
* @see CRSFactory#createProjectedCRS(Map, GeographicCRS, Conversion, CartesianCS)
*/
@UML(identifier="SC_ProjectedCRS", specification=ISO_19111, version=2007)
-public interface ProjectedCRS extends GeneralDerivedCRS {
+public interface ProjectedCRS extends DerivedCRS {
/**
* Returns the base coordinate reference system, which must be geographic.
*
@@ -64,6 +65,8 @@ public interface ProjectedCRS extends GeneralDerivedCRS {
/**
* Returns the coordinate system, which shall be Cartesian.
+ * In the 3D case the ellipsoidal height from the base
CRS
+ * is retained to form a three-dimensional Cartesian coordinate system.
*
* @return the Cartesian coordinate system.
*/
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/SingleCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/SingleCRS.java
index a26083d99..36dcd9849 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/SingleCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/SingleCRS.java
@@ -28,45 +28,50 @@
/**
- * Base type of
CRS related to an object by a datum.
+ * Base type of
CRS related to an object by a datum or datum ensemble.
* For {@linkplain org.opengis.referencing.datum.GeodeticDatum geodetic}
- * and {@linkplain org.opengis.referencing.datum.VerticalDatum vertical} datums, the object will be the Earth.
+ * and {@linkplain org.opengis.referencing.datum.VerticalDatum vertical} reference frame,
+ * the object will be the Earth or another celestial body.
*
- *
The valid coordinate system type and the datum type are constrained by the CRS type.
- * For example, {@code GeographicCRS} can be associated only to {@code EllipsoidalCS} and
- * {@code GeodeticDatum}.
+ *
The valid coordinate system type and the datum type are constrained by the CRS type.
+ * For example, {@code GeographicCRS} can be associated only to {@code EllipsoidalCS} and {@code GeodeticDatum}.
+ * The constraints are documented in the Javadoc of sub-interfaces.
*
- * @author Martin Desruisseaux (IRD)
- * @version 3.0
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 3.1
* @since 2.0
*
- * @see org.opengis.referencing.cs.CoordinateSystem
- * @see org.opengis.referencing.datum.Datum
+ * @see CoordinateSystem
+ * @see Datum
*/
@Classifier(Stereotype.ABSTRACT)
-@UML(identifier="SC_SingleCRS", specification=ISO_19111, version=2007)
+@UML(identifier="SingleCRS", specification=ISO_19111)
public interface SingleCRS extends CoordinateReferenceSystem {
/**
- * Returns the coordinate system associated to this CRS.
- * The coordinate system is composed of a set of coordinate axes with specified units of measure.
- * This concept implies the mathematical rules that define how coordinate values are calculated
+ * Returns the coordinate system associated to this
CRS.
+ * The coordinate system (
CS) is composed of a set of coordinate axes with specified units of measure.
+ * The
CS subtype implies the mathematical rules that define how coordinate values are calculated
* from distances, angles and other geometric elements and vice versa.
+ *
+ * @return the coordinate system associated to this
CRS.
*/
@Override
@UML(identifier="coordinateSystem", obligation=MANDATORY, specification=ISO_19111)
CoordinateSystem getCoordinateSystem();
/**
- * Returns the datum associated directly or indirectly to this CRS.
- * In the case of {@link GeneralDerivedCRS}, this method returns the
- * datum of the {@linkplain GeneralDerivedCRS#getBaseCRS() base CRS}.
+ * Returns the datum associated directly or indirectly to this
CRS.
+ * In the case of {@link DerivedCRS}, this method returns the
+ * datum of the {@linkplain DerivedCRS#getBaseCRS() base CRS}.
*
*
A datum specifies the relationship of a coordinate system to the object, thus ensuring that the abstract
* mathematical concept “coordinate system” can be applied to the practical problem of describing positions of
- * features on or near the earth's surface by means of coordinates. The object will generally, but not necessarily,
- * be the earth. For certain coordinate reference systems, the object may be a moving platform.
+ * features on or near the planet's surface by means of coordinates.
+ * The object will generally, but not necessarily, be the Earth.
+ * For certain coordinate reference systems, the object may be a moving platform.
*
- * @return the datum.
+ * @return the datum associated directly or indirectly to this
CRS.
*
* @departure easeOfUse
* The ISO specification declares the datum as absent when the association is indirect.
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/TemporalCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/TemporalCRS.java
index 93c264d0e..2243a9412 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/TemporalCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/TemporalCRS.java
@@ -34,7 +34,8 @@
*
This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.TimeCS}.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/VerticalCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/VerticalCRS.java
index 3cf2df102..6fe6eff17 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/VerticalCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/VerticalCRS.java
@@ -31,20 +31,15 @@
* Vertical
CRSs make use of the direction of gravity to define the concept of height or depth,
* but the relationship with gravity may not be straightforward.
*
- *
By implication, ellipsoidal heights (h) cannot be captured in a vertical coordinate
- * reference system. Ellipsoidal heights cannot exist independently, but only as inseparable part
- * of a 3D coordinate tuple defined in a geographic 3D coordinate reference system.
- *
- *
Note:
- * some applications may relax the above rule and accept ellipsoidal heights in some contexts.
- * For example, as a transient state while parsing the legacy Well-Known Text version 1,
- * or any other format based on legacy specifications where ellipsoidal heights were allowed as an
- * independent axis. However, implementers are encouraged to assemble the full 3D CRS as soon as they can.
+ *
By implication, ellipsoidal heights (h) cannot be captured in a vertical CRS.
+ * Ellipsoidal heights cannot exist independently, but only as inseparable part of a 3D coordinate tuple
+ * defined in a geographic or projected 3D CRS.
*
*
This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.VerticalCS}.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/package-info.java b/geoapi/src/main/java/org/opengis/referencing/crs/package-info.java
index e1a586922..9b4be00f8 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/package-info.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/package-info.java
@@ -18,43 +18,38 @@
/**
* Reference systems by coordinates.
- * A {@linkplain org.opengis.referencing.crs.CoordinateReferenceSystem Coordinate Reference System} (CRS)
- * consists of one {@linkplain org.opengis.referencing.cs Coordinate System}
+ * A {@linkplain org.opengis.referencing.crs.CoordinateReferenceSystem Coordinate Reference System}
+ * (
CRS) generally consists of one {@linkplain org.opengis.referencing.cs Coordinate System}
* (a set of {@linkplain org.opengis.referencing.cs.CoordinateSystemAxis axes} with implied mathematical rules
* for calculating distances and angles from coordinates) that is related to the Earth, another celestial body
- * or a platform through one {@linkplain org.opengis.referencing.datum datum}.
+ * or a platform through one {@linkplain org.opengis.referencing.datum datum} or datum ensemble.
*
*
{@code CoordinateReferenceSystem} instances and their components shall be immutable.
* For CRS defined on moving platforms such as cars, ships, aircraft and spacecraft,
* transformation to an earth-fixed coordinate reference system may include a time element.
- * Time-variability of coordinate reference systems may be covered by creating different
- * {@code CoordinateReferenceSystem} instances, each with a different datum, for consecutive epochs.
- * The date of realization of the datum shall then be included in its definition.
- * Furthermore, it is recommended that the date of realization be included in the names of those datums
- * and coordinate reference systems.
- *
- *
Sub-types of coordinate reference system
- * Geodetic survey practice usually divides coordinate reference systems into a number of sub-types.
- * The common classification criterion for sub-typing of coordinate reference systems can be described
- * as the way in which they deal with earth curvature. This has a direct effect on the portion of the
- * earth's surface that can be covered by that type of
CRS with an acceptable degree of error.
- *
- *
Compound CRS
- * The traditional separation of horizontal and vertical position has resulted in coordinate reference systems
- * that are horizontal (2D) in nature and vertical (1D). It is established practice to combine the horizontal
- * coordinates of a point with a height or depth from a different
CRS. The coordinate reference system
- * to which these 3D coordinates are referenced combines the separate horizontal and vertical coordinate reference
- * systems of the horizontal and vertical coordinates. Such a
CRS is called a
compound
- *
CRS. It consists of an ordered sequence of the two or more single coordinate reference systems.
- *
- *
Derived CRS
+ * For a dynamic
CRS, locations on or near the surface of the Earth will move
+ * within the
CRS due to crustal motion or deformation, therefor data needs a
+ * {@linkplain org.opengis.coordinate.CoordinateMetadata#getCoordinateEpoch() coordinate epoch}
+ * in addition of the
CRS. In both cases, time-variability is handled by
+ * coordinate operations rather than changes in the
CRS definition.
+ *
+ *
Compound CRS
+ * The traditional separation of horizontal, vertical and temporal position has resulted in different interfaces
+ * for the horizontal (2D), vertical (1D) and temporal (1D) components. It is established practice to combine the
+ * horizontal coordinates of a point with a height or depth from a different
CRS, and sometime a time.
+ * The
CRS to which these 3D or 4D coordinates are referenced is called a
compound
+ * coordinate reference system.
+ *
+ *
Derived CRS
* Some coordinate reference systems are defined by applying a coordinate conversion to another
CRS.
- * Such a
CRS is called a
derived CRS and the coordinate reference system it
- * was derived from by applying the conversion is called the
source or
base CRS.
+ * Such a
CRS is called a
derived coordinate reference system and the
CRS
+ * it was derived from by applying the conversion is called the
base CRS.
* A coordinate conversion is an arithmetic operation with zero or more parameters that have defined values.
- * The base
CRS and derived
CRS have the same datum.
+ * The base
CRS and derived
CRS have the same datum or datum ensemble.
+ * Projected
CRSs are special cases of derived
CRSs.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*/
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/Datum.java b/geoapi/src/main/java/org/opengis/referencing/datum/Datum.java
index 3bd5bf7a2..fc0e90955 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/Datum.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/Datum.java
@@ -31,9 +31,9 @@
/**
- * Specifies the relationship of a {@linkplain org.opengis.referencing.cs.CoordinateSystem coordinate system}
- * to the earth, thus creating a {@linkplain org.opengis.referencing.crs.CoordinateReferenceSystem coordinate
- * reference system}. For {@linkplain org.opengis.referencing.crs.GeocentricCRS geodetic} and
+ * Specifies the relationship of a coordinate system to the earth,
+ * thus creating a coordinate reference system.
+ * For {@linkplain org.opengis.referencing.crs.GeocentricCRS geodetic} and
* {@linkplain org.opengis.referencing.crs.VerticalCRS vertical} coordinate reference systems,
* the datum relates the coordinate system to the Earth. With other types of coordinate reference systems,
* the datum may relate the coordinate system to another physical or virtual object.
@@ -43,7 +43,8 @@
* {@linkplain org.opengis.referencing.cs.CoordinateSystem coordinate systems}, documented in their
* javadoc.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/DatumAuthorityFactory.java b/geoapi/src/main/java/org/opengis/referencing/datum/DatumAuthorityFactory.java
index eaed59919..c0e1888fe 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/DatumAuthorityFactory.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/DatumAuthorityFactory.java
@@ -28,7 +28,7 @@
/**
- * Creates {@linkplain Datum datum} objects using authority codes.
+ * Creates datum objects using authority codes.
* External authorities are used to manage definitions of objects used in this interface.
* The definitions of these objects are referenced using code strings.
* A commonly used authority is
EPSG.
@@ -43,7 +43,7 @@
* saying that the type or service is not supported.
*
*
- * @author Martin Desruisseaux (IRD)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @author Johann Sorel (Geomatys)
* @version 3.1
* @since 1.0
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/DatumFactory.java b/geoapi/src/main/java/org/opengis/referencing/datum/DatumFactory.java
index b99045dc8..aee7a6fb5 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/DatumFactory.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/DatumFactory.java
@@ -31,7 +31,7 @@
/**
- * Builds up complex {@linkplain Datum datums} from simpler objects or values.
+ * Builds up complex datum objects from simpler objects or values.
* {@code DatumFactory} allows applications to make {@linkplain Datum datums}
* that cannot be created by a {@link DatumAuthorityFactory}.
* This factory is very flexible, whereas the authority factory is easier to use.
@@ -44,7 +44,7 @@
* the default is to throw an {@link UnimplementedServiceException}
* with a message saying that the type or service is not supported.
*
- * @author Martin Desruisseaux (IRD)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @author Johann Sorel (Geomatys)
* @version 3.1
* @since 1.0
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/Ellipsoid.java b/geoapi/src/main/java/org/opengis/referencing/datum/Ellipsoid.java
index c86b3ed21..9fb020790 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/Ellipsoid.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/Ellipsoid.java
@@ -67,7 +67,8 @@
* For precision, GeoAPI imports the {@code isIvfDefinitive} attribute from OGC 01-009
* to enable the user to establish which of the two parameters was used to define the instance.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/EngineeringDatum.java b/geoapi/src/main/java/org/opengis/referencing/datum/EngineeringDatum.java
index 6db0434e9..2c3f91bb6 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/EngineeringDatum.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/EngineeringDatum.java
@@ -23,12 +23,24 @@
/**
- * Defines the origin of an engineering coordinate reference system. An engineering datum is used
- * in a region around that origin. This origin can be fixed with respect to the earth (such as a
- * defined point at a construction site), or be a defined point on a moving vehicle (such as on a
- * ship or satellite).
+ * Identification of the origin of an engineering (or local) coordinate reference system.
+ * An engineering datum is used in a region around that origin.
+ * This origin can be fixed with respect to the Earth (such as a defined point at a construction site),
+ * a defined point on a moving object (such as on a road vehicle, vessel, aircraft or spacecraft),
+ * or a point used to describe spatial location internally on an image.
*
- * @author Martin Desruisseaux (IRD)
+ *
When used for a region on Earth, engineering CRSs use a flat-Earth approximation:
+ * corrections for Earth-curvature are not applied.
+ * Typical applications are for civil engineering construction and building information management.
+ * Note that these applications are not restricted to using engineering CRSs:
+ * they often utilize projected and sometimes geodetic CRSs.
+ *
+ *
When used for an image internal coordinates, the CRS is not georeferenced.
+ * The image can be georeferenced by relating the engineering CRS to a geodetic
+ * or projected CRS through a coordinate transformation.
+ *
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/GeodeticDatum.java b/geoapi/src/main/java/org/opengis/referencing/datum/GeodeticDatum.java
index 1d242edd3..3edd87033 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/GeodeticDatum.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/GeodeticDatum.java
@@ -25,11 +25,20 @@
/**
- * Defines the location and precise orientation in 3-dimensional space of a defined ellipsoid
- * (or sphere) that approximates the shape of the earth. Used also for Cartesian coordinate
- * system centered in this ellipsoid (or sphere).
+ * Location and orientation in 3-dimensional space of an ellipsoid (or sphere) that approximates the shape of the earth.
+ * A geodetic reference frame is used with three-dimensional or horizontal (two-dimensional) coordinate reference systems,
+ * and requires an ellipsoid definition and a prime meridian definition.
+ * This frame can also be used for a Cartesian coordinate system centered in the ellipsoid (or sphere).
+ * It is used to describe large portions of the planet's surface up to the entire planet's surface.
*
- * @author Martin Desruisseaux (IRD)
+ *
One ellipsoid can be specified with every geodetic datum, even if the ellipsoid is not used computationally.
+ * The latter may be the case when a Geocentric CRS is used,
+ * e.g., in the calculation of satellite orbit and ground positions from satellite observations.
+ * Although use of a Geocentric CRS apparently obviates the need of an ellipsoid,
+ * the ellipsoid usually played a role in the determination of the associated geodetic datum.
+ *
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
@@ -42,17 +51,27 @@
@UML(identifier="CD_GeodeticDatum", specification=ISO_19111, version=2007)
public interface GeodeticDatum extends Datum {
/**
- * Returns the ellipsoid.
+ * Returns an approximation of the surface of the geoid.
+ * Because of the area for which the approximation is valid
+ * — traditionally regionally, but with the advent of satellite positioning often globally —
+ * the ellipsoid is typically associated with Geographic and Projected
CRSs.
+ *
+ *
An ellipsoid is defined either by its semi-major axis and inverse flattening,
+ * or by its semi-major axis and semi-minor axis.
+ * For some applications, for example small-scale mapping in atlases,
+ * a spherical approximation of the geoid's surface is used,
+ * requiring only the radius of the sphere to be specified.
*
- * @return the ellipsoid.
+ * @return the approximation of the surface of the geoid.
*/
@UML(identifier="ellipsoid", obligation=MANDATORY, specification=ISO_19111)
Ellipsoid getEllipsoid();
/**
- * Returns the prime meridian.
+ * Returns the origin from which longitude values are specified.
+ * Most geodetic reference frames use Greenwich as their prime meridian.
*
- * @return the prime meridian.
+ * @return the origin from which longitude values are specified.
*/
@UML(identifier="primeMeridian", obligation=MANDATORY, specification=ISO_19111)
PrimeMeridian getPrimeMeridian();
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/ImageDatum.java b/geoapi/src/main/java/org/opengis/referencing/datum/ImageDatum.java
index 681448700..9203a6f86 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/ImageDatum.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/ImageDatum.java
@@ -25,17 +25,31 @@
/**
- * Defines the origin of an image coordinate reference system. An image datum is used in a local
- * context only. For an image datum, the anchor point is usually either the centre of the image
- * or the corner of the image.
+ * Defines the origin of an image coordinate reference system. An image datum is used in a local context only.
+ * For an image datum, the anchor point is usually either the centre of the image or the corner of the image.
+ * The image datum definition applies regardless of whether or not the image is georeferenced.
+ * Georeferencing is performed through a transformation of image
CRS to geodetic or projected
CRS.
+ * The transformation plays no part in the image datum definition.
*
- *
Note:
- * the image datum definition applies regardless of whether or not the image is georeferenced.
- * Georeferencing is performed through a transformation of image
CRS to geodetic
- * or projected
CRS.
- * The transformation plays no part in the image datum definition.
+ *
The image pixel grid is defined as the set of lines of constant integer coordinate values.
+ * The term "image grid" is often used in other standards to describe the concept of Image CRS.
+ * However, care must be taken to correctly interpret this term in the context in which it is used.
+ * The term "grid cell" is often used as a substitute for the term "pixel".
*
- * @author Martin Desruisseaux (IRD)
+ *
The grid lines of the image may be associated in two ways with the data attributes of the pixel or grid cell.
+ * The data attributes of the image usually represent an average or integrated value that is associated with the entire pixel.
+ * An image grid can be associated with this data in such a way that the grid lines run through the centres of the pixels.
+ * The cell centres will thus have integer coordinate values.
+ * In that case the attribute "pixel in cell" will have the value "cell centre".
+ * Alternatively, the image grid may be defined such that the grid lines
+ * associate with the cell or pixel corners rather than the cell centres.
+ * The cell centres will thus have noninteger coordinate values, the fractional parts always being 0.5.
+ * The attribute "pixel in cell" will now have the value "cell corner".
+ * This difference in perspective has no effect on the image interpretation,
+ * but is important for coordinate transformations involving this defined image.
+ *
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/ParametricDatum.java b/geoapi/src/main/java/org/opengis/referencing/datum/ParametricDatum.java
index 60a32c950..48e602d52 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/ParametricDatum.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/ParametricDatum.java
@@ -27,6 +27,7 @@
* A textual description and/or a set of parameters identifying a particular reference surface used as
* the origin of a parametric coordinate system, including its position with respect to the Earth.
*
+ * @author OGC Topic 2 (for abstract model and documentation)
* @author Johann Sorel (Geomatys)
* @version 3.1
* @since 3.1
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/PixelInCell.java b/geoapi/src/main/java/org/opengis/referencing/datum/PixelInCell.java
index fde22dfef..89b016b70 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/PixelInCell.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/PixelInCell.java
@@ -27,12 +27,11 @@
/**
* Specification of the way the image grid is associated with the image data attributes.
+ * This code list is similar to {@link org.opengis.metadata.spatial.PixelOrientation}
+ * except that the latter is more clearly restricted to the two-dimensional case.
*
- *
Note:
- * this code list is similar to {@link org.opengis.metadata.spatial.PixelOrientation}
- * except that the latter is more clearly restricted to the two-dimensional case.
- *
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/PrimeMeridian.java b/geoapi/src/main/java/org/opengis/referencing/datum/PrimeMeridian.java
index 8d6aaf435..1757dbd0e 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/PrimeMeridian.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/PrimeMeridian.java
@@ -39,7 +39,8 @@
* shall be “Greenwich”.
*
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0.1
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/TemporalDatum.java b/geoapi/src/main/java/org/opengis/referencing/datum/TemporalDatum.java
index 772888772..f3d349b6d 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/TemporalDatum.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/TemporalDatum.java
@@ -29,7 +29,8 @@
/**
* A temporal datum defines the origin of a temporal coordinate reference system.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatum.java b/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatum.java
index 1030eceae..59e2d31fd 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatum.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatum.java
@@ -25,15 +25,16 @@
/**
- * A textual description and/or a set of parameters identifying a particular reference level
- * surface used as a zero-height surface. The description includes its position with respect
- * to the Earth for any of the height types recognized by this standard.
+ * Identification of a particular reference level surface used as a zero-height surface.
+ * The description includes its position with respect to the Earth for any of the height
+ * types recognized by the ISO 19111 standard.
*
- *
There are several types of Vertical Datums, and each may place constraints on the
- * {@linkplain org.opengis.referencing.cs.CoordinateSystemAxis Coordinate Axis} with which
+ *
There are several types of vertical reference frames, and each may place constraints
+ * on the {@linkplain org.opengis.referencing.cs.CoordinateSystemAxis Coordinate Axis} with which
* it is combined to create a {@linkplain org.opengis.referencing.crs.VerticalCRS Vertical CRS}.
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.0
* @since 1.0
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatumType.java b/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatumType.java
index f61b09e3a..301d947aa 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatumType.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/VerticalDatumType.java
@@ -43,7 +43,8 @@
*
* @see VerticalDatum#getVerticalDatumType()
*
- * @author Martin Desruisseaux (IRD)
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*/
@@ -56,44 +57,70 @@ public final class VerticalDatumType extends CodeList
{
private static final long serialVersionUID = -8161084528823937553L;
/**
- * In some cases, for example oil exploration and production, a geological feature, such as the top
- * or bottom of a geologically identifiable and meaningful subsurface layer, is used as a
- * vertical datum. Other variations to the above three vertical datum types may exist
- * and are all included in this type.
- */
- @UML(identifier="other surface", obligation=CONDITIONAL, specification=ISO_19111)
- public static final VerticalDatumType OTHER_SURFACE = new VerticalDatumType("OTHER_SURFACE");
-
- /**
- * The zero value of the associated vertical coordinate system axis is defined to approximate
- * a constant potential surface, usually the geoid. Such a reference surface is usually
- * determined by a national or scientific authority, and is then a well-known, named datum.
+ * The zero value is defined to approximate a constant potential surface, usually the geoid.
+ * Such a reference surface is usually determined by a national or scientific authority,
+ * and is then a well-known, named reference frame.
*/
@UML(identifier="geoidal", obligation=CONDITIONAL, specification=ISO_19111)
public static final VerticalDatumType GEOIDAL = new VerticalDatumType("GEOIDAL");
/**
- * The zero point of the vertical axis is defined by a surface that has meaning for the
- * purpose which the associated vertical measurements are used for. For hydrographic charts,
- * this is often a predicted nominal sea surface (i.e., without waves or other wind and current
- * effects) that occurs at low tide. Depths are measured in the direction perpendicular
- * (approximately) to the actual equipotential surfaces of the earth's gravity field,
- * using such procedures as echo-sounding.
+ * The zero point is defined by a surface that has meaning
+ * for the purpose which the associated vertical measurements are used for.
+ * For hydrographic charts, this is often a predicted nominal sea surface
+ * (i.e., without waves or other wind and current effects) that occurs at low tide.
+ * Examples are Lowest Astronomical Tide and Lowest Low Water Spring.
+ * A different example is a sloping and undulating River Datum defined as
+ * the nominal river water surface occurring at a quantified river discharge.
+ *
+ * Depths are measured in the direction perpendicular (approximately) to the actual equipotential
+ * surfaces of the earth's gravity field, using such procedures as echo-sounding.
*/
@UML(identifier="depth", obligation=CONDITIONAL, specification=ISO_19111)
public static final VerticalDatumType DEPTH = new VerticalDatumType("DEPTH");
/**
- * Atmospheric pressure is the basis for the definition of the origin of the
- * associated vertical coordinate system axis. These are approximations of
- * orthometric heights obtained with the help of a barometer or a barometric
- * altimeter. These values are usually expressed in one of the following units:
- * meters, feet, millibars (used to measure pressure levels), or theta value
- * (units used to measure geopotential height).
+ * The origin of the vertical axis is based on atmospheric pressure.
+ * Atmospheric pressure may be used as the intermediary to determine height (barometric height determination)
+ * or it may be used directly as the vertical coordinate, against which other parameters are measured.
+ * Barometric values are usually expressed in one of the following units:
+ * meters, feet, millibars (used to measure pressure levels),
+ * or theta value (units used to measure geopotential height).
+ *
+ * Barometric height determination is routinely used in aircraft.
+ * The altimeter (barometer) on board is set to the altitude of the airfield at the time of take-off,
+ * which corrects simultaneously for instantaneous air pressure and altitude of the airfield.
+ * The measured height value is commonly named "altitude".
+ *
+ * In some land surveying applications, height differences between points are measured with barometers.
+ * To obtain absolute heights the measured height differences are added to the known heights of control points.
+ * In that case the vertical datum type is not barometric, but is the same as that of the vertical control network
+ * used to obtain the heights of the new points and its vertical datum type.
+ * The accuracy of this technique is limited,
+ * as it is affected strongly by the spatial and temporal variability of atmospheric pressure.
+ * This accuracy limitation impacts the precision of the associated vertical datum definition.
+ * The datum is usually the surface of constant atmospheric pressure approximately equating to mean sea level (MSL).
+ * The origin or anchor point is usually a point of known MSL height.
+ * The instruments are calibrated at this point by correcting for the instantaneous atmospheric pressure
+ * at sea level and the height of the point above MSL.
+ *
+ * In meteorology, atmospheric pressure routinely takes the role as vertical coordinate in a CRS
+ * that is used as a spatial reference frame for meteorological parameters in the upper atmosphere.
+ * The origin of the datum is in that case the (hypothetical) zero atmospheric pressure and the positive
+ * vertical axis points down (to increasing pressure).
*/
@UML(identifier="barometric", obligation=CONDITIONAL, specification=ISO_19111)
public static final VerticalDatumType BAROMETRIC = new VerticalDatumType("BAROMETRIC");
+ /**
+ * The zero value is defined by a method not described by the other enumeration values in this class.
+ * In some cases, for example oil exploration and production, a geological feature, such as the top or
+ * bottom of a geologically identifiable and meaningful subsurface layer, is used as a vertical datum.
+ * Other variations to the above three vertical datum types may exist and are all included in this type.
+ */
+ @UML(identifier="other surface", obligation=CONDITIONAL, specification=ISO_19111)
+ public static final VerticalDatumType OTHER_SURFACE = new VerticalDatumType("OTHER_SURFACE");
+
/**
* Constructs an element of the given name.
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/datum/package-info.java b/geoapi/src/main/java/org/opengis/referencing/datum/package-info.java
index 9a7470dde..8c93208d3 100644
--- a/geoapi/src/main/java/org/opengis/referencing/datum/package-info.java
+++ b/geoapi/src/main/java/org/opengis/referencing/datum/package-info.java
@@ -18,152 +18,17 @@
/**
* Relationship of a Coordinate System (CS) to the Earth, another celestial body or a platform.
- * A datum can be used as the basis for one-, two- or three-dimensional systems.
* For {@linkplain org.opengis.referencing.crs.GeodeticCRS geodetic}
- * and {@linkplain org.opengis.referencing.crs.VerticalCRS vertical} coordinate reference systems,
- * the datum shall relate the coordinate system to the Earth.
- * With other types of coordinate reference systems (CRS), the datum may relate the coordinate system
- * to another physical or virtual object. In some applications of an
- * {@linkplain org.opengis.referencing.crs.EngineeringCRS Engineering CRS},
- * the object may be a platform moving relative to the Earth. In these applications,
- * the datum itself is not time-dependent, but any transformations of the associated coordinates
- * to an Earth-fixed or other coordinate reference system shall contain time-dependent parameters.
- *
- * Five subtypes of datum are specified:
- * {@linkplain org.opengis.referencing.datum.GeodeticDatum geodetic},
- * {@linkplain org.opengis.referencing.datum.VerticalDatum vertical},
- * {@linkplain org.opengis.referencing.datum.EngineeringDatum engineering},
- * {@linkplain org.opengis.referencing.datum.ImageDatum image} and
- * {@linkplain org.opengis.referencing.datum.TemporalDatum temporal}.
- * Each datum subtype can be associated only with specific types of coordinate reference systems:
- *
- *
- * - A geodetic datum is used with three-dimensional or horizontal (two-dimensional) coordinate reference systems,
- * and requires an ellipsoid definition and a prime meridian definition.
- * It is used to describe large portions of the earth's surface up to the entire earth's surface.
- * - A vertical datum can only be associated with a vertical coordinate reference system.
- * - Image datum and engineering datum are both used in a local context only:
- * to describe the origin of an image and the origin of an engineering (or local) coordinate reference system.
- *
- *
- * Vertical datum
- * Further sub-typing is required to describe vertical datums adequately.
- * The following types of vertical datum are distinguished:
- *
- * Geoidal
- * The zero value of the associated (vertical) coordinate system axis is defined
- * to approximate a constant potential surface, usually the geoid. Such a reference
- * surface is usually determined by a national or scientific authority and is then
- * a well known, named datum. This is the default vertical datum type, because it is
- * the most common one encountered.
- *
- * Depth
- * The zero point of the vertical axis is defined by a surface that has meaning for
- * the purpose the associated vertical measurements are used for. For hydrographic
- * charts, this is often a predicted nominal sea surface (i.e., without waves or
- * other wind and current effects) that occurs at low tide. Examples are Lowest
- * Astronomical Tide and Lowest Low Water Spring. A different example is a sloping
- * and undulating River Datum defined as the nominal river water surface occurring
- * at a quantified river discharge.
- *
- * Barometric
- * A vertical datum is of type "barometric" if atmospheric pressure is the basis
- * for the definition of the origin. Atmospheric pressure may be used as the
- * intermediary to determine height (barometric height determination) or it may
- * be used directly as the vertical coordinate, against which other parameters are
- * measured. The latter case is applied routinely in meteorology.
- *
- * Barometric height determination is routinely used in aircraft.
- * The altimeter (barometer) on board is set to the altitude of the airfield at the
- * time of take-off, which corrects simultaneously for instantaneous air pressure and
- * altitude of the airfield. The measured height value is commonly named "altitude".
- *
- * In some land surveying applications height differences between
- * points are measured with barometers. To obtain absolute heights the measured height
- * differences are added to the known heights of control points. In that case the vertical
- * datum type is not barometric, but is the same as that of the vertical control network
- * used to obtain the heights of the new points and its vertical datum type.
- *
- * The accuracy of this technique is limited, as it is affected
- * strongly by the spatial and temporal variability of atmospheric pressure. This
- * accuracy limitation impacts the precision of the associated vertical datum definition.
- * The datum is usually the surface of constant atmospheric pressure approximately
- * equating to mean sea level (MSL). The origin or anchor point is usually a point
- * of known MSL height. The instruments are calibrated at this point by correcting
- * for the instantaneous atmospheric pressure at sea level and the height of the
- * point above MSL.
- *
- * In meteorology, atmospheric pressure routinely takes the role as vertical coordinate in a CRS
- * that is used as a spatial reference frame for meteorological parameters in the upper atmosphere.
- * The origin of the datum is in that case the (hypothetical) zero atmospheric pressure and the positive
- * vertical axis points down (to increasing pressure).
- *
- * Other surface
- * In some cases, e.g. oil exploration and production, geological features,
- * i.e., the top or bottom of a geologically identifiable and meaningful subsurface
- * layer, are sometimes used as a vertical datum. Other variations to the above three
- * vertical datum types may exist and are all bracketed in this category.
- *
- *
- * Image datum
- * The image pixel grid is defined as the set of lines of constant
- * integer coordinate values. The term "image grid" is often used in other standards to
- * describe the concept of Image CRS. However, care must be taken to correctly interpret
- * this term in the context in which it is used. The term "grid cell" is often used as a
- * substitute for the term "pixel".
- *
- * The grid lines of the image may be associated in two ways with
- * the data attributes of the pixel or grid cell (ISO CD 19123). The data attributes
- * of the image usually represent an average or integrated value that is associated
- * with the entire pixel.
- *
- * An image grid can be associated with this data in such a way
- * that the grid lines run through the centres of the pixels. The cell centres will
- * thus have integer coordinate values. In that case the attribute "pixel in cell"
- * will have the value "cell centre".
- *
- * Alternatively, the image grid may be defined such that the
- * grid lines associate with the cell or pixel corners rather than the cell centres.
- * The cell centres will thus have noninteger coordinate values, the fractional parts
- * always being 0.5. ISO CD 19123 calls the grid points in this latter case "posts"
- * and associated image data: "matrix data". The attribute "pixel in cell" will now
- * have the value "cell corner".
- *
- * This difference in perspective has no effect on the image
- * interpretation, but is important for coordinate transformations involving this
- * defined image.
- *
- * Prime meridian
- * A prime meridian defines the origin from which longitude values
- * are specified. Most geodetic datums use Greenwich as their prime meridian. A prime
- * meridian description is not needed for any datum type other than geodetic, or if the
- * datum type is geodetic and the prime meridian is Greenwich. The prime meridian
- * description is mandatory if the datum type is geodetic and its prime meridian
- * is not Greenwich.
- *
- * Ellipsoid
- * An ellipsoid is defined that approximates the surface of the
- * geoid. Because of the area for which the approximation is valid - traditionally
- * regionally, but with the advent of satellite positioning often globally - the
- * ellipsoid is typically associated with Geographic and Projected CRSs. An ellipsoid
- * specification shall not be provided if the datum type not geodetic.
- *
- * One ellipsoid must be specified with every geodetic datum,
- * even if the ellipsoid is not used computationally.
- * The latter may be the case when a Geocentric CRS is used,
- * e.g., in the calculation of satellite orbit and ground positions from satellite observations.
- * Although use of a Geocentric CRS apparently obviates the need of an ellipsoid,
- * the ellipsoid usually played a role in the determination of the associated geodetic datum.
- * Furthermore, one or more Geographic CRSs may be based on the same geodetic datum,
- * which requires the correct ellipsoid the associated with any given geodetic datum.
- *
- * An ellipsoid is defined either by its semi-major axis and
- * inverse flattening, or by its semi-major axis and semi-minor axis. For some
- * applications, for example small-scale mapping in atlases, a spherical approximation
- * of the geoid's surface is used, requiring only the radius of the sphere to be
- * specified.
- *
- * @author Martin Desruisseaux (IRD)
+ * and {@linkplain org.opengis.referencing.crs.VerticalCRS vertical}
+ * coordinate reference systems (CRS), the datum is known as reference frame
+ * and shall relate the coordinate system to the Earth or other celestial body.
+ * With other types of CRSs, the datum may relate the coordinate system
+ * to another physical or virtual object. It may be a moving platform such as a car.
+ * The datum itself is not time-dependent, but any transformations of the associated coordinates
+ * to an Earth-fixed or other coordinate reference system may contain time-dependent parameters.
+ *
+ * @author OGC Topic 2 (for abstract model and documentation)
+ * @author Martin Desruisseaux (IRD, Geomatys)
* @version 3.1
* @since 1.0
*/
diff --git a/geoapi/src/main/java/org/opengis/referencing/operation/Conversion.java b/geoapi/src/main/java/org/opengis/referencing/operation/Conversion.java
index cdcb98edc..2ffe48559 100644
--- a/geoapi/src/main/java/org/opengis/referencing/operation/Conversion.java
+++ b/geoapi/src/main/java/org/opengis/referencing/operation/Conversion.java
@@ -50,7 +50,7 @@ public interface Conversion extends SingleOperation {
/**
* Returns the source CRS.
* Conversions may have a source CRS that is not specified here,
- * but through {@link org.opengis.referencing.crs.GeneralDerivedCRS#getBaseCRS()} instead.
+ * but through {@link org.opengis.referencing.crs.DerivedCRS#getBaseCRS()} instead.
*
* @return the source CRS, or {@code null} if not available.
*/
@@ -61,7 +61,7 @@ public interface Conversion extends SingleOperation {
/**
* Returns the target CRS.
* Conversions may have a target CRS that is not specified here,
- * but through {@link org.opengis.referencing.crs.GeneralDerivedCRS} instead.
+ * but through {@link org.opengis.referencing.crs.DerivedCRS} instead.
*
* @return the target CRS, or {@code null} if not available.
*/
diff --git a/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperation.java b/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperation.java
index 47049b99b..9618c306f 100644
--- a/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperation.java
+++ b/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperation.java
@@ -102,7 +102,7 @@ public interface CoordinateOperation extends IdentifiedObject {
/**
* Returns the source CRS. The source CRS is mandatory for {@linkplain Transformation transformations} only.
* {@linkplain Conversion Conversions} may have a source CRS that is not specified here, but through
- * {@link org.opengis.referencing.crs.GeneralDerivedCRS#getBaseCRS()} instead.
+ * {@link org.opengis.referencing.crs.DerivedCRS#getBaseCRS()} instead.
*
* @return the source CRS, or {@code null} if not available.
*
@@ -115,7 +115,7 @@ public interface CoordinateOperation extends IdentifiedObject {
/**
* Returns the target CRS. The target CRS is mandatory for {@linkplain Transformation transformations} only.
* {@linkplain Conversion Conversions} may have a target CRS that is not specified here, but through
- * {@link org.opengis.referencing.crs.GeneralDerivedCRS} instead.
+ * {@link org.opengis.referencing.crs.DerivedCRS} instead.
*
* @return the target CRS, or {@code null} if not available.
*
diff --git a/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.java b/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.java
index fd4a75e09..f8a43802d 100644
--- a/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.java
+++ b/geoapi/src/main/java/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.java
@@ -73,8 +73,8 @@ public interface CoordinateOperationAuthorityFactory extends AuthorityFactory {
CoordinateOperation createCoordinateOperation(String code) throws FactoryException;
/**
- * Creates operations from {@linkplain CoordinateReferenceSystem coordinate reference system}
- * codes. This method returns only the operations declared by the authority, with preferred
+ * Creates operations from Coordinate Reference System codes.
+ * This method returns only the operations declared by the authority, with preferred
* operations first. This method doesn't need to compute operations from {@code source} to
* {@code target} CRS if no such operations were explicitly defined in the authority database.
* Computation of arbitrary operations can be performed by
diff --git a/geoapi/src/main/java/org/opengis/referencing/operation/package-info.java b/geoapi/src/main/java/org/opengis/referencing/operation/package-info.java
index f65b28e78..81d295160 100644
--- a/geoapi/src/main/java/org/opengis/referencing/operation/package-info.java
+++ b/geoapi/src/main/java/org/opengis/referencing/operation/package-info.java
@@ -92,7 +92,7 @@
* and/or coordinate conversions.
*
* The source and target coordinate reference system of a coordinate conversion
- * are defined in the {@link org.opengis.referencing.crs.GeneralDerivedCRS},
+ * are defined in the {@link org.opengis.referencing.crs.DerivedCRS},
* by specifying the base (i.e., source) CRS and the defining conversion.
* The derived coordinate reference system itself is the target CRS in this situation.
* When used in a concatenated operation, the conversion's source and target coordinate reference
diff --git a/geoapi/src/main/java/org/opengis/referencing/package-info.java b/geoapi/src/main/java/org/opengis/referencing/package-info.java
index ae7a728d3..825d2bb07 100644
--- a/geoapi/src/main/java/org/opengis/referencing/package-info.java
+++ b/geoapi/src/main/java/org/opengis/referencing/package-info.java
@@ -48,6 +48,7 @@
* there do not need to be any constraints on operation sequencing.
* This means that these interfaces can be used in parallel computing environments (e.g. Internet servers).
*
+ * @author OGC Topic 2 (for abstract model and documentation)
* @author Martin Desruisseaux (IRD, Geomatys)
* @author Ely Conn (Leica Geosystems Geospatial Imaging, LLC)
* @version 3.1
diff --git a/geoapi/src/main/python/opengis/referencing/crs.py b/geoapi/src/main/python/opengis/referencing/crs.py
index 91f1be077..487ebd2f7 100644
--- a/geoapi/src/main/python/opengis/referencing/crs.py
+++ b/geoapi/src/main/python/opengis/referencing/crs.py
@@ -193,7 +193,7 @@ def datum(self) -> EngineeringDatum:
pass
-class GeneralDerivedCRS(SingleCRS):
+class DerivedCRS(SingleCRS):
"""
A coordinate reference system that is defined by its coordinate conversion from another coordinate reference system
(not by a datum).
@@ -239,13 +239,6 @@ def datum(self) -> GeodeticDatum:
pass
-class DerivedCRS(GeneralDerivedCRS):
- """
- A coordinate reference system that is defined by its coordinate conversion from another coordinate reference system
- but is not a projected coordinate reference system.
- """
-
-
class GeographicCRS(GeodeticCRS):
"""
A coordinate reference system based on an ellipsoidal approximation of the geoid; this provides an accurate
@@ -264,7 +257,7 @@ def coordinate_system(self) -> EllipsoidalCS:
pass
-class ProjectedCRS(GeneralDerivedCRS):
+class ProjectedCRS(DerivedCRS):
"""
A 2D coordinate reference system used to approximate the shape of the earth on a planar surface.
"""
diff --git a/geoapi/src/main/python/opengis/referencing/operation.py b/geoapi/src/main/python/opengis/referencing/operation.py
index f8e096343..3cc6bcb10 100644
--- a/geoapi/src/main/python/opengis/referencing/operation.py
+++ b/geoapi/src/main/python/opengis/referencing/operation.py
@@ -235,7 +235,7 @@ def source_crs(self) -> CoordinateReferenceSystem:
"""
Returns the source CRS. The source CRS is mandatory for transformations only.
Conversions may have a source CRS that is not specified here, but through
- ``GeneralDerivedCRS.getBaseCRS()`` instead.
+ ``DerivedCRS.getBaseCRS()`` instead.
:return: The source CRS, or null if not available.
:rtype: CoordinateReferenceSystem
@@ -247,7 +247,7 @@ def target_crs(self) -> CoordinateReferenceSystem:
"""
Returns the target CRS. The target CRS is mandatory for transformations only.
Conversions may have a target CRS that is not specified here, but through
- ``GeneralDerivedCRS`` instead.
+ ``DerivedCRS`` instead.
:return: The target CRS, or null if not available.
:rtype: CoordinateReferenceSystem
@@ -417,7 +417,7 @@ class Conversion(SingleOperation):
def source_crs(self) -> CoordinateReferenceSystem:
"""
Returns the source CRS. Conversions may have a source CRS that is not specified here, but through
- ``GeneralDerivedCRS.getBaseCRS()`` instead.
+ ``DerivedCRS.getBaseCRS()`` instead.
:return: The source CRS, or null if not available.
:rtype: CoordinateReferenceSystem
@@ -428,7 +428,7 @@ def source_crs(self) -> CoordinateReferenceSystem:
def target_crs(self) -> CoordinateReferenceSystem:
"""
Returns the target CRS. Conversions may have a target CRS that is not specified here, but through
- ``GeneralDerivedCRS`` instead.
+ ``DerivedCRS`` instead.
:return: The target CRS, or null if not available.
:rtype: CoordinateReferenceSystem
diff --git a/geoapi/src/main/resources/org/opengis/annotation/class-index.properties b/geoapi/src/main/resources/org/opengis/annotation/class-index.properties
index f78222ab1..2fd744c00 100644
--- a/geoapi/src/main/resources/org/opengis/annotation/class-index.properties
+++ b/geoapi/src/main/resources/org/opengis/annotation/class-index.properties
@@ -39,6 +39,7 @@ CI_RoleCode=org.opengis.metadata.citation.Role
CI_Series=org.opengis.metadata.citation.Series
CI_Telephone=org.opengis.metadata.citation.Telephone
CI_TelephoneTypeCode=org.opengis.metadata.citation.TelephoneType
+CRS=org.opengis.referencing.crs.CoordinateReferenceSystem
CS_AffineCS=org.opengis.referencing.cs.AffineCS
CS_AxisDirection=org.opengis.referencing.cs.AxisDirection
CS_CartesianCS=org.opengis.referencing.cs.CartesianCS
@@ -226,7 +227,6 @@ PT_FreeText=org.opengis.util.InternationalString
QE_Usability=org.opengis.metadata.quality.Usability
RS_Identifier=org.opengis.referencing.ReferenceIdentifier
RS_ReferenceSystem=org.opengis.referencing.ReferenceSystem
-SC_CRS=org.opengis.referencing.crs.CoordinateReferenceSystem
SC_CompoundCRS=org.opengis.referencing.crs.CompoundCRS
SC_DerivedCRS=org.opengis.referencing.crs.DerivedCRS
SC_EngineeringCRS=org.opengis.referencing.crs.EngineeringCRS
@@ -236,7 +236,6 @@ SC_GeodeticCRS=org.opengis.referencing.crs.GeodeticCRS
SC_GeographicCRS=org.opengis.referencing.crs.GeographicCRS
SC_ImageCRS=org.opengis.referencing.crs.ImageCRS
SC_ProjectedCRS=org.opengis.referencing.crs.ProjectedCRS
-SC_SingleCRS=org.opengis.referencing.crs.SingleCRS
SC_TemporalCRS=org.opengis.referencing.crs.TemporalCRS
SC_VerticalCRS=org.opengis.referencing.crs.VerticalCRS
SV_CoupledResource=org.opengis.metadata.identification.CoupledResource
@@ -245,3 +244,4 @@ SV_OperationChainMetadata=org.opengis.metadata.identification.OperationChainMeta
SV_OperationMetadata=org.opengis.metadata.identification.OperationMetadata
SV_ParameterDirection=org.opengis.parameter.ParameterDirection
SV_ServiceIdentification=org.opengis.metadata.identification.ServiceIdentification
+SingleCRS=org.opengis.referencing.crs.SingleCRS
diff --git a/geoapi/src/shared/java/org/opengis/geoapi/NameSpaces.java b/geoapi/src/shared/java/org/opengis/geoapi/NameSpaces.java
index 7ec97aedd..61e0a3692 100644
--- a/geoapi/src/shared/java/org/opengis/geoapi/NameSpaces.java
+++ b/geoapi/src/shared/java/org/opengis/geoapi/NameSpaces.java
@@ -148,7 +148,8 @@ public QName name(final Class> type, final Map components;
/**
- * Creates a new mock.
+ * Creates a new mock with only single CRSs.
*
* @param components the components of this compound CRS.
*/
@@ -51,6 +51,13 @@ final class CompoundCRSMock implements CompoundCRS, Identifier {
}
}
+ /**
+ * Creates a new mock with a nested compound CRS.
+ */
+ CompoundCRSMock(final CoordinateSystemMock head, final CompoundCRSMock tail) {
+ components = List.of(head, tail);
+ }
+
/**
* {@return a dummy name for this compound CRS}.
*/
diff --git a/geoapi/src/test/java/org/opengis/referencing/crs/CompoundCRSTest.java b/geoapi/src/test/java/org/opengis/referencing/crs/CompoundCRSTest.java
index 75ed14230..c0f767c83 100644
--- a/geoapi/src/test/java/org/opengis/referencing/crs/CompoundCRSTest.java
+++ b/geoapi/src/test/java/org/opengis/referencing/crs/CompoundCRSTest.java
@@ -17,6 +17,7 @@
*/
package org.opengis.referencing.crs;
+import java.util.List;
import org.opengis.referencing.cs.CoordinateSystem;
import org.junit.jupiter.api.Test;
@@ -48,8 +49,8 @@ public void testCoordinateSystem() {
new CoordinateSystemMock(2, 2, 3));
final CoordinateSystem cs = crs.getCoordinateSystem();
- verifyAxes(cs, "Coordinate system of " + CompoundCRSMock.NAME,
- "x0:0", "x0:1", "x1:2", "x2:3", "x2:4");
+ assertTrue(cs.getName().getCode().startsWith("Coordinate system of " + CompoundCRSMock.NAME));
+ verifyAxes(cs, "x0:0", "x0:1", "x1:2", "x2:3", "x2:4");
String message = assertThrows(IndexOutOfBoundsException.class, () -> cs.getAxis(6)).getMessage();
assertTrue(message.contains("6"));
@@ -58,15 +59,31 @@ public void testCoordinateSystem() {
assertTrue(message.contains("-1"));
}
+ /**
+ * Tests {@link CompoundCRS#getSingleComponents()}.
+ */
+ @Test
+ public void testGetSingleComponents() {
+ final CompoundCRS crs = new CompoundCRSMock(
+ new CoordinateSystemMock(0, 2, 0),
+ new CompoundCRSMock(
+ new CoordinateSystemMock(1, 1, 2),
+ new CoordinateSystemMock(2, 2, 3)));
+
+ List components = crs.getSingleComponents();
+ assertEquals(3, components.size());
+ verifyAxes(components.get(0).getCoordinateSystem(), "x0:0", "x0:1");
+ verifyAxes(components.get(1).getCoordinateSystem(), "x1:2");
+ verifyAxes(components.get(2).getCoordinateSystem(), "x2:3", "x2:4");
+ }
+
/**
* Verifies that the given coordinate system has the expected axes.
*
* @param cs the coordinate system to validate.
- * @param name the expected coordinate system name.
* @param axes the expected coordinate system axes (identified by abbreviations).
*/
- private static void verifyAxes(final CoordinateSystem cs, final String name, final String... axes) {
- assertTrue(cs.getName().getCode().startsWith(name));
+ private static void verifyAxes(final CoordinateSystem cs, final String... axes) {
assertEquals(axes.length, cs.getDimension());
for (int i=0; i
Date: Wed, 20 Mar 2024 17:21:33 +0100
Subject: [PATCH 04/20] Partial upgrade to ISO 19111:2019 for interfaces in the
`org.opengis.referencing.crs` package. Start the upgrade of interfaces in the
`org.opengis.referencing.cs` package.
---
.../org/opengis/test/ToleranceModifier.java | 4 +-
.../test/referencing/CRSValidator.java | 2 +-
.../opengis/annotation/ResourceBundles.java | 2 +-
.../metadata/extent/VerticalExtent.java | 2 +-
.../opengis/referencing/AuthorityFactory.java | 4 +-
.../referencing/crs/CRSAuthorityFactory.java | 2 +-
.../opengis/referencing/crs/CRSFactory.java | 2 +-
.../opengis/referencing/crs/CompoundCRS.java | 13 ++--
.../opengis/referencing/crs/CompoundCS.java | 12 +++-
.../opengis/referencing/crs/DerivedCRS.java | 65 ++++++++++++-------
.../referencing/crs/EngineeringCRS.java | 38 +++++++++--
.../referencing/crs/GeocentricCRS.java | 22 +++----
.../opengis/referencing/crs/GeodeticCRS.java | 38 +++++++++--
.../referencing/crs/GeographicCRS.java | 25 +++----
.../referencing/crs/ParametricCRS.java | 43 +++++++++---
.../opengis/referencing/crs/ProjectedCRS.java | 43 +++++++++---
.../opengis/referencing/crs/SingleCRS.java | 44 +++++++++++--
.../opengis/referencing/crs/TemporalCRS.java | 37 +++++++++--
.../opengis/referencing/crs/VerticalCRS.java | 39 +++++++++--
.../referencing/cs/CSAuthorityFactory.java | 2 +-
.../opengis/referencing/cs/package-info.java | 21 +++---
.../org/opengis/referencing/datum/Datum.java | 3 +-
.../datum/DatumAuthorityFactory.java | 2 +-
.../referencing/datum/DatumEnsemble.java | 38 +++++++++++
.../CoordinateOperationAuthorityFactory.java | 5 +-
.../opengis/annotation/class-index.properties | 16 +++--
.../java/org/opengis/geoapi/Content.java | 1 +
.../java/org/opengis/geoapi/NameSpaces.java | 1 +
.../opengis/geoapi/MethodSignatureTest.java | 2 +-
.../referencing/crs/CompoundCRSTest.java | 4 +-
30 files changed, 393 insertions(+), 139 deletions(-)
create mode 100644 geoapi/src/main/java/org/opengis/referencing/datum/DatumEnsemble.java
diff --git a/geoapi-conformance/src/main/java/org/opengis/test/ToleranceModifier.java b/geoapi-conformance/src/main/java/org/opengis/test/ToleranceModifier.java
index 045e8d95f..866a38d58 100644
--- a/geoapi-conformance/src/main/java/org/opengis/test/ToleranceModifier.java
+++ b/geoapi-conformance/src/main/java/org/opengis/test/ToleranceModifier.java
@@ -64,7 +64,7 @@ public interface ToleranceModifier {
* geographic coordinates. This modifier is identical to the {@link #GEOGRAPHIC} tolerance
* modifier, except that φ and λ axes are interchanged. This is the most common
* modifier used when testing {@link GeographicCRS} instances created from the
- * EPSG database.
+ * EPSG geodetic registry.
*
* @see ToleranceModifiers#geographic(int, int)
*/
@@ -88,7 +88,7 @@ public interface ToleranceModifier {
* the result of an reverse projection. This modifier is identical to the
* {@link #PROJECTION} tolerance modifier, except that φ and λ axes are
* interchanged. This is the most common modifier used when testing {@link ProjectedCRS}
- * instances created from the EPSG database.
+ * instances created from the EPSG geodetic registry.
*
* @see ToleranceModifiers#projection(int, int)
*/
diff --git a/geoapi-conformance/src/main/java/org/opengis/test/referencing/CRSValidator.java b/geoapi-conformance/src/main/java/org/opengis/test/referencing/CRSValidator.java
index b2d34fd62..12bdfd229 100644
--- a/geoapi-conformance/src/main/java/org/opengis/test/referencing/CRSValidator.java
+++ b/geoapi-conformance/src/main/java/org/opengis/test/referencing/CRSValidator.java
@@ -431,7 +431,7 @@ public void validate(final CompoundCRS object) {
/*
* Verify the components again, but without nested compound CRS.
*/
- final List singles = object.getSingleComponents();
+ final List singles = object.getFlattenedComponents();
mandatory("CompoundCRS: shall have components.", singles);
if (singles != null) {
int dimension = 0;
diff --git a/geoapi/src/main/java/org/opengis/annotation/ResourceBundles.java b/geoapi/src/main/java/org/opengis/annotation/ResourceBundles.java
index 72abc1c2f..a056cf303 100644
--- a/geoapi/src/main/java/org/opengis/annotation/ResourceBundles.java
+++ b/geoapi/src/main/java/org/opengis/annotation/ResourceBundles.java
@@ -143,5 +143,5 @@ public static Properties classIndex() throws IOException {
/**
* Number of lines in the {@code "class-index.properties"} file.
*/
- static final int INDEX_CAPACITY = 247;
+ static final int INDEX_CAPACITY = 249;
}
diff --git a/geoapi/src/main/java/org/opengis/metadata/extent/VerticalExtent.java b/geoapi/src/main/java/org/opengis/metadata/extent/VerticalExtent.java
index 7e5387d1f..2b35cddc3 100644
--- a/geoapi/src/main/java/org/opengis/metadata/extent/VerticalExtent.java
+++ b/geoapi/src/main/java/org/opengis/metadata/extent/VerticalExtent.java
@@ -31,7 +31,7 @@
* ISO 19115 provides two ways to define a coordinate reference system,
* with the restriction that only one of those two ways can be used:
*
- * - {@code verticalCRS} of type {@code SC_VerticalCRS} (from ISO 19111),
+ * - {@code verticalCRS} of type {@code VerticalCRS} (from ISO 19111),
* - {@code verticalCRSId} of type {@code MD_ReferenceSystem} (from ISO 19115).
*
* GeoAPI provides only the first way, because the {@code MD_ReferenceSystem} type
diff --git a/geoapi/src/main/java/org/opengis/referencing/AuthorityFactory.java b/geoapi/src/main/java/org/opengis/referencing/AuthorityFactory.java
index e10be77bb..6416560ac 100644
--- a/geoapi/src/main/java/org/opengis/referencing/AuthorityFactory.java
+++ b/geoapi/src/main/java/org/opengis/referencing/AuthorityFactory.java
@@ -35,8 +35,8 @@
* An authority is an organization that maintains definitions of authority codes.
* An authority code is a compact string defined by an authority to reference a particular referencing object.
*
- * For example, the European Petroleum Survey Group (EPSG) maintains a database
- * of coordinate reference systems, and other spatial referencing objects, where each object has a code number ID.
+ *
For example, the EPSG geodetic registry is a database of coordinate
+ * reference systems, and other spatial referencing objects, where each object has a code number ID.
* For example, the EPSG code for a WGS84 Lat/Lon
CRS is 4326
.
*
* @author OGC Topic 2 (for abstract model and documentation)
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/CRSAuthorityFactory.java b/geoapi/src/main/java/org/opengis/referencing/crs/CRSAuthorityFactory.java
index af7a8271b..d23eafc3f 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/CRSAuthorityFactory.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/CRSAuthorityFactory.java
@@ -31,7 +31,7 @@
* Creates coordinate reference systems using authority codes.
* External authorities are used to manage definitions of objects used in this interface.
* The definitions of these objects are referenced using code strings.
- * A commonly used authority is EPSG.
+ * A commonly used authority is the EPSG geodetic registry.
*
* Default methods
* All {@code create(…)} methods in this interface are optional.
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/CRSFactory.java b/geoapi/src/main/java/org/opengis/referencing/crs/CRSFactory.java
index 7b92b98fa..98af4f8b8 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/CRSFactory.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/CRSFactory.java
@@ -34,7 +34,7 @@
/**
* Builds up complex Coordinate Reference Systems from simpler objects or values.
* {@code CRSFactory} allows applications to make
- * {@linkplain CoordinateReferenceSystem Coordinate Reference Systems}
+ * {@linkplain CoordinateReferenceSystem Coordinate Reference Systems} (CRS)
* that cannot be created by a {@link CRSAuthorityFactory}.
* This factory is very flexible, whereas the authority factory is easier to use.
* So {@link CRSAuthorityFactory} can be used to make "standard" coordinate reference systems,
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCRS.java
index dfd0a8983..2709e7f64 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCRS.java
@@ -31,9 +31,12 @@
/**
* A CRS describing the position of points through two or more independent CRSs.
- * For spatial coordinates, a number of constraints exist for the construction of Compound CRSs.
+ * Two CRSs are independent of each other if coordinate values in one cannot be converted or
+ * transformed into coordinate values in the other.
+ *
+ * For spatial coordinates, a number of constraints exist for the construction of compound CRSs.
* For example, the CRSs that are combined should not contain any duplicate or redundant axes.
- * Valid combinations include (non-exhaustive list):
+ * Valid combinations include (non-exhaustive list):
*
*
* - Geographic 2D + Vertical
@@ -61,7 +64,7 @@ public interface CompoundCRS extends CoordinateReferenceSystem {
/**
* Returns the ordered list of CRS components.
* The returned list may contain nested compound CRS.
- * For a list without nesting, as required by ISO 19111, see {@link #getSingleComponents()}.
+ * For a list without nesting, as required by ISO 19111, see {@link #getFlattenedComponents()}.
*
* Why nested compound CRS
* The use of nested compound CRSs can avoid metadata lost when a temporal CRS
@@ -77,7 +80,7 @@ public interface CompoundCRS extends CoordinateReferenceSystem {
*
* @departure generalization
* Added as an alternative to the association defined by ISO 19111 for resolving the problem of metadata lost.
- * The ISO 19111 requirement is still available as the {@link #getSingleComponents()} method.
+ * The ISO 19111 requirement is still available as the {@link #getFlattenedComponents()} method.
*/
List getComponents();
@@ -91,7 +94,7 @@ public interface CompoundCRS extends CoordinateReferenceSystem {
* @since 3.1
*/
@UML(identifier="componentReferenceSystem", obligation=MANDATORY, specification=ISO_19111)
- default List getSingleComponents() {
+ default List getFlattenedComponents() {
var singles = new ArrayList(5);
flatten(singles, new LinkedList<>()); // Linked list is cheap to construct and efficient with 0 or 1 element.
return Collections.unmodifiableList(singles);
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCS.java b/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCS.java
index 3893f3558..d4222d46c 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/CompoundCS.java
@@ -17,6 +17,7 @@
*/
package org.opengis.referencing.crs;
+import java.io.Serializable;
import org.opengis.metadata.Identifier;
import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.referencing.cs.CoordinateSystemAxis;
@@ -32,14 +33,23 @@
* Implementers should override {@link CompoundCRS#getCoordinateSystem()} with their own implementation
* for better performances or other characteristics such as WKT support.
*
+ * Serialization
+ * Instances of this class are serializable if the wrapped CRS implementation is also serializable.
+ *
* @author Martin Desruisseaux (Geomatys)
* @version 3.1
* @since 3.1
*/
-final class CompoundCS implements CoordinateSystem, Identifier {
+final class CompoundCS implements CoordinateSystem, Identifier, Serializable {
+ /**
+ * For cross-version compatibility.
+ */
+ private static final long serialVersionUID = 3782889810638117329L;
+
/**
* The CRS provided by the implementer.
*/
+ @SuppressWarnings("serial") // Whether the CRS is serializable is implementor's decision.
private final CompoundCRS crs;
/**
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/DerivedCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/DerivedCRS.java
index 5022a63c4..53d97bd6a 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/DerivedCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/DerivedCRS.java
@@ -19,6 +19,7 @@
import java.util.Map;
import org.opengis.referencing.datum.Datum;
+import org.opengis.referencing.datum.DatumEnsemble;
import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.referencing.operation.Conversion;
import org.opengis.annotation.UML;
@@ -34,7 +35,7 @@
* provided that the conditions in the right column are met:
*
*
- * Derived CRS types
+ * Derived CRS types
* Type | Conditions |
* {@link ProjectedCRS} | Base CRS is a {@link GeographicCRS} and conversion is a map projection. |
* {@link GeodeticCRS} | Base CRS is also a {@code GeodeticCRS}. |
@@ -43,22 +44,16 @@
* {@link EngineeringCRS} | Base CRS is a {@code GeodeticCRS}, {@code ProjectedCRS} or {@code EngineeringCRS}. |
*
*
+ * Projected CRS
* In the special case where the CRS is derived from a base {@link GeographicCRS} by applying
* a coordinate conversion known as a map projection to latitude and longitude ellipsoidal coordinate values,
* the {@link ProjectedCRS} subtype should be used. Projected CRSs are modeled as a special case
* of derived CRS because of their importance in geographic information.
*
- * @departure integration
- * ISO 19111 defines a {@code SC_DerivedCRSType} code list with the following values:
- * {@code geodetic}, {@code vertical}, {@code engineering} and {@code image}.
- * But ISO 19162 takes a slightly different approach without such code list.
- * Instead, ISO 19162 writes the derived CRS using the WKT keyword of the corresponding CRS type
- * ({@code “GeodCRS”}, {@code “VertCRS”}, {@code “TimeCRS”} or {@code “EngCRS”}).
- * GeoAPI follows a similar path by not providing a {@code DerivedCRSType} code list.
- * Instead, we recommend to implement the corresponding interface as documented in the above table.
- * Then, Java expressions like {@code (baseCRS instanceof FooCRS)} provides the same capability
- * than the code list with more flexibility. For example, it allows to use a derived CRS of type “vertical”
- * with API expecting an instance of {@code VerticalCRS}.
+ * Derived projected CRS
+ * In the special case where the CRS is derived from a base {@link ProjectedCRS},
+ * the coordinate system of the derived CRS is not necessarily Cartesian.
+ * But the derived CRS still inherit the distortion characteristics of the base projected CRS.
*
* @author OGC Topic 2 (for abstract model and documentation)
* @author Martin Desruisseaux (IRD, Geomatys)
@@ -69,39 +64,61 @@
* @see CRSFactory#createDerivedCRS(Map, CoordinateReferenceSystem, Conversion, CoordinateSystem)
*/
@SuppressWarnings("removal")
-@UML(identifier="SC_DerivedCRS", specification=ISO_19111, version=2007)
+@UML(identifier="DerivedCRS", specification=ISO_19111, version=2007)
public interface DerivedCRS extends GeneralDerivedCRS {
/**
- * Returns the base coordinate reference system.
+ * Returns the CRS that is the base for this derived CRS.
+ * This is the {@linkplain Conversion#getSourceCRS() source CRS}
+ * of the {@linkplain #getConversionFromBase() deriving conversion}.
*
- * @return the base coordinate reference system.
+ * @return the CRS that is the base for this derived CRS.
*/
@Override
@UML(identifier="baseCRS", obligation=MANDATORY, specification=ISO_19111)
SingleCRS getBaseCRS();
/**
- * Returns the conversion from the base CRS to this CRS.
+ * Returns the conversion from the base CRS to this derived CRS.
+ * The source CRS of the conversion, if non null, shall be the {@linkplain #getBaseCRS() base CRS}.
+ * The target CRS of the conversion, if non-null, shall be this CRS.
*
- * @return the conversion from the base CRS.
+ * @return the conversion from the base CRS to this derived CRS.
*
* @departure rename
- * "{@code conversion}" may be confusing as a method name
- * since it does not indicate which CRS is the source or which is the target.
- * The OGC 01-009 specification used the {@code toBase()} method name.
- * By analogy with 01-009, GeoAPI defines a method name which contains the "{@code FromBase}" expression.
+ * Was {@code toBase} in OGC 01-009, {@code conversion} in ISO 19111:2007
+ * and {@code derivingConversion} in ISO 19111:2019. By analogy with 01-009,
+ * GeoAPI defines a method name which contains the "{@code FromBase}" words
+ * for making clear which CRS is the source or which one is the target.
*/
@Override
- @UML(identifier="conversion", obligation=MANDATORY, specification=ISO_19111)
+ @UML(identifier="derivingConversion", obligation=MANDATORY, specification=ISO_19111)
Conversion getConversionFromBase();
/**
- * Returns the same datum as the base CRS datum.
+ * Returns the same datum as the base CRS.
+ * This property may be null if the base CRS is related to an object
+ * identified only by a {@linkplain #getDatumEnsemble() datum ensemble}.
*
- * @return the datum of this derived CRS, which is the {@linkplain #getBaseCRS() base CRS} datum.
+ * @return the datum of the base CRS, or {@code null} if the base is related to
+ * an object identified only by a {@linkplain #getDatumEnsemble() datum ensemble}.
*/
@Override
default Datum getDatum() {
return getBaseCRS().getDatum();
}
+
+ /**
+ * Returns the same datum ensemble as the base CRS.
+ * This property may be null if the base CRS is related to an object
+ * identified only by a single {@linkplain #getDatum() datum}.
+ *
+ * @return the datum ensemble of the base CRS, or {@code null} if the base is
+ * related to an object identified only by a single {@linkplain #getDatum() datum}.
+ *
+ * @since 3.1
+ */
+ @Override
+ default DatumEnsemble> getDatumEnsemble() {
+ return getBaseCRS().getDatumEnsemble();
+ }
}
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/EngineeringCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/EngineeringCRS.java
index 8fd3e6974..f8955941b 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/EngineeringCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/EngineeringCRS.java
@@ -24,6 +24,7 @@
import static org.opengis.annotation.Obligation.*;
import static org.opengis.annotation.Specification.*;
+import org.opengis.referencing.datum.DatumEnsemble;
/**
@@ -46,29 +47,56 @@
* Transformation of coordinates from these moving engineering CRSs to planet-referenced
* CRSs involves time-dependent coordinate operation parameters.
*
- * This type of CRS can be used with coordinate systems of type
+ *
Permitted coordinate systems
+ * This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.AffineCS},
* {@link org.opengis.referencing.cs.CartesianCS},
* {@link org.opengis.referencing.cs.CylindricalCS},
* {@link org.opengis.referencing.cs.LinearCS},
* {@link org.opengis.referencing.cs.PolarCS},
* {@link org.opengis.referencing.cs.SphericalCS},
- * {@link org.opengis.referencing.cs.UserDefinedCS}.
+ * {@link org.opengis.referencing.cs.UserDefinedCS}.
*
* @author OGC Topic 2 (for abstract model and documentation)
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 3.0
+ * @version 3.1
* @since 1.0
*
* @see CRSAuthorityFactory#createEngineeringCRS(String)
* @see CRSFactory#createEngineeringCRS(Map, EngineeringDatum, CoordinateSystem)
*/
-@UML(identifier="SC_EngineeringCRS", specification=ISO_19111, version=2007)
+@UML(identifier="EngineeringCRS", specification=ISO_19111, version=2007)
public interface EngineeringCRS extends SingleCRS {
/**
* Returns the datum, which shall be an engineering one.
+ * This property may be null if this CRS is related to an object
+ * identified only by a {@linkplain #getDatumEnsemble() datum ensemble}.
+ *
+ * @return the engineering datum, or {@code null} if this CRS is related to
+ * an object identified only by a {@linkplain #getDatumEnsemble() datum ensemble}.
+ *
+ * @condition Mandatory if the {@linkplain #getDatumEnsemble() datum ensemble} is not documented.
*/
@Override
- @UML(identifier="datum", obligation=MANDATORY, specification=ISO_19111)
+ @UML(identifier="datum", obligation=CONDITIONAL, specification=ISO_19111)
EngineeringDatum getDatum();
+
+ /**
+ * Returns the datum ensemble, which shall have engineering datum members.
+ * This property may be null if this CRS is related to an object
+ * identified only by a single {@linkplain #getDatum() datum}.
+ *
+ * The default implementation returns {@code null}.
+ *
+ * @return the datum ensemble, or {@code null} if this CRS is related
+ * to an object identified only by a single {@linkplain #getDatum() datum}.
+ *
+ * @condition Mandatory if the {@linkplain #getDatum() datum} is not documented.
+ * @since 3.1
+ */
+ @Override
+ @UML(identifier="datum", obligation=CONDITIONAL, specification=ISO_19111)
+ default DatumEnsemble getDatumEnsemble() {
+ return null;
+ }
}
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java
index 039fc3e35..64dfacd63 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/GeocentricCRS.java
@@ -30,28 +30,28 @@
/**
* A 3-dimensional CRS with the origin at the approximate centre of mass of the earth.
- * A geocentric CRS deals with the earth's curvature by taking a 3-dimensional spatial view, which obviates
- * the need to model the earth's curvature.
+ * A geocentric CRS deals with the earth's curvature by taking a 3-dimensional spatial view, which
+ * obviates the need to model the earth's curvature.
*
- * This type of CRS can be used with coordinate systems of type
+ *
Permitted coordinate systems
+ * This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.CartesianCS Cartesian} or
- * {@link org.opengis.referencing.cs.SphericalCS Spherical}.
- *
- * @departure historic
- * This interface is kept conformant with the specification published in 2003. The 2007 revision
- * of ISO 19111 removed the {@code SC_GeographicCRS} and {@code SC_GeocentricCRS} types,
- * handling both using the {@code SC_GeodeticCRS} parent type.
- * GeoAPI keeps them since the distinction between those two types is in wide use.
+ * {@link org.opengis.referencing.cs.SphericalCS Spherical}.
*
* @author OGC Topic 2 (for abstract model and documentation)
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 3.0
+ * @version 3.1
* @since 1.0
*
* @see CRSAuthorityFactory#createGeocentricCRS(String)
* @see CRSFactory#createGeocentricCRS(Map, GeodeticDatum, CartesianCS)
* @see CRSFactory#createGeographicCRS(Map, GeodeticDatum, EllipsoidalCS)
+ *
+ * @deprecated This type was defined in 2003 but removed in 2007.
+ * The ISO 19111 revision published in 2019 still excludes this type.
+ * The {@link GeodeticCRS} base type should be used instead.
*/
+@Deprecated(since="3.1", forRemoval=true)
@UML(identifier="SC_GeocentricCRS", specification=ISO_19111, version=2003)
public interface GeocentricCRS extends GeodeticCRS {
/**
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java
index 8b06966dd..e93dcfd62 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/GeodeticCRS.java
@@ -17,6 +17,7 @@
*/
package org.opengis.referencing.crs;
+import org.opengis.referencing.datum.DatumEnsemble;
import org.opengis.referencing.datum.GeodeticDatum;
import org.opengis.annotation.UML;
@@ -26,7 +27,10 @@
/**
* A 2- or 3-dimensional CRS used over the whole planet or substantial parts of it.
- * This type of CRS can be used with coordinate systems of type
+ * If the geodetic reference frame is dynamic then the geodetic CRS is dynamic, else it is static.
+ *
+ * Permitted coordinate systems
+ * This type of CRS can be used with coordinate systems of type
* {@link org.opengis.referencing.cs.CartesianCS},
* {@link org.opengis.referencing.cs.SphericalCS} or
* {@link org.opengis.referencing.cs.EllipsoidalCS}.
@@ -37,12 +41,38 @@
* @version 3.1
* @since 2.1
*/
-@UML(identifier="SC_GeodeticCRS", specification=ISO_19111, version=2007)
+@UML(identifier="GeodeticCRS", specification=ISO_19111)
public interface GeodeticCRS extends SingleCRS {
/**
- * Returns the datum, which shall be geodetic.
+ * Returns the reference frame, which shall be geodetic.
+ * This property may be null if this CRS is related to an object
+ * identified only by a {@linkplain #getDatumEnsemble() datum ensemble}.
+ *
+ * @return the reference frame, or {@code null} if this CRS is related to
+ * an object identified only by a {@linkplain #getDatumEnsemble() datum ensemble}.
+ *
+ * @condition Mandatory if the {@linkplain #getDatumEnsemble() datum ensemble} is not documented.
*/
@Override
- @UML(identifier="datum", obligation=MANDATORY, specification=ISO_19111)
+ @UML(identifier="datum", obligation=CONDITIONAL, specification=ISO_19111)
GeodeticDatum getDatum();
+
+ /**
+ * Returns the datum ensemble, which shall have geodetic datum members.
+ * This property may be null if this CRS is related to an object
+ * identified only by a single {@linkplain #getDatum() datum}.
+ *
+ * The default implementation returns {@code null}.
+ *
+ * @return the datum ensemble, or {@code null} if this CRS is related
+ * to an object identified only by a single {@linkplain #getDatum() datum}.
+ *
+ * @condition Mandatory if the {@linkplain #getDatum() datum} is not documented.
+ * @since 3.1
+ */
+ @Override
+ @UML(identifier="datum", obligation=CONDITIONAL, specification=ISO_19111)
+ default DatumEnsemble getDatumEnsemble() {
+ return null;
+ }
}
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java
index a48de9b27..1590d7d63 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/GeographicCRS.java
@@ -19,6 +19,7 @@
import java.util.Map;
import org.opengis.referencing.cs.EllipsoidalCS;
+import org.opengis.referencing.datum.Ellipsoid;
import org.opengis.referencing.datum.GeodeticDatum;
import org.opengis.annotation.UML;
@@ -35,33 +36,23 @@
* A geographic CRS is not suitable for mapmaking on a planar surface,
* because it describes geometry on a curved surface.
* It is impossible to represent such geometry in a Euclidean plane without introducing distortions.
- * The need to control these distortions has given rise to the development of the science of
- * {@linkplain org.opengis.referencing.operation.Projection map projections}.
+ * The need to control these distortions has given rise to the development of {@link ProjectedCRS}s.
*
- * This type of CRS can be used with coordinate systems of type
- * {@link org.opengis.referencing.cs.EllipsoidalCS}.
+ * The {@link GeodeticDatum} associated to this CRS must have an {@link Ellipsoid}.
+ * I.e., the ellipsoid is generally optional but become mandatory in the context of {@code GeographicCRS}.
*
- * @departure constraint
- * This interface is kept conformant with the specification published in 2003. The 2007 revision
- * of ISO 19111 removed the {@code SC_GeographicCRS} and {@code SC_GeocentricCRS} types,
- * handling both using the {@code SC_GeodeticCRS} parent type. GeoAPI keeps them for two reasons:
- *
- * - The distinction between those two types is in wide use.
- * - A distinct geographic type allows GeoAPI to restrict the coordinate system type to {@code EllipsoidalCS}.
- * ISO 19111 uses a {@code union} for expressing this restriction at the {@code SC_GeodeticCRS} level, but
- * the Java language does not provide such construct. A distinct geographic type is one way to achieve the
- * same goal.
- *
+ * Permitted coordinate systems
+ * This type of CRS can be used with coordinate systems of type {@link EllipsoidalCS} only.
*
* @author OGC Topic 2 (for abstract model and documentation)
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 3.0
+ * @version 3.1
* @since 1.0
*
* @see CRSAuthorityFactory#createGeographicCRS(String)
* @see CRSFactory#createGeographicCRS(Map, GeodeticDatum, EllipsoidalCS)
*/
-@UML(identifier="SC_GeographicCRS", specification=ISO_19111, version=2003)
+@UML(identifier="GeographicCRS", specification=ISO_19111)
public interface GeographicCRS extends GeodeticCRS {
/**
* Returns the coordinate system, which shall be ellipsoidal.
diff --git a/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java b/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java
index dc3993cde..545c438b5 100644
--- a/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java
+++ b/geoapi/src/main/java/org/opengis/referencing/crs/ParametricCRS.java
@@ -19,16 +19,17 @@
import java.util.Map;
import org.opengis.referencing.cs.ParametricCS;
+import org.opengis.referencing.datum.DatumEnsemble;
import org.opengis.referencing.datum.ParametricDatum;
import org.opengis.annotation.UML;
-import static org.opengis.annotation.Obligation.MANDATORY;
-import static org.opengis.annotation.Specification.ISO_19111_2;
+import static org.opengis.annotation.Obligation.*;
+import static org.opengis.annotation.Specification.ISO_19111;
/**
* A 1-dimensional CRS which uses parameter values or functions.
- * A coordinate reference system shall be of the parametric type if a physical or material
+ * A CRS shall be of the parametric type if a physical or material
* property or function is used as the dimension.
* The values or functions can vary monotonically with height.
*
@@ -37,18 +38,19 @@
* density (isopycnals) in oceanographic applications.
*
*
- * This type of CRS can be used with coordinate systems of type
- * {@link org.opengis.referencing.cs.ParametricCS}.
+ * The default implementation returns {@code null}.
+ *
+ * @return the datum ensemble, or {@code null} if this