ISO 19111:2007 introduced a new interface:
GeodeticCS, which should be the parent interface of
CartesianCS,
EllipsoidalCS and
SphericalCS. Once this interface is added, two incompatible changes are needed:
- The value returned by GeodeticCRS.getCoordinateSystem() needs to be restricted to GeodeticCS type.
- The CRSFactory.createGeocentricCRS method needs to restrict its cs argument to the GeodeticCS type.
ISO 19111:2007 defines also an
EngineeringCS union, which is basically the union of every coordinate system excluding the
EllipsoidalCS. We can not set
Engineering as the parent interface of
CartesianCS (for example) since it would not be accurate to state that the
CartesianCS used by a
ProjectedCRS is a special kind of
EnginneringCS.
Note that ISO 19111:2007 adds also an
ImageCS union, which is not needed if we accept to define
CartesianCS as a special case of
AffineCS like GeoAPI does. We can not set
imageCS as the parent interface since it would not make sense to said that the
CartesianCS used by a
ProjectedCRS is a special kind of
imageCS.
Actually the arguments raised in the description against ImageCS and EngineeringCS could also be applied on GeodeticCS: the CartesianCS used by an EngineeringCRS can not be qualified as a special kind of GeodeticCS.
Note that in ISO 19111:2007, all those new constructs are union, not type. Union is a C/C++ concept without direct equivalence in Java.
We may need to close this issue as "will not fix".