001 /*
002 * GeoAPI - Java interfaces for OGC/ISO standards
003 * http://www.geoapi.org
004 *
005 * Copyright (C) 2004-2012 Open Geospatial Consortium, Inc.
006 * All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007 *
008 * Permission to use, copy, and modify this software and its documentation, with
009 * or without modification, for any purpose and without fee or royalty is hereby
010 * granted, provided that you include the following on ALL copies of the software
011 * and documentation or portions thereof, including modifications, that you make:
012 *
013 * 1. The full text of this NOTICE in a location viewable to users of the
014 * redistributed or derivative work.
015 * 2. Notice of any changes or modifications to the OGC files, including the
016 * date changes were made.
017 *
018 * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019 * NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020 * TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021 * THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022 * PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023 *
024 * COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025 * CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026 *
027 * The name and trademarks of copyright holders may NOT be used in advertising or
028 * publicity pertaining to the software without specific, written prior permission.
029 * Title to copyright in this software and any associated documentation will at all
030 * times remain with copyright holders.
031 */
032 package org.opengis.referencing.crs;
033
034 import java.util.Map;
035 import java.util.List;
036 import org.opengis.annotation.UML;
037
038 import static org.opengis.annotation.Obligation.*;
039 import static org.opengis.annotation.Specification.*;
040
041
042 /**
043 * A coordinate reference system describing the position of points through two or more
044 * independent coordinate reference systems. Thus it is associated with two or more
045 * {@linkplain org.opengis.referencing.cs.CoordinateSystem Coordinate Systems} and
046 * {@linkplain org.opengis.referencing.datum.Datum Datums} by defining the compound CRS
047 * as an ordered set of two or more instances of {@link CoordinateReferenceSystem}.
048 * <p>
049 * In general, a Compound CRS may contain any number of axes. The Compound CRS contains an
050 * ordered set of coordinate reference systems and the tuple order of a compound coordinate
051 * set shall follow that order, while the subsets of the tuple, described by each of the
052 * composing coordinate reference systems, follow the tuple order valid for their respective
053 * coordinate reference systems.
054 * <p>
055 * For spatial coordinates, a number of constraints exist for the construction of Compound CRSs.
056 * For example, the coordinate reference systems that are combined should not contain any duplicate
057 * or redundant axes. Valid combinations include:
058 * <p>
059 * <UL>
060 * <LI>Geographic 2D + Vertical</LI>
061 * <LI>Geographic 2D + Engineering 1D (near vertical)</LI>
062 * <LI>Projected + Vertical</LI>
063 * <LI>Projected + Engineering 1D (near vertical)</LI>
064 * <LI>Engineering (horizontal 2D or 1D linear) + Vertical</LI>
065 * </UL>
066 * <p>
067 * Any coordinate reference system, or any of the above listed combinations of coordinate
068 * reference systems, can have a Temporal CRS added. More than one Temporal CRS may be added
069 * if these axes represent different time quantities. For example, the oil industry sometimes
070 * uses "4D seismic", by which is meant seismic data with the vertical axis expressed in
071 * milliseconds (signal travel time). A second time axis indicates how it changes with time
072 * (years), e.g. as a reservoir is gradually exhausted of its recoverable oil or gas).
073 *
074 * @author Martin Desruisseaux (IRD)
075 * @version 3.0
076 * @since 1.0
077 *
078 * @navassoc - - - CoordinateReferenceSystem
079 *
080 * @see CRSAuthorityFactory#createCompoundCRS(String)
081 * @see CRSFactory#createCompoundCRS(Map, CoordinateReferenceSystem[])
082 */
083 @UML(identifier="SC_CompoundCRS", specification=ISO_19111)
084 public interface CompoundCRS extends CoordinateReferenceSystem {
085 /**
086 * The ordered list of coordinate reference systems.
087 *
088 * @return The ordered list of coordinate reference systems.
089 *
090 * @departure generalization
091 * According ISO 19111, "<cite>A Compound CRS is a coordinate reference system that combines
092 * two or more coordinate reference systems, <u>none of which can itself be compound</u></cite>".
093 * However this constraint greatly increases the cost of extracting metadata (especially the CRS
094 * identifier) of the three-dimensional part of a spatio-temporal CRS. Note also that in
095 * "<u>Coordinate Transformation Services</u>" (OGC document 01-009), a compound CRS was
096 * specified as a pair of arbitrary CRS ("head" and "tail") where each could be another
097 * compound CRS, allowing the creation of a tree. GeoAPI follows that more general strategy.
098 *
099 * @since 2.3
100 */
101 @UML(identifier="componentReferenceSystem", obligation=MANDATORY, specification=ISO_19111)
102 List<CoordinateReferenceSystem> getComponents();
103 }