Class DefaultCompoundCRS

All Implemented Interfaces:
Serializable, Formattable, Deprecable, Lenient­Comparable, Printable, 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

Apache SIS is flexible about the order of components. However, the following order is recommended:
  • Horizontal CRS (e.g., two-dimensional Geographic­CRS, Projected­CRS or Engineering­CRS).
  • Optionally followed by a Vertical­CRS or a Parametric­CRS (but not both).
  • Optionally followed by a Temporal­CRS.

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 as 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 compound CRS equivalent to this one but with axes rearranged according the given convention. This method first reorders the axes of each individual CRS component. Then, if the given convention is Axes­Convention​.DISPLAY_ORIENTED or Axes­Convention​.NORMALIZED, 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:
    • 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: