Difference between CoordinateSystem and CoordinateReferenceSystem

What is the concept of Coordinate Reference System. You know GeoTools has a FeatureType class having getCoordinateReferenceSystem() function and also a CoordinateReferenceSystem class having getCoordinateSystem().

I want to know what is the difference and what is the key point.

• Is a CoordinateSystem part of a CoordinateReferenceSystem ?
• Does a Vector layer have a CRS or CS ?
• Where can I find full tutorial of Coordinate Reference System?

A Coordinate Reference System contains two different elements

1. The datum: It defines how the CRS is related to the earth (position of the origin, the scale and the orientation of coordinate axis) e.g. ED50, ETRS89. The datum can be a geodetic datum, a vertical datum or a engineering / local datum.
2. The coordinate system: describes how the coordinates expressed in the datum e.g. as cartesian coordinates, ellipsoidal coordinates or coordinates of a map projection e.g. UTM. The coordinate system is the mathematical part of Coordinate Reference System is a set of rules e.g. projection equations for specifying how the coordinates are to be assigned to the points. The horizontal and vertical components of the description of a position in the space may sometimes come from different Coordinate Reference Systems. This shall be handled by a compound Coordinate Reference System (CCRS). The compound Coordinate Reference System describes the position by two independent Coordinate Reference Systems. An European spatial reference system could be described as a compound Coordinate Reference System. An example is shown in the figure.

CoordinateReferenceSystem is the base Interface from which all other GeoTools SRS are derived from - it is the base class of Geocentric and Geographic projections (and others with vertical and temporal coordinates). It comes from the ISO19111 specification by way of the OGC GeoAPI project.

CoordinateSystem is also an interface that comes from ISO19111 and deals more with axis, datum and unit definition in the projection.

The fact we have two interfaces for this comes from Java not supporting multiple Inheritance while XSD does (I think, this was all written many years ago and the developer has since left the project).

In general you want to deal with CoordinateReferenceSystems and in most cases the utility class CRS is there to help you. A good place to look for more detail is the referencing chapter of the user guide.

For your final question - layers don't really have either but you can do

layer.getBounds().getCoordinateReferenceSystem();

To get a CoordinateReferenceSystem if you need to really know.