001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/model/crs/CoordinateSystem.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53177 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: klaus.greve@giub.uni-bonn.de
041:
042: ---------------------------------------------------------------------------*/
043: package org.deegree.model.crs;
044:
045: // OpenGIS dependencies
046: import java.net.URI;
047:
048: import org.deegree.crs.components.Unit;
049: import org.deegree.datatypes.QualifiedName;
050:
051: /**
052: * A coordinate system is a mathematical space, where the elements of the space are called positions. Each position is
053: * described by a list of numbers. The length of the list corresponds to the dimension of the coordinate system. So in a
054: * 2D coordinate system each position is described by a list containing 2 numbers. <br>
055: * <br>
056: * However, in a coordinate system, not all lists of numbers correspond to a position - some lists may be outside the
057: * domain of the coordinate system. For example, in a 2D Lat/Lon coordinate system, the list (91,91) does not correspond
058: * to a position. <br>
059: * <br>
060: * Some coordinate systems also have a mapping from the mathematical space into locations in the real world. So in a
061: * Lat/Lon coordinate system, the mathematical position (lat, long) corresponds to a location on the surface of the
062: * Earth. This mapping from the mathematical space into real-world locations is called a Datum.
063: *
064: * @version $Revision: 10276 $
065: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
066: * @author last edited by: $Author: rbezema $
067: *
068: * @version 1.0. $Revision: 10276 $, $Date: 2008-02-25 06:51:28 -0800 (Mon, 25 Feb 2008) $
069: *
070: * @since 2.0
071: */
072: public class CoordinateSystem extends QualifiedName {
073:
074: /**
075: *
076: */
077: private static final long serialVersionUID = -170831086069691683L;
078:
079: private org.deegree.crs.coordinatesystems.CoordinateSystem realCRS;
080:
081: private final String requestedID;
082:
083: /**
084: *
085: * @param prefix
086: * must be not null
087: * @param localName
088: * @param namespace
089: * @deprecated use {@link #CoordinateSystem(org.deegree.crs.coordinatesystems.CoordinateSystem, String)} instead
090: */
091: @Deprecated
092: CoordinateSystem(String prefix, String localName, URI namespace) {
093: super (prefix.toLowerCase(), localName, namespace);
094: requestedID = localName;
095: }
096:
097: /**
098: *
099: * @param name
100: * @param namespace
101: * @deprecated use {@link #CoordinateSystem(org.deegree.crs.coordinatesystems.CoordinateSystem, String)}
102: */
103: @Deprecated
104: CoordinateSystem(String name, URI namespace) {
105: super (name, namespace);
106: requestedID = name;
107: }
108:
109: /**
110: * e.g. epgs:4326, should not be used.
111: *
112: * @param name
113: * @deprecated use CoordinateSystem(org.deegree.crs.coordinatesystems.CoordinateSystem, String)
114: */
115: @Deprecated
116: protected CoordinateSystem(String name) {
117: super (name);
118: requestedID = name;
119: }
120:
121: /**
122: * Creates a CoordinateSystem as a wrapper to the real CRS.
123: *
124: * @param realCRS
125: */
126: CoordinateSystem(
127: org.deegree.crs.coordinatesystems.CoordinateSystem realCRS,
128: String requestedID) {
129: super (realCRS.getIdentifier());
130: this .realCRS = realCRS;
131: this .requestedID = requestedID;
132: }
133:
134: /**
135: * returns the name of the CRS, this method is actually mapped to {@link #getIdentifier()}
136: *
137: * @return the name of the CRS
138: * @deprecated use {@link #getIdentifier()} instead
139: */
140: @Deprecated
141: public String getName() {
142: return getIdentifier();
143: }
144:
145: /**
146: * This method returns the requested id (given in the constructor) and not the
147: * {@link org.deegree.crs.coordinatesystems.CoordinateSystem#getIdentifier()} which only returns the first
148: * configured id.
149: *
150: * @return the requested id.
151: */
152: public String getIdentifier() {
153: return requestedID;
154: }
155:
156: /**
157: * Since the crs uses a different namespace system as {@link QualifiedName} this method only returns the
158: * {@link #getIdentifier()}.
159: */
160: @Override
161: public String getPrefixedName() {
162: return getIdentifier();
163: }
164:
165: /**
166: * returns the CRSs code. In case of EPSG:4326 it will be 4326; in case of adv:DE_DHDN_3GK2_NW177 it will be
167: * DE_DHDN_3GK2_NW177
168: *
169: * @return the CRSs code
170: * @deprecated has no relevance, returns a bogus value.
171: */
172: @Deprecated
173: public String getCode() {
174: return getLocalName();
175: }
176:
177: /**
178: * returns the unit of the first axis of the encapsulated CRS
179: *
180: * @return the units of the first axis of the encapsulated CRS
181: * @deprecated this method returns the unit of the fist axis, assuming all axis have the same unit, which is not
182: * necessarily so. It is better to use the {@link #getAxisUnits()} and iterate over all units.
183: */
184: @Deprecated
185: public String getUnits() {
186: return realCRS.getUnits()[0].toString();
187: }
188:
189: /**
190: * @return the units of all axis.
191: */
192: public Unit[] getAxisUnits() {
193: return realCRS.getUnits();
194: }
195:
196: /**
197: * @return the dimension of the encapsulated CRS
198: */
199: public int getDimension() {
200: return realCRS.getDimension();
201: }
202:
203: /**
204: * @return the encapsulated CRS.
205: */
206: public org.deegree.crs.coordinatesystems.CoordinateSystem getCRS() {
207: return realCRS;
208: }
209:
210: @Override
211: public boolean equals(Object other) {
212: if (other != null && other instanceof CoordinateSystem) {
213: final CoordinateSystem that = (CoordinateSystem) other;
214: return this .realCRS.equals(that.realCRS);
215: }
216: return false;
217: }
218: }
|