# Class DefaultSphericalCS

Object
FormattableObject
AbstractIdentifiedObject
AbstractCS
DefaultSphericalCS

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

public class DefaultSphericalCS extends AbstractCS implements SphericalCS
A 2- or 3-dimensional coordinate system with one distance measured from the origin and two angular coordinates. In the two-dimensional case, the radius is omitted and may be implicitly an ellipsoid surface. Not to be confused with an ellipsoidal coordinate system based on an ellipsoid "degenerated" into a sphere.

Permitted associations
Used with CRS | Permitted axis names
--- | ---
Geocentric | “Spherical Latitude”, “ Spherical Longitude”, “Geocentric Radius”
Engineering | unspecified

## 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:
  - `GeodeticAuthorityFactory​.createSphericalCS(String)`
  - 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
  Modifier
  Constructor
  Description
  ``
  `DefaultSphericalCS(Map<String,?> properties, CoordinateSystemAxis axis0, CoordinateSystemAxis axis1)`
  Constructs a two-dimensional coordinate system from a set of properties.
  ``
  `DefaultSphericalCS(Map<String,?> properties, CoordinateSystemAxis axis0, CoordinateSystemAxis axis1, CoordinateSystemAxis axis2)`
  Constructs a three-dimensional coordinate system from a set of properties.
  `protected`
  `DefaultSphericalCS(SphericalCS original)`
  Creates a new coordinate system with the same values as the specified one.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static DefaultSphericalCS`
  `castOrCopy(SphericalCS object)`
  Returns a SIS coordinate system implementation with the same values as the given arbitrary implementation.
  `DefaultSphericalCS`
  `forConvention(AxesConvention convention)`
  Returns a coordinate system equivalent to this one but with axes rearranged according the given convention.
  `Class<? extends SphericalCS>`
  `getInterface()`
  Returns the GeoAPI interface implemented by this class.

  ### Methods inherited from class AbstractCS

  `castOrCopy, formatTo, getAxis, getDimension, 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 CoordinateSystem

  `getAxis, getDimension`

  ### Methods inherited from interface IdentifiedObject

  `getAlias, getIdentifiers, getName, getRemarks, toWKT`

- ## Constructor Details

  - ### DefaultSphericalCS

    public DefaultSphericalCS(Map<String,?> properties, CoordinateSystemAxis axis0, CoordinateSystemAxis axis1, CoordinateSystemAxis axis2)
    Constructs a three-dimensional coordinate system from a set of properties. 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.
      `axis0` - the first axis (e.g. “Spherical latitude”).
      `axis1` - the second axis (e.g. “Spherical longitude”).
      `axis2` - the third axis (e.g. “Geocentric radius”).
    See Also:
      - `GeodeticObjectFactory​.createSphericalCS(Map, CoordinateSystemAxis, CoordinateSystemAxis, CoordinateSystemAxis)`

  - ### DefaultSphericalCS

    public DefaultSphericalCS(Map<String,?> properties, CoordinateSystemAxis axis0, CoordinateSystemAxis axis1)
    Constructs a two-dimensional coordinate system from a set of properties. The given axes shall be angular measurements, without radius. The properties map is given unchanged to the super-class constructor.
    Parameters:
      `properties` - the properties to be given to the identified object.
      `axis0` - the first axis (e.g. “Spherical latitude”).
      `axis1` - the second axis (e.g. “Spherical longitude”).
    Since:
      1.4
    See Also:
      - `GeodeticObjectFactory​.createSphericalCS(Map, CoordinateSystemAxis, CoordinateSystemAxis)`

  - ### DefaultSphericalCS

    protected DefaultSphericalCS(SphericalCS original)
    Creates a new coordinate system with the same values as the specified one. This copy constructor provides a way to convert an arbitrary implementation into a SIS one or a user-defined one (as a subclass), usually in order to leverage some implementation-specific API.

    This constructor performs a shallow copy, i.e. the properties are not cloned.

    Parameters:
      `original` - the coordinate system to copy.
    See Also:
      - `castOrCopy(SphericalCS)`

- ## Method Details

  - ### castOrCopy

    public static DefaultSphericalCS castOrCopy(SphericalCS object)
    Returns a SIS coordinate system 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 SphericalCS> getInterface()
    Returns the GeoAPI interface implemented by this class. The SIS implementation returns `SphericalCS​.class`.

    #### Note for implementers

    Subclasses usually do not need to override this method since GeoAPI does not define `SphericalCS` sub-interface. Overriding possibility is left mostly for implementers who wish to extend GeoAPI with their own set of interfaces.
    Overrides:
      `getInterface` in class `AbstractCS`
    Returns:
      `SphericalCS​.class` or a user-defined sub-interface.

  - ### forConvention

    public DefaultSphericalCS forConvention(AxesConvention convention)
    Returns a coordinate system equivalent to this one but with axes rearranged according the given convention. If this coordinate system is already compatible with the given convention, then this method returns `this`.
    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)`