Coordinate Systems implementation. The {@link org.geotools.cs.CoordinateSystem} class is the base class for all coordinate systems. Coordinate systems can have an arbitrary number of dimensions. Some are two-dimensional (e.g. {@link org.geotools.cs.GeographicCoordinateSystem} and {@link org.geotools.cs.ProjectedCoordinateSystem}), while some others are one-dimensional (e.g. {@link org.geotools.cs.VerticalCoordinateSystem} and {@link org.geotools.cs.TemporalCoordinateSystem}). Those simple coordinate systems can be used as building blocks for more complex coordinate systems. For example, it is possible to construct a three-dimensional geographic coordinate system (latitude, longitude, height above the ellipsoid) with an aggregation of GeographicCoordinateSystem and VerticalCoordinateSystem. Such aggregations are built with {@link org.geotools.cs.CompoundCoordinateSystem}.

While it is possible to create coordinate systems by direct instantiation (using their public constructors), the preferred way is to use methods in the {@link org.geotools.cs.CoordinateSystemFactory} class. Public constructors are not part of OpenGIS's specification, while CoordinateSystemFactory is. Furthermore, CoordinateSystemFactory's methods can be overridden, which is useful for constructing CoordinateSystems backed by some OpenGIS compliant commercial software.