001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2003-2006, GeoTools Project Managment Committee (PMC)
005: * (C) 2001, Institut de Recherche pour le Développement
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation;
010: * version 2.1 of the License.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * This package contains documentation from OpenGIS specifications.
018: * OpenGIS consortium's work is fully acknowledged here.
019: */
020: package org.geotools.referencing.crs;
021:
022: // J2SE dependencies
023: import java.util.Collections;
024: import java.util.Map;
025:
026: // OpenGIS dependencies
027: import org.opengis.referencing.cs.VerticalCS;
028: import org.opengis.referencing.crs.VerticalCRS;
029: import org.opengis.referencing.datum.VerticalDatum;
030:
031: // Geotools dependencies
032: import org.geotools.referencing.wkt.Formatter;
033: import org.geotools.referencing.cs.DefaultVerticalCS;
034: import org.geotools.referencing.AbstractReferenceSystem;
035: import org.geotools.referencing.AbstractIdentifiedObject;
036: import org.geotools.referencing.datum.DefaultVerticalDatum;
037: import org.geotools.resources.i18n.VocabularyKeys;
038: import org.geotools.resources.i18n.Vocabulary;
039:
040: /**
041: * A 1D coordinate reference system used for recording heights or depths. Vertical CRSs make use
042: * of the direction of gravity to define the concept of height or depth, but the relationship with
043: * gravity may not be straightforward. By implication, ellipsoidal heights (h) cannot be captured
044: * in a vertical coordinate reference system. Ellipsoidal heights cannot exist independently, but
045: * only as inseparable part of a 3D coordinate tuple defined in a geographic 3D coordinate
046: * reference system.
047: *
048: * <TABLE CELLPADDING='6' BORDER='1'>
049: * <TR BGCOLOR="#EEEEFF"><TH NOWRAP>Used with CS type(s)</TH></TR>
050: * <TR><TD>
051: * {@link VerticalCS Vertical}
052: * </TD></TR></TABLE>
053: *
054: * @since 2.1
055: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/referencing/src/main/java/org/geotools/referencing/crs/DefaultVerticalCRS.java $
056: * @version $Id: DefaultVerticalCRS.java 24609 2007-02-26 23:35:53Z desruisseaux $
057: * @author Martin Desruisseaux
058: */
059: public class DefaultVerticalCRS extends AbstractSingleCRS implements
060: VerticalCRS {
061: /**
062: * Serial number for interoperability with different versions.
063: */
064: private static final long serialVersionUID = 3565878468719941800L;
065:
066: /**
067: * Default vertical coordinate reference system using ellipsoidal datum.
068: * Ellipsoidal heights are measured along the normal to the ellipsoid
069: * used in the definition of horizontal datum.
070: */
071: public static final DefaultVerticalCRS ELLIPSOIDAL_HEIGHT = new DefaultVerticalCRS(
072: name(VocabularyKeys.ELLIPSOIDAL_HEIGHT),
073: DefaultVerticalDatum.ELLIPSOIDAL,
074: DefaultVerticalCS.ELLIPSOIDAL_HEIGHT);
075:
076: /**
077: * Constructs a new vertical CRS with the same values than the specified one.
078: * This copy constructor provides a way to wrap an arbitrary implementation into a
079: * Geotools one or a user-defined one (as a subclass), usually in order to leverage
080: * some implementation-specific API. This constructor performs a shallow copy,
081: * i.e. the properties are not cloned.
082: *
083: * @since 2.2
084: */
085: public DefaultVerticalCRS(final VerticalCRS crs) {
086: super (crs);
087: }
088:
089: /**
090: * Constructs a vertical CRS from a name.
091: *
092: * @param name The name.
093: * @param datum The datum.
094: * @param cs The coordinate system.
095: */
096: public DefaultVerticalCRS(final String name,
097: final VerticalDatum datum, final VerticalCS cs) {
098: this (Collections.singletonMap(NAME_KEY, name), datum, cs);
099: }
100:
101: /**
102: * Constructs a vertical CRS from a set of properties. The properties are given unchanged to
103: * the {@linkplain AbstractReferenceSystem#AbstractReferenceSystem(Map) super-class constructor}.
104: *
105: * @param properties Set of properties. Should contains at least <code>"name"</code>.
106: * @param datum The datum.
107: * @param cs The coordinate system.
108: */
109: public DefaultVerticalCRS(final Map properties,
110: final VerticalDatum datum, final VerticalCS cs) {
111: super (properties, datum, cs);
112: }
113:
114: /**
115: * Returns a hash value for this geographic CRS.
116: *
117: * @return The hash code value. This value doesn't need to be the same
118: * in past or future versions of this class.
119: */
120: public int hashCode() {
121: return (int) serialVersionUID ^ super .hashCode();
122: }
123:
124: /**
125: * Format the inner part of a
126: * <A HREF="http://geoapi.sourceforge.net/snapshot/javadoc/org/opengis/referencing/doc-files/WKT.html"><cite>Well
127: * Known Text</cite> (WKT)</A> element.
128: *
129: * @param formatter The formatter to use.
130: * @return The name of the WKT element type, which is {@code "VERT_CS"}.
131: */
132: protected String formatWKT(final Formatter formatter) {
133: formatDefaultWKT(formatter);
134: return "VERT_CS";
135: }
136: }
|