# Class MultiAuthoritiesFactory

Object
AbstractFactory
GeodeticAuthorityFactory
MultiAuthoritiesFactory

All Implemented Interfaces:
  `AuthorityFactory`, `CRSAuthorityFactory`, `CSAuthorityFactory`, `DatumAuthorityFactory`, `CoordinateOperationAuthorityFactory`, `Factory`

public class MultiAuthoritiesFactory extends GeodeticAuthorityFactory implements CRSAuthorityFactory, CSAuthorityFactory, DatumAuthorityFactory, CoordinateOperationAuthorityFactory
A factory that delegates the object creation to another factory determined from the authority part in “authority:code” arguments. The list of factories to use as delegates can be specified at construction time.

This factory requires that every codes given to a `createFoo(String)` method are prefixed by a namespace, for example `"EPSG:4326"` or `"EPSG::4326"`. When a `createFoo(String)` method is invoked, this class uses the authority part in the “authority:code” argument for locating a factory capable to create a geodetic object for the code part. If a factory is found in the list of factories given at construction time, then the work is delegated to that factory. Otherwise a `NoSuchAuthorityFactoryException` is thrown.

## URI syntax

This factory can also parse URNs or URLs of the following forms:

- `"urn:ogc:def:`type`:`authority`:`version`:`code`"`
- `"http://www​.opengis​.net/def/`type`/`authority`/`version`/`code`"`
- `"http://www​.opengis​.net/gml/srs/`authority`.xml#`code`"`

In such cases, the type specified in the URN may be used for invoking a more specific method. However, `MultiAuthoritiesFactory` uses the type information in the URN only for delegating to a more specific method, never for delegating to a less specific method. An exception will be thrown if the type in the URN is incompatible with the invoked method.

### Example

If `createObject("urn:ogc:def:crs:EPSG::4326")` is invoked, then `MultiAuthoritiesFactory` will delegate (indirectly, ignoring caching for this example) the object creation to `EPSGDataAccess​.createCoordinateReferenceSystem(String)` instead of `EPSGDataAccess​.createObject(String)` because of the `"crs"` part in the URN. The more specific method gives better performances and avoid ambiguities.

### Compound URIs

This class accepts also combined URIs of the following forms (only two components shown, but arbitrary number of components is allowed):

- `"urn:ogc:def:`type`,` type₁`:`authority₁`:`version₁`:`code₁`,` type₂`:`authority₂`:`version₂`:`code₂`"`
- `"http://www​.opengis​.net/def/crs-compound?`
  `1=http://www​.opengis​.net/def/crs/`authority₁`/`version₁`/`code₁`&`
  `2=http://www​.opengis​.net/def/crs/`authority₂`/`version₂`/`code₂`"`

Given such URIs, `MultiAuthoritiesFactory` invokes `createObject(String)` for each component and combines the result as described by the `CRS​.compound(CoordinateReferenceSystem...)` method. URNs (but not URLs) can also combine a geodetic reference frame with an ellipsoidal coordinate system for creating a new geographic CRS, or a base geographic CRS with a conversion and a Cartesian coordinate system for creating a new projected coordinate reference system, or coordinate operations for creating a concatenated operation.

## Multiple versions for the same authority

`MultiAuthoritiesFactory` accepts an arbitrary number of factories for the same authority, provided that those factories have different version numbers. If a `createFoo(String)` method is invoked with a URN containing a version number different than zero, then `MultiAuthoritiesFactory` will search for a factory with that exact version, or throw a `NoSuchAuthorityFactoryException` if no suitable factory is found. If a `createFoo(String)` method is invoked with the version number omitted, then `MultiAuthoritiesFactory` will use the first factory in iteration order for the requested authority regardless of its version number.

### Example

A `MultiAuthoritiesFactory` instance could contain two `EPSGFactory` instances: one for version 8.2 and another one for version 7.9 of the EPSG dataset. A specific version can be requested in the URN given to `createFoo(String)` methods, for example `"urn:ogc:def:crs:EPSG:8.2:4326"`. If no version is given of if the given version is zero, then the first EPSG factory in iteration order is used regardless of its version number.

## Multi-threading

This class is thread-safe if all delegate factories are themselves thread-safe. However, the factory providers, which are given to the constructor as `Iterable` instances, do not need to be thread-safe. See constructor Javadoc for more information.

Since:
  0.7
See Also:
  - `CRS​.getAuthorityFactory(String)`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MultiAuthoritiesFactory(Iterable<? extends CRSAuthorityFactory> crsFactories, Iterable<? extends CSAuthorityFactory> csFactories, Iterable<? extends DatumAuthorityFactory> datumFactories, Iterable<? extends CoordinateOperationAuthorityFactory> copFactories)`
  Creates a new multi-factories instance using the given lists of factories.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `CartesianCS`
  `createCartesianCS(String code)`
  Creates a 2- or 3-dimensional Cartesian coordinate system made of straight orthogonal axes.
  `CompoundCRS`
  `createCompoundCRS(String code)`
  Creates a CRS describing the position of points through two or more independent coordinate reference systems.
  `CoordinateOperation`
  `createCoordinateOperation(String code)`
  Creates an operation for transforming coordinates in the source CRS to coordinates in the target CRS.
  `CoordinateReferenceSystem`
  `createCoordinateReferenceSystem(String code)`
  Creates an arbitrary coordinate reference system from a code.
  `CoordinateSystem`
  `createCoordinateSystem(String code)`
  Creates an arbitrary coordinate system from a code.
  `CoordinateSystemAxis`
  `createCoordinateSystemAxis(String code)`
  Creates a coordinate system axis with name, direction, unit and range of values.
  `CylindricalCS`
  `createCylindricalCS(String code)`
  Creates a 3-dimensional coordinate system made of a polar coordinate system extended by a straight perpendicular axis.
  `Datum`
  `createDatum(String code)`
  Creates an arbitrary datum from a code.
  `DerivedCRS`
  `createDerivedCRS(String code)`
  Creates a CRS that is defined by its coordinate conversion from another CRS (not by a datum).
  `Ellipsoid`
  `createEllipsoid(String code)`
  Creates a geometric figure that can be used to describe the approximate shape of the earth.
  `EllipsoidalCS`
  `createEllipsoidalCS(String code)`
  Creates a 2- or 3-dimensional coordinate system for geodetic latitude and longitude, sometimes with ellipsoidal height.
  `EngineeringCRS`
  `createEngineeringCRS(String code)`
  Creates a 1-, 2- or 3-dimensional contextually local coordinate reference system.
  `EngineeringDatum`
  `createEngineeringDatum(String code)`
  Creates a datum defining the origin of an engineering coordinate reference system.
  `Extent`
  `createExtent(String code)`
  Creates information about spatial, vertical, and temporal extent (usually a domain of validity) from a code.
  `Set<CoordinateOperation>`
  `createFromCoordinateReferenceSystemCodes(String sourceCRS, String targetCRS)`
  Creates operations from source and target coordinate reference system codes.
  `GeocentricCRS`
  `createGeocentricCRS(String code)`
  Creates a 3-dimensional coordinate reference system with the origin at the approximate centre of mass of the earth.
  `GeodeticDatum`
  `createGeodeticDatum(String code)`
  Creates a datum defining the location and orientation of an ellipsoid that approximates the shape of the earth.
  `GeographicCRS`
  `createGeographicCRS(String code)`
  Creates a 2- or 3-dimensional coordinate reference system based on an ellipsoidal approximation of the geoid.
  `ImageCRS`
  `createImageCRS(String code)`
  Deprecated.
  The `ImageCRS` class has been removed in ISO 19111:2019.
  `ImageDatum`
  `createImageDatum(String code)`
  Deprecated.
  The `ImageDatum` class has been removed in ISO 19111:2019.
  `IdentifiedObject`
  `createObject(String code)`
  Creates an arbitrary object from a code.
  `OperationMethod`
  `createOperationMethod(String code)`
  Creates a description of the algorithm and parameters used to perform a coordinate operation.
  `ParameterDescriptor<?>`
  `createParameterDescriptor(String code)`
  Creates a definition of a single parameter used by an operation method.
  `PolarCS`
  `createPolarCS(String code)`
  Creates a 2-dimensional coordinate system for coordinates represented by a distance from the origin and an angle from a fixed direction.
  `PrimeMeridian`
  `createPrimeMeridian(String code)`
  Creates a prime meridian defining the origin from which longitude values are determined.
  `ProjectedCRS`
  `createProjectedCRS(String code)`
  Creates a 2-dimensional coordinate reference system used to approximate the shape of the earth on a planar surface.
  `SphericalCS`
  `createSphericalCS(String code)`
  Creates a 3-dimensional coordinate system with one distance measured from the origin and two angular coordinates.
  `TemporalCRS`
  `createTemporalCRS(String code)`
  Creates a 1-dimensional coordinate reference system used for the recording of time.
  `TemporalDatum`
  `createTemporalDatum(String code)`
  Creates a datum defining the origin of a temporal coordinate reference system.
  `TimeCS`
  `createTimeCS(String code)`
  Creates a 1-dimensional coordinate system for heights or depths of points.
  `Unit<?>`
  `createUnit(String code)`
  Creates an unit of measurement from a code.
  `VerticalCRS`
  `createVerticalCRS(String code)`
  Creates a 1-dimensional coordinate reference system used for recording heights or depths.
  `VerticalCS`
  `createVerticalCS(String code)`
  Creates a 1-dimensional coordinate system for heights or depths of points.
  `VerticalDatum`
  `createVerticalDatum(String code)`
  Creates a datum identifying a particular reference level surface used as a zero-height surface.
  `Citation`
  `getAuthority()`
  Returns the database or specification that defines the codes recognized by this factory.
  `Set<String>`
  `getAuthorityCodes(Class<? extends IdentifiedObject> type)`
  Returns the set of authority codes for objects of the given type.
  `final <T extends AuthorityFactory>
  T`
  `getAuthorityFactory(Class<T> type, String authority, String version)`
  Returns the factory identified by the given type, authority and version.
  `Set<String>`
  `getCodeSpaces()`
  Returns the code spaces of all factories given to the constructor.
  `Optional<InternationalString>`
  `getDescriptionText(Class<? extends IdentifiedObject> type, String code)`
  Returns a description of the object corresponding to a code.
  `boolean`
  `isLenient()`
  Returns whether this factory should relax some rules when processing a given authority code.
  `IdentifiedObjectFinder`
  `newIdentifiedObjectFinder()`
  Creates a finder which can be used for looking up unidentified objects.
  `void`
  `reload()`
  Clears the cache and notifies this `MultiAuthoritiesFactory` that all factories will need to be fetched again from the providers given at construction time.
  `void`
  `setLenient(boolean lenient)`
  Sets whether this factory should relax some rules when processing a given code.

  ### Methods inherited from class GeodeticAuthorityFactory

  `createDatumEnsemble, createObject, createParametricCRS, createParametricCS, createParametricDatum, getDescriptionText, 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 Factory

  `getVendor`

- ## Constructor Details

  - ### MultiAuthoritiesFactory

    public MultiAuthoritiesFactory(Iterable<? extends CRSAuthorityFactory> crsFactories, Iterable<? extends CSAuthorityFactory> csFactories, Iterable<? extends DatumAuthorityFactory> datumFactories, Iterable<? extends CoordinateOperationAuthorityFactory> copFactories)
    Creates a new multi-factories instance using the given lists of factories. Calls to `createFoo(String)` methods will scan the supplied factories in their iteration order when first needed. The first factory having the requested namespace will be used.

    #### Requirements

    `MultiAuthoritiesFactory` may iterate over the same `Iterable` more than once. Each iteration shall return the same instances as previous iterations, unless `reload()` has been invoked.

    The `Iterable`s do not need to be thread-safe. `MultiAuthoritiesFactory` will use them only in blocks synchronized on the `Iterable` instance. For example, all usages of `crsFactory` will be done inside a `synchronized(crsFactory)` block.

    #### Name collision

    If an `Iterable` contains more than one factory for the same namespace and version, then only the first occurrence will be used. All additional factories for the same namespace and version will be ignored, after a warning has been logged.

    #### Caching

    `MultiAuthoritiesFactory` caches the factories found from the given `Iterable`s, but does not cache the objects created by those factories. This constructor assumes that the given factories already do their own caching.
    Parameters:
      `crsFactories` - the factories for creating `CoordinateReferenceSystem` objects, or null if none.
      `csFactories` - the factories for creating `CoordinateSystem` objects, or null if none.
      `datumFactories` - the factories for creating `Datum` objects, or null if none.
      `copFactories` - the factories for creating `CoordinateOperation` objects, or null if none.

- ## Method Details

  - ### isLenient

    public boolean isLenient()
    Returns whether this factory should relax some rules when processing a given authority code. If this value is `true`, then the behavior of this `MultiAuthoritiesFactory` is changed as below:
    - If a version is specified in a URN but there is no factory for that specific version, then fallback on a factory for the same authority but the default version.
    The default value is `false`, which means that an exception will be thrown if there is no factory specifically for the requested version.
    Returns:
      whether this factory should relax some rules when processing a given authority code.

  - ### setLenient

    public void setLenient(boolean lenient)
    Sets whether this factory should relax some rules when processing a given code.
    Parameters:
      `lenient` - whether this factory should relax some rules when processing a given authority code.

  - ### getAuthority

    public Citation getAuthority()
    Returns the database or specification that defines the codes recognized by this factory. The default implementation returns `null` because `MultiAuthoritiesFactory` is not about a particular authority.
    Specified by:
      `getAuthority` in interface `AuthorityFactory`
    Specified by:
      `getAuthority` in class `GeodeticAuthorityFactory`
    Returns:
      the organization responsible for definitions in the registry, or `null` if none or many.
    See Also:
      - `AbstractFactory​.getVendor()`

  - ### getAuthorityCodes

    public Set<String> getAuthorityCodes(Class<? extends IdentifiedObject> type) throws FactoryException
    Returns the set of authority codes for objects of the given type. This method returns the union of codes returned by all factories specified at construction time.

    The `Set​.contains(Object)` method of the returned set is lenient: it accepts various ways to format a code even if the iterator returns only one form. For example, the `contains(Object)` method may return `true` for `"EPSG:4326"`, `"EPSG::4326"`, `"urn:ogc:def:crs:EPSG::4326"`, etc. even if the iterator returns only `"EPSG:4326"`.

    Warnings:

    - Callers should not retain a reference to the returned collection for a long time, since it may be backed by database connections (depending on the factory implementations).
    - The returned set is not thread-safe. Each thread should ask its own instance and let the garbage collector disposes it as soon as the collection is not needed anymore.
    - Call to the `Set​.size()` method on the returned collection should be avoided since it may be costly.
    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 access to an underlying factory failed.

  - ### getCodeSpaces

    public Set<String> getCodeSpaces() throws FactoryException
    Returns the code spaces of all factories given to the constructor.

    #### Performance note

    The current implementation may be relatively costly because it implies instantiation of all factories.
    Overrides:
      `getCodeSpaces` in class `GeodeticAuthorityFactory`
    Returns:
      the code spaces of all factories.
    Throws:
      `FactoryException` - if an error occurred while listing the code spaces managed by this factory.

  - ### getAuthorityFactory

    public final <T extends AuthorityFactory> T getAuthorityFactory(Class<T> type, String authority, String version) throws FactoryException
    Returns the factory identified by the given type, authority and version.
    Type Parameters:
      `T` - the compile-time value of `type`.
    Parameters:
      `type` - the type of the desired factory as one of the `CRSAuthorityFactory`, `CSAuthorityFactory`, `DatumAuthorityFactory` or `CoordinateOperationFactory` interfaces.
      `authority` - the namespace or authority identifier of the desired factory. Examples: `"EPSG"`, `"CRS"` or `"AUTO2"`.
      `version` - the version of the desired factory, or `null` for the default version.
    Returns:
      the factory for the given type, authority and version.
    Throws:
      `NoSuchAuthorityFactoryException` - if no suitable factory has been found.
      `FactoryException` - if an error occurred while getting the authority or code spaces managed by this factory.

  - ### getDescriptionText

    public Optional<InternationalString> getDescriptionText(Class<? extends IdentifiedObject> type, String code) throws FactoryException
    Returns a description of the object corresponding to a code. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:`type`:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/`type`/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Overrides:
      `getDescriptionText` in class `GeodeticAuthorityFactory`
    Parameters:
      `type` - the type of object for which to get a description.
      `code` - value allocated by authority.
    Returns:
      a description of the object, or empty if the object corresponding to the specified code has no description.
    Throws:
      `FactoryException` - if an error occurred while fetching the description.
    Since:
      1.5

  - ### createObject

    public IdentifiedObject createObject(String code) throws FactoryException
    Creates an arbitrary object from a code. The given code can use any of the following patterns, where version is optional:
    - authority`:`code — note that this form is ambiguous
    - authority`:`version`:`code — note that this form is ambiguous
    - `urn:ogc:def:`type`:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/`type`/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    The two first formats are ambiguous when used with this `createObject(String)` method because different kinds of objects can have the same code.
    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 an arbitrary coordinate reference system from a code. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createCoordinateReferenceSystem` in interface `CRSAuthorityFactory`
    Overrides:
      `createCoordinateReferenceSystem` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `AbstractCRS`
      - `CRS​.forCode(String)`

  - ### createGeographicCRS

    public GeographicCRS createGeographicCRS(String code) throws FactoryException
    Creates a 2- or 3-dimensional coordinate reference system based on an ellipsoidal approximation of the geoid. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createGeographicCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createGeographicCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultGeographicCRS`
      - `CommonCRS​.geographic()`
      - `CommonCRS​.geographic3D()`

  - ### createGeocentricCRS

    public GeocentricCRS createGeocentricCRS(String code) throws FactoryException
    Creates a 3-dimensional coordinate reference system with the origin at the approximate centre of mass of the earth. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Warning: In a future SIS version, the return type may be changed to the `GeodeticCRS` parent interface. This is because ISO 19111 does not defines specific interface for the geocentric case. Users should assign the return value to a `GeodeticCRS` type.
    Specified by:
      `createGeocentricCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createGeocentricCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultGeocentricCRS`
      - `CommonCRS​.geocentric()`

  - ### createProjectedCRS

    public ProjectedCRS createProjectedCRS(String code) throws FactoryException
    Creates a 2-dimensional coordinate reference system used to approximate the shape of the earth on a planar surface. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createProjectedCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createProjectedCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultProjectedCRS`

  - ### createVerticalCRS

    public VerticalCRS createVerticalCRS(String code) throws FactoryException
    Creates a 1-dimensional coordinate reference system used for recording heights or depths. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createVerticalCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createVerticalCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultVerticalCRS`
      - `CommonCRS​.Vertical​.crs()`

  - ### createTemporalCRS

    public TemporalCRS createTemporalCRS(String code) throws FactoryException
    Creates a 1-dimensional coordinate reference system used for the recording of time. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createTemporalCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createTemporalCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultTemporalCRS`
      - `CommonCRS​.Temporal​.crs()`

  - ### createCompoundCRS

    public CompoundCRS createCompoundCRS(String code) throws FactoryException
    Creates a CRS describing the position of points through two or more independent coordinate reference systems. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createCompoundCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createCompoundCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultCompoundCRS`

  - ### createDerivedCRS

    public DerivedCRS createDerivedCRS(String code) throws FactoryException
    Creates a CRS that is defined by its coordinate conversion from another CRS (not by a datum). The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createDerivedCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createDerivedCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultDerivedCRS`

  - ### createEngineeringCRS

    public EngineeringCRS createEngineeringCRS(String code) throws FactoryException
    Creates a 1-, 2- or 3-dimensional contextually local coordinate reference system. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createEngineeringCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createEngineeringCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultEngineeringCRS`

  - ### createImageCRS

    @Deprecated(since="1.5") public ImageCRS createImageCRS(String code) throws FactoryException
    Deprecated.
    The `ImageCRS` class has been removed in ISO 19111:2019. It is replaced by `EngineeringCRS`.
    Creates a 2-dimensional engineering coordinate reference system applied to locations in images. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:crs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/crs/`authority`/`version`/`code
    - `http://www​.opengis​.net/gml/srs/`authority`.xml#`code
    Specified by:
      `createImageCRS` in interface `CRSAuthorityFactory`
    Overrides:
      `createImageCRS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultImageCRS`

  - ### createDatum

    public Datum createDatum(String code) throws FactoryException
    Creates an arbitrary datum from a code. The returned object will typically be an The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:datum:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/datum/`authority`/`version`/`code
    Specified by:
      `createDatum` in interface `DatumAuthorityFactory`
    Overrides:
      `createDatum` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the datum for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `AbstractDatum`

  - ### createGeodeticDatum

    public GeodeticDatum createGeodeticDatum(String code) throws FactoryException
    Creates a datum defining the location and orientation of an ellipsoid that approximates the shape of the earth. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:datum:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/datum/`authority`/`version`/`code
    Specified by:
      `createGeodeticDatum` in interface `DatumAuthorityFactory`
    Overrides:
      `createGeodeticDatum` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the datum for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultGeodeticDatum`
      - `CommonCRS​.datum(boolean)`

  - ### createVerticalDatum

    public VerticalDatum createVerticalDatum(String code) throws FactoryException
    Creates a datum identifying a particular reference level surface used as a zero-height surface. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:datum:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/datum/`authority`/`version`/`code
    Specified by:
      `createVerticalDatum` in interface `DatumAuthorityFactory`
    Overrides:
      `createVerticalDatum` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the datum for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultVerticalDatum`
      - `CommonCRS​.Vertical​.datum()`

  - ### createTemporalDatum

    public TemporalDatum createTemporalDatum(String code) throws FactoryException
    Creates a datum defining the origin of a temporal coordinate reference system. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:datum:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/datum/`authority`/`version`/`code
    Specified by:
      `createTemporalDatum` in interface `DatumAuthorityFactory`
    Overrides:
      `createTemporalDatum` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the datum for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultTemporalDatum`
      - `CommonCRS​.Temporal​.datum()`

  - ### createEngineeringDatum

    public EngineeringDatum createEngineeringDatum(String code) throws FactoryException
    Creates a datum defining the origin of an engineering coordinate reference system. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:datum:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/datum/`authority`/`version`/`code
    Specified by:
      `createEngineeringDatum` in interface `DatumAuthorityFactory`
    Overrides:
      `createEngineeringDatum` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the datum for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultEngineeringDatum`

  - ### createImageDatum

    @Deprecated(since="1.5") public ImageDatum createImageDatum(String code) throws FactoryException
    Deprecated.
    The `ImageDatum` class has been removed in ISO 19111:2019. It is replaced by `EngineeringDatum`.
    Creates a datum defining the origin of an image coordinate reference system. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:datum:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/datum/`authority`/`version`/`code
    Specified by:
      `createImageDatum` in interface `DatumAuthorityFactory`
    Overrides:
      `createImageDatum` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the datum for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultImageDatum`

  - ### createEllipsoid

    public Ellipsoid createEllipsoid(String code) throws FactoryException
    Creates a geometric figure that can be used to describe the approximate shape of the earth. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:ellipsoid:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/ellipsoid/`authority`/`version`/`code
    Specified by:
      `createEllipsoid` in interface `DatumAuthorityFactory`
    Overrides:
      `createEllipsoid` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the ellipsoid for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultEllipsoid`
      - `CommonCRS​.ellipsoid()`

  - ### createPrimeMeridian

    public PrimeMeridian createPrimeMeridian(String code) throws FactoryException
    Creates a prime meridian defining the origin from which longitude values are determined. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:meridian:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/meridian/`authority`/`version`/`code
    Specified by:
      `createPrimeMeridian` in interface `DatumAuthorityFactory`
    Overrides:
      `createPrimeMeridian` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the prime meridian for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultPrimeMeridian`
      - `CommonCRS​.primeMeridian()`

  - ### createExtent

    public Extent createExtent(String code) throws FactoryException
    Creates information about spatial, vertical, and temporal extent (usually a domain of validity) from a code. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    Overrides:
      `createExtent` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the extent for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultExtent`

  - ### createCoordinateSystem

    public CoordinateSystem createCoordinateSystem(String code) throws FactoryException
    Creates an arbitrary coordinate system from a code. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createCoordinateSystem` in interface `CSAuthorityFactory`
    Overrides:
      `createCoordinateSystem` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `AbstractCS`
      - `CoordinateSystems​.getEpsgCode(Unit, AxisDirection...)`

  - ### createEllipsoidalCS

    public EllipsoidalCS createEllipsoidalCS(String code) throws FactoryException
    Creates a 2- or 3-dimensional coordinate system for geodetic latitude and longitude, sometimes with ellipsoidal height. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createEllipsoidalCS` in interface `CSAuthorityFactory`
    Overrides:
      `createEllipsoidalCS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultEllipsoidalCS`

  - ### createVerticalCS

    public VerticalCS createVerticalCS(String code) throws FactoryException
    Creates a 1-dimensional coordinate system for heights or depths of points. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createVerticalCS` in interface `CSAuthorityFactory`
    Overrides:
      `createVerticalCS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultVerticalCS`

  - ### createTimeCS

    public TimeCS createTimeCS(String code) throws FactoryException
    Creates a 1-dimensional coordinate system for heights or depths of points. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createTimeCS` in interface `CSAuthorityFactory`
    Overrides:
      `createTimeCS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultTimeCS`

  - ### createCartesianCS

    public CartesianCS createCartesianCS(String code) throws FactoryException
    Creates a 2- or 3-dimensional Cartesian coordinate system made of straight orthogonal axes. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createCartesianCS` in interface `CSAuthorityFactory`
    Overrides:
      `createCartesianCS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultCartesianCS`

  - ### createSphericalCS

    public SphericalCS createSphericalCS(String code) throws FactoryException
    Creates a 3-dimensional coordinate system with one distance measured from the origin and two angular coordinates. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createSphericalCS` in interface `CSAuthorityFactory`
    Overrides:
      `createSphericalCS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultSphericalCS`

  - ### createCylindricalCS

    public CylindricalCS createCylindricalCS(String code) throws FactoryException
    Creates a 3-dimensional coordinate system made of a polar coordinate system extended by a straight perpendicular axis. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createCylindricalCS` in interface `CSAuthorityFactory`
    Overrides:
      `createCylindricalCS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultCylindricalCS`

  - ### createPolarCS

    public PolarCS createPolarCS(String code) throws FactoryException
    Creates a 2-dimensional coordinate system for coordinates represented by a distance from the origin and an angle from a fixed direction. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:cs:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/cs/`authority`/`version`/`code
    Specified by:
      `createPolarCS` in interface `CSAuthorityFactory`
    Overrides:
      `createPolarCS` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the coordinate system for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultPolarCS`

  - ### createCoordinateSystemAxis

    public CoordinateSystemAxis createCoordinateSystemAxis(String code) throws FactoryException
    Creates a coordinate system axis with name, direction, unit and range of values. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:axis:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/axis/`authority`/`version`/`code
    Specified by:
      `createCoordinateSystemAxis` in interface `CSAuthorityFactory`
    Overrides:
      `createCoordinateSystemAxis` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the axis for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultCoordinateSystemAxis`

  - ### createUnit

    public Unit<?> createUnit(String code) throws FactoryException
    Creates an unit of measurement from a code. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:uom:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/uom/`authority`/`version`/`code
    Specified by:
      `createUnit` in interface `CSAuthorityFactory`
    Overrides:
      `createUnit` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the unit of measurement for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `Units​.valueOfEPSG(int)`

  - ### createParameterDescriptor

    public ParameterDescriptor<?> createParameterDescriptor(String code) throws FactoryException
    Creates a definition of a single parameter used by an operation method. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:parameter:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/parameter/`authority`/`version`/`code
    Overrides:
      `createParameterDescriptor` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the parameter descriptor for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultParameterDescriptor`
      - Apache SIS™ Coordinate Operation Methods

  - ### createOperationMethod

    public OperationMethod createOperationMethod(String code) throws FactoryException
    Creates a description of the algorithm and parameters used to perform a coordinate operation. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:method:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/method/`authority`/`version`/`code
    If the given code is not found in the geodetic registry, then this method searches also among the build-in methods.
    Specified by:
      `createOperationMethod` in interface `CoordinateOperationAuthorityFactory`
    Overrides:
      `createOperationMethod` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the operation method for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `DefaultOperationMethod`
      - Apache SIS™ Coordinate Operation Methods

  - ### createCoordinateOperation

    public CoordinateOperation createCoordinateOperation(String code) throws FactoryException
    Creates an operation for transforming coordinates in the source CRS to coordinates in the target CRS. The given code can use any of the following patterns, where version is optional:
    - authority`:`code
    - authority`:`version`:`code
    - `urn:ogc:def:coordinateOperation:`authority`:`version`:`code
    - `http://www​.opengis​.net/def/coordinateOperation/`authority`/`version`/`code
    Specified by:
      `createCoordinateOperation` in interface `CoordinateOperationAuthorityFactory`
    Overrides:
      `createCoordinateOperation` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by authority.
    Returns:
      the operation for the given code.
    Throws:
      `FactoryException` - if the object creation failed.
    See Also:
      - `AbstractCoordinateOperation`

  - ### createFromCoordinateReferenceSystemCodes

    public Set<CoordinateOperation> createFromCoordinateReferenceSystemCodes(String sourceCRS, String targetCRS) throws FactoryException
    Creates operations from source and target coordinate reference system codes. If the authority for the two given CRS is handled by the same factory, then this method delegates to that factory. Otherwise this method returns an empty set.
    Specified by:
      `createFromCoordinateReferenceSystemCodes` in interface `CoordinateOperationAuthorityFactory`
    Overrides:
      `createFromCoordinateReferenceSystemCodes` in class `GeodeticAuthorityFactory`
    Parameters:
      `sourceCRS` - coded value of source coordinate reference system.
      `targetCRS` - coded value of target coordinate reference system.
    Returns:
      the operations from `sourceCRS` to `targetCRS`.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### newIdentifiedObjectFinder

    public IdentifiedObjectFinder newIdentifiedObjectFinder() throws FactoryException
    Creates a finder which can be used for looking up unidentified objects. The default implementation delegates the lookups to the underlying factories.
    Overrides:
      `newIdentifiedObjectFinder` in class `GeodeticAuthorityFactory`
    Returns:
      a finder to use for looking up unidentified objects.
    Throws:
      `FactoryException` - if the finder cannot be created.
    See Also:
      - `IdentifiedObjects​.newFinder(String)`

  - ### reload

    public void reload()
    Clears the cache and notifies this `MultiAuthoritiesFactory` that all factories will need to be fetched again from the providers given at construction time. In addition, all providers that are instances of `ServiceLoader` will have their `reload()` method invoked.

    This method is intended for use in situations in which new factories can be installed into a running Java virtual machine.