/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
* (C) 2003-2005, Open Geospatial Consortium Inc.
*
* All Rights Reserved. http://www.opengis.org/legal/
*/
package org.opengis.referencing.crs;
import org.opengis.referencing.ReferenceSystem;
import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.annotation.UML;
import org.opengis.annotation.Extension;
import static org.opengis.annotation.Specification.*;
/**
* Abstract coordinate reference system, usually defined by a
* {@linkplain org.opengis.referencing.cs.CoordinateSystem coordinate system} and a
* {@linkplain org.opengis.referencing.datum.Datum datum}. The concept of a coordinate
* reference system (CRS) captures the choice of values for the parameters that constitute
* the degrees of freedom of the coordinate space. The fact that such a choice has to be made,
* either arbitrarily or by adopting values from survey measurements, leads to the large number
* of coordinate reference systems in use around the world. It is also the cause of the little
* understood fact that the latitude and longitude of a point are not unique. Without the full
* specification of the coordinate reference system, coordinates are ambiguous at best and
* meaningless at worst. However for some interchange purposes it is sufficient to confirm the
* {@linkplain #getName identity of the system} without necessarily having the full system
* definition.
* <p>
* The concept of coordinates may be expanded from a strictly spatial context to include time.
* Time is then added as another coordinate to the coordinate tuple. It is even possible to add
* two time-coordinates, provided the two coordinates describe different independent quantities.
* An example of the latter is the time/space position of a subsurface point of which the vertical
* coordinate is expressed as the two-way travel time of a sound signal in milliseconds, as is
* common in seismic imaging. A second time-coordinate indicates the time of observation, usually
* expressed in whole years.
*
*
* @source $URL: http://svn.osgeo.org/geotools/trunk/modules/library/opengis/src/main/java/org/opengis/referencing/crs/CoordinateReferenceSystem.java $
* @version <A HREF="http://portal.opengeospatial.org/files/?artifact_id=6716">Abstract specification 2.0</A>
* @author Martin Desruisseaux (IRD)
* @since GeoAPI 1.0
*/
@UML(identifier="SC_CRS", specification=ISO_19111)
public interface CoordinateReferenceSystem extends ReferenceSystem {
/**
* Returns a relevant coordinate system instance. Special cases:
*
* <ul>
* <li><p>If the CRS instance on which this method is invoked is an instance of the
* {@linkplain SingleCRS single CRS} interface, then the CS instance which is
* returned shall be one of the defined sub-interfaces of {@linkplain CoordinateSystem
* coordinate system}.</p></li>
*
* <li><p>If the CRS instance on which this method is invoked is an instance of the
* {@linkplain CompoundCRS compound CRS} interface, then the CS instance which is
* returned shall have dimension and axis components obtained from different
* {@linkplain CompoundCRS#getCoordinateReferenceSystems components} of the instance
* CRS.</p></li>
* </ul>
*
* @departure
* Strictly speaking, this method is defined by ISO 19111 for {@linkplain SingleCRS single CRS}
* only. GeoAPI declares this method in this parent interface for user convenience, since CS
* {@linkplain CoordinateSystem#getDimension dimension} and {@linkplain CoordinateSystem#getAxis axis}
* are commonly requested information and shall be available, directly or indirectly, in all cases
* (including {@linkplain CompoundCRS compound CRS}).
*
* @return The coordinate system.
*/
@Extension
CoordinateSystem getCoordinateSystem();
}