# Package org.opengis.referencing.cs

package org.opengis.referencing.cs
Coordinate systems and their axis. The following is adapted from OpenGISĀ® Spatial Referencing by Coordinates (Topic 2) specification.

A coordinate system shall be composed of a non-repeating sequence of coordinate system axes. One `CoordinateSystem` (CS) instance may be used by multiple CoordinateReferenceSystem (CRS) instances. The dimension of the coordinate space, the names, the units of measure, the directions and sequence of the axes shall be part of the coordinate system definition. The number of axes shall be equal to the dimension of the space of which it describes the geometry. It is therefore not permitted to supply a coordinate tuple with two heights of different definition.

The number of coordinates in a coordinate tuple shall be equal to the number of coordinate axes in the coordinate system. Coordinates in coordinate tuples shall be supplied in the order in which the coordinate system's axes are defined.

A coordinate system implies how coordinates are calculated from geometric elements such as distances and angles and vice versa. The calculus required to derive angles and distances from point coordinates and vice versa in a map plane is simple Euclidean 2D arithmetic. To do the same on the surface of an ellipsoid (curved 2D space) involves more complex ellipsoidal calculus. These rules cannot be specified in detail, but are implied in the geometric properties of the coordinate space.

## Coordinate system types and unions

Coordinate systems are divided into subtypes by the geometric properties of the coordinate space spanned and the geometric properties of the axes themselves (straight or curved; perpendicular or not). Certain subtypes of coordinate system shall be used only with specific subtypes of coordinate reference system. The restrictions are documented in the javadoc of each CRS subtype.

ISO 19111 defines three coordinate system unions in addition to the coordinate system types. Each union enumerates the coordinate system types that can be associated to a CRS type. However the `union` construct found in some languages like C/C++ is not available in Java. GeoAPI workarounds this limitation in different ways:

 Union Types in the union GeoAPI approach `GeodeticCS` `CartesianCS`, `EllipsoidalCS`, `SphericalCS` Provides a `GeographicCRS` type for the `EllipsoidalCS` case. Provides distinct `CRSFactory` methods for the `CartesianCS` and `SphericalCS` cases. `EngineeringCS` `AffineCS`, `CartesianCS`, `CylindricalCS`, `LinearCS`, `PolarCS`, `SphericalCS`, `UserDefinedCS`. No workaround in the API. Verified by the conformance tests. `ImageCS` `AffineCS`, `CartesianCS` Defines `CartesianCS` as a special case of `AffineCS`.
Since:
1.0
Departure from OGC/ISO abstract specification:
Departure due to constraint of the Java language ISO 19111 defines `GeodeticCS`, `EngineeringCS` and `ImageCS` unions. However the `union` construct found in some languages like C/C++ is not available in Java. For each union, a different approach has been applied and documented in the `org.opengis.referencing.cs` package. In the particular case of `ImageCS`, the same type-safety objective can be obtained through a slight change in the interface hierarchy.