Class DefaultCompoundCRS

All Implemented Interfaces:
Serializable, Formattable, Deprecable, Lenient­Comparable, Compound­CRS, Coordinate­Reference­System, Identified­Object, Reference­System

public class DefaultCompoundCRS extends AbstractCRS implements CompoundCRS
A CRS describing the position of points through two or more independent coordinate reference systems. This class is often used for defining 4-dimensional (x,y,z,t) coordinate reference systems as an aggregation of simpler CRS. Below is two examples of such aggregations:

Flat list

Compound­CRS — (x, y, z, t)
  ├─Projected­CRS — (x, y)
  ├─Vertical­CRS — (z)
  └─Temporal­CRS — (t)

Hierarchical structure

Compound­CRS — (x, y, z, t)
  ├─Compound­CRS — (x, y, z)
  │   ├─Projected­CRS — (x, y)
  │   └─Vertical­CRS — (z)
  └─Temporal­CRS — (t)
Strictly speaking, only the flat list on the left side is allowed by OGC/ISO specifications. However, Apache SIS relaxes this rule by allowing hierarchies as shown on the right side. This flexibility allows SIS to preserve information about the (x,y,z) part (e.g. the EPSG identifier) that would otherwise been lost. Users can obtain the list of their choice by invoking get­Single­Components() or get­Components() respectively.

Component order

ISO 19162 restricts compound CRS to the following components in that order:
  • A mandatory horizontal CRS (only one of two-dimensional Geographic­CRS or Projected­CRS or Engineering­CRS).
  • Optionally followed by a Vertical­CRS or a Parametric­CRS (but not both).
  • Optionally followed by a Temporal­CRS.
SIS currently does not enforce those restrictions. In particular:
  • Components may appear in different order.
  • Vertical­CRS + Temporal­CRS (without horizontal component) is accepted.
  • Geocentric­CRS or three-dimensional Geographic­CRS can be combined with Temporal­CRS.
However, users are encouraged to follow ISO 19162 restriction for better portability.

Immutability and thread safety

This class is immutable and thus thread-safe if the property values (not necessarily the map itself) and all Coordinate­Reference­System instances 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
See Also:
  • Constructor Details

  • Method Details

    • castOrCopy

      public static DefaultCompoundCRS castOrCopy(CompoundCRS object)
      Returns a SIS CRS 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 CompoundCRS> getInterface()
      Returns the GeoAPI interface implemented by this class. The SIS implementation returns Compound­CRS​.class.

      Note for implementers

      Subclasses usually do not need to override this method since GeoAPI does not define Compound­CRS sub-interface. Overriding possibility is left mostly for implementers who wish to extend GeoAPI with their own set of interfaces.
      Overrides:
      get­Interface in class Abstract­CRS
      Returns:
      Compound­CRS​.class or a user-defined sub-interface.
    • getComponents

      public List<CoordinateReferenceSystem> getComponents()
      Returns the ordered list of coordinate reference systems. This is the list of CRS given at construction time. This list may contains other Compound­CRS instances, as described in class Javadoc. For a flattened list of Single­CRS instances, see get­Single­Components().
      Specified by:
      get­Components in interface Compound­CRS
      Returns:
      the coordinate reference systems as an unmodifiable list.
    • getSingleComponents

      public List<SingleCRS> getSingleComponents()
      Returns the ordered list of single coordinate reference systems. If this compound CRS contains other compound CRS, then all of them are flattened in a sequence of Single­CRS objects. See class Javadoc for more information.
      Returns:
      the single coordinate reference systems as an unmodifiable list.
      See Also:
    • forConvention

      public DefaultCompoundCRS forConvention(AxesConvention convention)
      Returns a coordinate reference system equivalent to this one but with axes rearranged according the given convention. If this CRS is already compatible with the given convention, then this method returns this.

      If the given convention is Axes­Convention​.DISPLAY_ORIENTED or Axes­Convention​.NORMALIZED, then this method will also reorder the components with horizontal CRS (geodetic or projected) first, then vertical CRS, then temporal CRS.

      Overrides:
      for­Convention in class Abstract­CRS
      Parameters:
      convention - the axes convention for which a coordinate reference system is desired.
      Returns:
      a coordinate reference system compatible with the given convention (may be this).
      See Also:
    • equals

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

      protected long computeHashCode()
      Invoked by hash­Code() for computing the hash code when first needed. See Abstract­Identified­Object​.compute­Hash­Code() for more information.
      Overrides:
      compute­Hash­Code in class Abstract­CRS
      Returns:
      the hash code value. This value may change in any future Apache SIS version.
    • formatTo

      protected String formatTo(Formatter formatter)
      Formats this CRS as a Well Known Text Compound­CRS[…] element.

      WKT validity

      The WKT version 2 format restricts compound CRS to the following components in that order:
      • A mandatory horizontal CRS (only one of two-dimensional Geographic­CRS or Projected­CRS or Engineering­CRS).
      • Optionally followed by a Vertical­CRS or a Parametric­CRS (but not both).
      • Optionally followed by a Temporal­CRS.
      SIS does not check if this CRS is compliant with the above-cited restrictions.
      Overrides:
      format­To in class Abstract­CRS
      Parameters:
      formatter - the formatter where to format the inner content of this WKT element.
      Returns:
      "Compound­CRS" (WKT 2) or "Compd_CS" (WKT 1).
      See Also: