# Class DefaultCompoundCS

Object
FormattableObject
AbstractIdentifiedObject
AbstractCS
DefaultCompoundCS

All Implemented Interfaces:
  `Serializable`, `Formattable`, `Deprecable`, `LenientComparable`, `Printable`, `CoordinateSystem`, `IdentifiedObject`

public class DefaultCompoundCS extends AbstractCS
A coordinate system made of two or more independent coordinate systems.

Permitted associations
Used with CRS | Permitted axis names
--- | ---
Compound | (not applicable)

## Immutability and thread safety

This class is immutable and thus thread-safe if the property values (not necessarily the map itself) and the `CoordinateSystemAxis` 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:
  - Serialized Form

- ## Field Summary

  ### Fields inherited from class AbstractIdentifiedObject

  `DEPRECATED_KEY, DOMAINS_KEY, LOCALE_KEY`

  ### Fields inherited from interface IdentifiedObject

  `ALIAS_KEY, IDENTIFIERS_KEY, NAME_KEY, REMARKS_KEY`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DefaultCompoundCS(Map<String,?> properties, CoordinateSystem... components)`
  Constructs a coordinate system from a set of properties and a sequence of coordinate systems.
  `DefaultCompoundCS(CoordinateSystem... components)`
  Constructs a compound coordinate system from a sequence of coordinate systems.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object object, ComparisonMode mode)`
  Compares this coordinate system with the specified object for equality.
  `DefaultCompoundCS`
  `forConvention(AxesConvention convention)`
  Returns a compound CS equivalent to this one but with axes rearranged according the given convention.
  `List<CoordinateSystem>`
  `getComponents()`
  Returns all coordinate systems in this compound CS.

  ### Methods inherited from class AbstractCS

  `castOrCopy, formatTo, getAxis, getDimension, getInterface, hasSameAxes`

  ### Methods inherited from class AbstractIdentifiedObject

  `castOrCopy, equals, formatTo, getAlias, getDescription, getDomains, getIdentifiers, getName, getRemarks, hashCode, isDeprecated, isHeuristicMatchForName`

  ### Methods inherited from class FormattableObject

  `print, toString, toString, toWKT`

  ### Methods inherited from class Object

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

  ### Methods inherited from interface IdentifiedObject

  `getAlias, getIdentifiers, getName, getRemarks, toWKT`

- ## Constructor Details

  - ### DefaultCompoundCS

    public DefaultCompoundCS(Map<String,?> properties, CoordinateSystem... components)
    Constructs a coordinate system from a set of properties and a sequence of coordinate systems. The properties map is given unchanged to the super-class constructor. The following table is a reminder of main (not all) properties:

    Recognized properties (non exhaustive list)
    Property name | Value type | Returned by
    --- | --- | ---
    "name" | `ReferenceIdentifier` or `String` | `AbstractIdentifiedObject.getName()`
    "alias" | `GenericName` or `CharSequence` (optionally as array) | `AbstractIdentifiedObject.getAlias()`
    "identifiers" | `ReferenceIdentifier` (optionally as array) | `AbstractIdentifiedObject.getIdentifiers()`
    "remarks" | `InternationalString` or `String` | `AbstractIdentifiedObject.getRemarks()`

    Parameters:
      `properties` - the properties to be given to the identified object.
      `components` - the set of coordinate system.

  - ### DefaultCompoundCS

    public DefaultCompoundCS(CoordinateSystem... components)
    Constructs a compound coordinate system from a sequence of coordinate systems. A default name for this CS will be inferred from the names of all specified CS.
    Parameters:
      `components` - the set of coordinate system.

- ## Method Details

  - ### getComponents

    public List<CoordinateSystem> getComponents()
    Returns all coordinate systems in this compound CS.
    Returns:
      all coordinate systems in this compound CS.

  - ### forConvention

    public DefaultCompoundCS forConvention(AxesConvention convention)
    Returns a compound CS equivalent to this one but with axes rearranged according the given convention. This method reorders the axes of each individual coordinate system component.
    Overrides:
      `forConvention` in class `AbstractCS`
    Parameters:
      `convention` - the axes convention for which a coordinate system is desired.
    Returns:
      a coordinate system compatible with the given convention (may be `this`).
    See Also:
      - `AbstractCRS​.forConvention(AxesConvention)`

  - ### equals

    public boolean equals(Object object, ComparisonMode mode)
    Compares this coordinate system with the specified object for equality.
    Specified by:
      `equals` in interface `LenientComparable`
    Overrides:
      `equals` in class `AbstractIdentifiedObject`
    Parameters:
      `object` - the object to compare to `this`.
      `mode` - the strictness level of the comparison.
    Returns:
      `true` if both objects are equal.
    See Also:
      - `AbstractIdentifiedObject​.computeHashCode()`
      - `Utilities​.deepEquals(Object, Object, ComparisonMode)`