Class DefaultVerticalDatum

All Implemented Interfaces:
Serializable, Formattable, Deprecable, LenientComparable, org.opengis.referencing.datum.Datum, org.opengis.referencing.datum.VerticalDatum, org.opengis.referencing.IdentifiedObject

public class DefaultVerticalDatum extends AbstractDatum implements org.opengis.referencing.datum.VerticalDatum
Identifies a particular reference level surface used as a zero-height surface. There are several types of vertical datums, and each may place constraints on the coordinate system axis with which it is combined to create a vertical CRS.

Creating new vertical datum instances

New instances can be created either directly by specifying all information to a factory method (choices 3 and 4 below), or indirectly by specifying the identifier of an entry in a database (choices 1 and 2 below). Choice 1 in the following list is the easiest but most restrictive way to get a vertical datum. The other choices provide more freedom.
  1. Create a VerticalDatum from one of the static convenience shortcuts listed in CommonCRS.Vertical.datum().
  2. Create a VerticalDatum from an identifier in a database by invoking DatumAuthorityFactory.createVerticalDatum(String).
  3. Create a VerticalDatum by invoking the DatumFactory.createVerticalDatum(…) method (implemented for example by GeodeticObjectFactory).
  4. Create a DefaultVerticalDatum by invoking the constructor.
Example: the following code gets a vertical datum for height above the geoid:

Immutability and thread safety

This class is immutable and thus thread-safe if the property values (not necessarily the map itself) given to the constructor are also immutable. Unless otherwise noted in the javadoc, this condition holds if all components were created using only SIS factories and static constants.
Since:
0.4
Version:
0.4
See Also:
  • Nested Class Summary

    Nested classes/interfaces inherited from class org.apache.sis.referencing.datum.AbstractDatum

    AbstractDatum.Simplifier
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final long
    Serial number for inter-operability with different versions.
    private org.opengis.referencing.datum.VerticalDatumType
    The type of this vertical datum.

    Fields inherited from class org.apache.sis.referencing.AbstractIdentifiedObject

    DEPRECATED_KEY, LOCALE_KEY

    Fields inherited from interface org.opengis.referencing.datum.Datum

    ANCHOR_POINT_KEY, DOMAIN_OF_VALIDITY_KEY, REALIZATION_EPOCH_KEY, SCOPE_KEY

    Fields inherited from interface org.opengis.referencing.IdentifiedObject

    ALIAS_KEY, IDENTIFIERS_KEY, NAME_KEY, REMARKS_KEY
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
    Constructs a new datum in which every attributes are set to a null value.
     
    DefaultVerticalDatum(Map<String,?> properties, org.opengis.referencing.datum.VerticalDatumType type)
    Creates a vertical datum from the given properties.
    protected
    DefaultVerticalDatum(org.opengis.referencing.datum.VerticalDatum datum)
    Creates a new datum with the same values than the specified one.
  • Method Summary

    Modifier and Type
    Method
    Description
    castOrCopy(org.opengis.referencing.datum.VerticalDatum object)
    Returns a SIS datum implementation with the same values than the given arbitrary implementation.
    protected long
    Invoked by hashCode() for computing the hash code when first needed.
    boolean
    equals(Object object, ComparisonMode mode)
    Compare this vertical datum with the specified object for equality.
    protected String
    formatTo(Formatter formatter)
    Formats this datum as a Well Known Text VerticalDatum[…] element.
    Class<? extends org.opengis.referencing.datum.VerticalDatum>
    Returns the GeoAPI interface implemented by this class.
    private org.opengis.referencing.datum.VerticalDatumType
    Returns the type to be marshalled to XML.
    org.opengis.referencing.datum.VerticalDatumType
    Returns the type of this vertical datum.
    private void
    setTypeElement(org.opengis.referencing.datum.VerticalDatumType t)
    Invoked by JAXB only.
    private org.opengis.referencing.datum.VerticalDatumType
    Returns the type of this datum, or infers the type from the datum name if no type were specified.

    Methods inherited from class org.apache.sis.referencing.datum.AbstractDatum

    castOrCopy, getAnchorPoint, getDomainOfValidity, getRealizationEpoch, getScope, isHeuristicMatchForName

    Methods inherited from class org.apache.sis.io.wkt.FormattableObject

    print, toString, toString, toWKT

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.opengis.referencing.datum.Datum

    getAnchorPoint, getDomainOfValidity, getRealizationEpoch, getScope

    Methods inherited from interface org.opengis.referencing.IdentifiedObject

    getAlias, getIdentifiers, getName, getRemarks, toWKT
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serial number for inter-operability with different versions.
      See Also:
    • type

      private org.opengis.referencing.datum.VerticalDatumType type
      The type of this vertical datum. If null, a value will be inferred from the name by type().
      See Also:
  • Constructor Details

  • Method Details

    • castOrCopy

      public static DefaultVerticalDatum castOrCopy(org.opengis.referencing.datum.VerticalDatum object)
      Returns a SIS datum implementation with the same values than the given arbitrary implementation. If the given object is null, then this method returns null. Otherwise if the given object is already a SIS implementation, then the given object is returned unchanged. Otherwise a new SIS implementation is created and initialized to the attribute values of the given object.
      Parameters:
      object - the object to get as a SIS implementation, or null if none.
      Returns:
      a SIS implementation containing the values of the given object (may be the given object itself), or null if the argument was null.
    • getInterface

      public Class<? extends org.opengis.referencing.datum.VerticalDatum> getInterface()
      Returns the GeoAPI interface implemented by this class. The SIS implementation returns VerticalDatum.class.
      Note for implementers: Subclasses usually do not need to override this method since GeoAPI does not define VerticalDatum sub-interface. Overriding possibility is left mostly for implementers who wish to extend GeoAPI with their own set of interfaces.
      Overrides:
      getInterface in class AbstractDatum
      Returns:
      VerticalDatum.class or a user-defined sub-interface.
    • type

      private org.opengis.referencing.datum.VerticalDatumType type()
      Returns the type of this datum, or infers the type from the datum name if no type were specified. The latter case occurs after unmarshalling, since GML 3.2 does not contain any attribute for the datum type. It may also happen if the datum were created using reflection.

      This method uses heuristic rules and may be changed in any future SIS version. If the type cannot be determined, default on the ellipsoidal type since it will usually implies no additional calculation.

      No synchronization needed; this is not a problem if this value is computed twice. This method returns only existing immutable instances.

      See Also:
    • getVerticalDatumType

      public org.opengis.referencing.datum.VerticalDatumType getVerticalDatumType()
      Returns the type of this vertical datum.
      Historical note: this property was defined in the ISO 19111 specification published in 2003, but removed from the revision published 2007. This property provides an information similar to the anchor definition, but in a programmatic way more suitable to coordinate transformation engines.
      Specified by:
      getVerticalDatumType in interface org.opengis.referencing.datum.VerticalDatum
      Returns:
      the type of this vertical datum.
    • equals

      public boolean equals(Object object, ComparisonMode mode)
      Compare this vertical datum with the specified object for equality.
      Specified by:
      equals in interface LenientComparable
      Overrides:
      equals in class AbstractDatum
      Parameters:
      object - the object to compare to this.
      mode - STRICT for performing a strict comparison, or IGNORE_METADATA for comparing only properties relevant to coordinate transformations.
      Returns:
      true if both objects are equal.
      See Also:
    • computeHashCode

      protected long computeHashCode()
      Invoked by hashCode() for computing the hash code when first needed. See AbstractIdentifiedObject.computeHashCode() for more information.
      Overrides:
      computeHashCode in class AbstractDatum
      Returns:
      the hash code value. This value may change in any future Apache SIS version.
    • formatTo

      protected String formatTo(Formatter formatter)
      Formats this datum as a Well Known Text VerticalDatum[…] element.
      Compatibility note: OGC 01-009 defined numerical codes for various vertical datum types, for example 2005 for geoidal height and 2002 for ellipsoidal height. Such codes were formatted for all Datum subtypes in WKT 1. Datum types became provided only for vertical datum in the ISO 19111:2003 specification, then removed completely in ISO 19111:2007.
      Overrides:
      formatTo in class AbstractDatum
      Parameters:
      formatter - the formatter where to format the inner content of this WKT element.
      Returns:
      "VerticalDatum" (WKT 2) or "Vert_Datum" (WKT 1).
      See Also:
    • getTypeElement

      private org.opengis.referencing.datum.VerticalDatumType getTypeElement()
      Returns the type to be marshalled to XML. This element was present in GML 3.0 and 3.1, but has been removed from GML 3.2.
      See Also:
    • setTypeElement

      private void setTypeElement(org.opengis.referencing.datum.VerticalDatumType t)
      Invoked by JAXB only. The vertical datum type is set only if it has not already been specified.