# Class CommonAuthorityFactory

Object
AbstractFactory
GeodeticAuthorityFactory
CommonAuthorityFactory

All Implemented Interfaces:
  `AuthorityFactory, CRSAuthorityFactory, Factory`

public class CommonAuthorityFactory extends GeodeticAuthorityFactory implements CRSAuthorityFactory
Creates coordinate reference systems in the "`OGC`", "`CRS`" or `"AUTO(2)"` namespaces. All namespaces recognized by this factory are defined by the Open Geospatial Consortium (OGC). Most codes map to one of the constants in the `CommonCRS` enumeration.

Recognized Coordinate Reference System codes
Namespace | Code | Name | Datum type | CS type | Axis direction | Units
--- | --- | --- | --- | --- | --- | ---
CRS | 1 | Computer display | Engineering | Cartesian | (east, south) | pixels
CRS | 27 | NAD27 | Geographic | Ellipsoidal | (east, north) | degrees
CRS | 83 | NAD83 | Geographic | Ellipsoidal | (east, north) | degrees
CRS | 84 | WGS84 | Geographic | Ellipsoidal | (east, north) | degrees
CRS | 88 | NAVD88 | Vertical | Vertical | up | metres
AUTO2 | 42001 | WGS 84 / Auto UTM | Projected | Cartesian | (east, north) | user-specified
AUTO2 | 42002 | WGS 84 / Auto Tr Mercator | Projected | Cartesian | (east, north) | user-specified
AUTO2 | 42003 | WGS 84 / Auto Orthographic | Projected | Cartesian | (east, north) | user-specified
AUTO2 | 42004 | WGS 84 / Auto Equirectangular | Projected | Cartesian | (east, north) | user-specified
AUTO2 | 42005 | WGS 84 / Auto Mollweide | Projected | Cartesian | (east, north) | user-specified
OGC | JulianDate | Julian | Temporal | Time | (future) | days
OGC | TruncatedJulianDate | Truncated Julian | Temporal | Time | (future) | days
OGC | UnixTime | Unix Time | Temporal | Time | (future) | seconds

## Note on codes in CRS namespace

The format is usually "`CRS:`n" where n is a number like 27, 83 or 84. However, this factory is lenient and allows the `CRS` part to be repeated as in `"CRS:CRS84"`. It also accepts `"OGC"` as a synonymous of the `"CRS"` namespace.
Examples: `"CRS:27"`, `"CRS:83"`, `"CRS:84"`, `"CRS:CRS84"`, `"OGC:CRS84"`.

## Note on codes in AUTO(2) namespace

The format is usually "`AUTO2:`n,factor,λ₀,φ₀" where n is a number between 42001 and 42005 inclusive, factor is a conversion factor from the CRS units to metres (e.g. 0.3048 for a CRS with axes in feet) and (λ₀,φ₀) is the longitude and latitude of a point in the projection centre.
Examples: `"AUTO2:42001,1,-100,45"` identifies a Universal Transverse Mercator (UTM) projection for a zone containing the point at (45°N, 100°W) with axes in metres.
Codes in the `"AUTO"` namespace are the same as codes in the `"AUTO2"` namespace, except that the EPSG code of the desired unit of measurement was used instead of the unit factor. The `"AUTO"` namespace was defined in the Web Map Service (WMS) 1.1.1 specification while the `"AUTO2"` namespace is defined in WMS 1.3.0. In Apache SIS implementation, the unit parameter (either as factor or as EPSG code) is optional and defaults to metres.

In the `AUTO(2):42001` case, the UTM zone is calculated as specified in WMS 1.3 specification, i.e. without taking in account the Norway and Svalbard special cases and without switching to polar stereographic projections for high latitudes.

Since:
  0.7
See Also:
  - `CommonCRS`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CommonAuthorityFactory()`
  Constructs a default factory for the `CRS` authority.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `CoordinateReferenceSystem`
  `createCoordinateReferenceSystem(String code)`
  Creates a coordinate reference system from the specified code.
  `IdentifiedObject`
  `createObject(String code)`
  Creates an object from the specified code.
  `Citation`
  `getAuthority()`
  Returns the specification that defines the codes recognized by this factory.
  `Set<String>`
  `getAuthorityCodes(Class<? extends IdentifiedObject> type)`
  Provides a complete set of the known codes provided by this factory.
  `Set<String>`
  `getCodeSpaces()`
  Returns the namespaces defined by the OGC specifications implemented by this factory.
  `Optional<InternationalString>`
  `getDescriptionText(Class<? extends IdentifiedObject> type, String code)`
  Returns a description of the object corresponding to a code.

  ### Methods inherited from class GeodeticAuthorityFactory

  `createCartesianCS, createCompoundCRS, createCoordinateOperation, createCoordinateSystem, createCoordinateSystemAxis, createCylindricalCS, createDatum, createDatumEnsemble, createDerivedCRS, createEllipsoid, createEllipsoidalCS, createEngineeringCRS, createEngineeringDatum, createExtent, createFromCoordinateReferenceSystemCodes, createGeocentricCRS, createGeodeticDatum, createGeographicCRS, createImageCRS, createImageDatum, createObject, createOperationMethod, createParameterDescriptor, createParametricCRS, createParametricCS, createParametricDatum, createPolarCS, createPrimeMeridian, createProjectedCRS, createSphericalCS, createTemporalCRS, createTemporalDatum, createTimeCS, createUnit, createVerticalCRS, createVerticalCS, createVerticalDatum, getDescriptionText, newIdentifiedObjectFinder, toString, trimNamespace`

  ### Methods inherited from class AbstractFactory

  `getVendor`

  ### Methods inherited from class Object

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

  ### Methods inherited from interface AuthorityFactory

  `getDescriptionText`

  ### Methods inherited from interface CRSAuthorityFactory

  `createCompoundCRS, createDerivedCRS, createEngineeringCRS, createGeocentricCRS, createGeographicCRS, createImageCRS, createProjectedCRS, createTemporalCRS, createVerticalCRS`

  ### Methods inherited from interface Factory

  `getVendor`

- ## Constructor Details

  - ### CommonAuthorityFactory

    public CommonAuthorityFactory()
    Constructs a default factory for the `CRS` authority.

- ## Method Details

  - ### getAuthority

    public Citation getAuthority()
    Returns the specification that defines the codes recognized by this factory. The definitive source for this factory is OGC Web Map Service (WMS) specification, also available as the ISO 19128 Geographic Information — Web map server interface standard.

    While the authority is WMS, the namespace of that authority is set to `"OGC"`. Apache SIS does that for consistency with the namespace used in URNs (for example `"urn:ogc:def:crs:OGC:1.3:CRS84"`).

    Specified by:
      `getAuthority` in interface `AuthorityFactory`
    Specified by:
      `getAuthority` in class `GeodeticAuthorityFactory`
    Returns:
      the Web Map Service authority.
    See Also:
      - `getCodeSpaces()`
      - `Citations​.WMS`

  - ### getAuthorityCodes

    public Set<String> getAuthorityCodes(Class<? extends IdentifiedObject> type) throws FactoryException
    Provides a complete set of the known codes provided by this factory. The returned set contains a namespace followed by identifiers like `"CRS:84"`, `"CRS:27"`, `"AUTO2:42001"`, etc.
    Specified by:
      `getAuthorityCodes` in interface `AuthorityFactory`
    Parameters:
      `type` - the spatial reference objects type.
    Returns:
      the set of authority codes for spatial reference objects of the given type.
    Throws:
      `FactoryException` - if this method failed to provide the set of codes.

  - ### getCodeSpaces

    public Set<String> getCodeSpaces()
    Returns the namespaces defined by the OGC specifications implemented by this factory. At the difference of other factories, the namespaces of `CommonAuthorityFactory` are quite different than the authority title or identifier:
    - Authority: `"WMS"` (for Web Map Services)
    - Namespaces: `"CRS"`, `"AUTO"`, `"AUTO2"`. The `"OGC"` namespace is also accepted for compatibility reason, but its scope is wider than the above-cited namespaces.
    Overrides:
      `getCodeSpaces` in class `GeodeticAuthorityFactory`
    Returns:
      a set containing at least the `"CRS"`, `"AUTO"` and `"AUTO2"` strings.
    See Also:
      - `getAuthority()`
      - `Citations​.WMS`

  - ### getDescriptionText

    public Optional<InternationalString> getDescriptionText(Class<? extends IdentifiedObject> type, String code) throws FactoryException
    Returns a description of the object corresponding to a code. The description can be used for example in a combo box in a graphical user interface.

    Codes in the `"AUTO(2)"` namespace do not need parameters for this method. But if parameters are nevertheless specified, then they will be taken in account.

    Examples
    Argument value | Return value
    --- | ---
    `CRS:84` | WGS 84
    `AUTO2:42001` | WGS 84 / Auto UTM
    `AUTO2:42001,1,-100,45` | WGS 84 / UTM zone 47N

    Overrides:
      `getDescriptionText` in class `GeodeticAuthorityFactory`
    Parameters:
      `type` - the type of object for which to get a description.
      `code` - value in the CRS or AUTO(2) code space.
    Returns:
      a description of the object.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if an error occurred while fetching the description.
    Since:
      1.5

  - ### createObject

    public IdentifiedObject createObject(String code) throws FactoryException
    Creates an object from the specified code. The default implementation delegates to `createCoordinateReferenceSystem(String)`.
    Specified by:
      `createObject` in interface `AuthorityFactory`
    Specified by:
      `createObject` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the object for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `AbstractIdentifiedObject`

  - ### createCoordinateReferenceSystem

    public CoordinateReferenceSystem createCoordinateReferenceSystem(String code) throws FactoryException
    Creates a coordinate reference system from the specified code. This method performs the following steps:
    1. Skip the `"OGC"`, `"CRS"`, `"AUTO"`, `"AUTO1"` or `"AUTO2"` namespace if present (ignoring case). All other namespaces will cause an exception to be thrown.
    2. Skip the `"CRS"` prefix if present. This additional check is for accepting codes like `"OGC:CRS84"` (not a valid CRS code, but seen in practice).
    3. In the remaining text, interpret the integer value as documented in this class javadoc. Note that some codes require coma-separated parameters after the integer value.
    Specified by:
      `createCoordinateReferenceSystem` in interface `CRSAuthorityFactory`
    Overrides:
      `createCoordinateReferenceSystem` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by OGC.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `AbstractCRS`
      - `CRS​.forCode(String)`