# Class EPSGDataAccess

Object
AbstractFactory
GeodeticAuthorityFactory
EPSGDataAccess

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

public class EPSGDataAccess extends GeodeticAuthorityFactory implements CRSAuthorityFactory, CSAuthorityFactory, DatumAuthorityFactory, CoordinateOperationAuthorityFactory, Localized, AutoCloseable
Data Access Object (DAO) creating geodetic objects from a JDBC connection to an EPSG database. The EPSG database is freely available at https://epsg.org/. Current version of this class requires EPSG database version 6.6 or above.

## Object identifier (code or name)

EPSG codes are numerical identifiers. For example, code 3395 stands for WGS 84 / World Mercator. Coordinate Reference Objects are normally created from their numerical codes, but this factory accepts also names. For example, `createProjectedCRS("3395")` and `createProjectedCRS("WGS 84 / World Mercator")` both fetch the same object. However, names may be ambiguous since the same name may be used for more than one object. This is the case of WGS 84 for instance. If such an ambiguity is found, an exception will be thrown.

## Life cycle and caching

`EPSGDataAccess` instances should be short-lived since they may hold a significant amount of JDBC resource. `EPSGDataAccess` instances are created on the fly by `EPSGFactory` and closed after a relatively short timeout. In addition `EPSGFactory` caches the most recently created objects, which reduce greatly the number of `EPSGDataAccess` instantiations (and consequently the number of database accesses) in the common case where only a few EPSG codes are used by an application. `EPSGDataAccess​.createFoo(String)` methods do not cache by themselves and query the database on every invocation.

Since:
  0.7
See Also:
  - List of authority codes

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final Connection`
  `connection`
  The connection to the EPSG database.
  `protected final EPSGFactory`
  `owner`
  The `ConcurrentAuthorityFactory` that created this Data Access Object (DAO).
  `protected final SQLTranslator`
  `translator`
  The translator from the SQL statements hard-coded in this class to SQL statements compatible with the actual EPSG database.

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `EPSGDataAccess(EPSGFactory owner, Connection connection, SQLTranslator translator)`
  Creates a factory using the given connection.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  Closes the JDBC connection used by this factory.
  `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.
  `Datum`
  `createDatum(String code)`
  Creates an arbitrary datum from a code.
  `Ellipsoid`
  `createEllipsoid(String code)`
  Creates a geometric figure that can be used to describe the approximate shape of the earth.
  `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.
  `IdentifiedObject`
  `createObject(String code)`
  Returns an arbitrary object from a code.
  `OperationMethod`
  `createOperationMethod(String code)`
  Creates 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.
  `PrimeMeridian`
  `createPrimeMeridian(String code)`
  Creates a prime meridian defining the origin from which longitude values are determined.
  `Unit<?>`
  `createUnit(String code)`
  Creates an unit of measurement from a code.
  `Citation`
  `getAuthority()`
  Returns the authority for this EPSG dataset.
  `Set<String>`
  `getAuthorityCodes(Class<? extends IdentifiedObject> type)`
  Returns the set of authority codes of the given type.
  `Set<String>`
  `getCodeSpaces()`
  Returns an empty set since this data access class expects no namespace.
  `Optional<InternationalString>`
  `getDescriptionText(Class<? extends IdentifiedObject> type, String code)`
  Gets a description of the object corresponding to a code.
  `Locale`
  `getLocale()`
  Returns the locale used by this factory for producing error messages.
  `IdentifiedObjectFinder`
  `newIdentifiedObjectFinder()`
  Returns a finder which can be used for looking up unidentified objects.

  ### Methods inherited from class GeodeticAuthorityFactory

  `createCartesianCS, createCompoundCRS, createCylindricalCS, createDatumEnsemble, createDerivedCRS, createEllipsoidalCS, createEngineeringCRS, createEngineeringDatum, createGeocentricCRS, createGeodeticDatum, createGeographicCRS, createImageCRS, createImageDatum, createObject, createParametricCRS, createParametricCS, createParametricDatum, createPolarCS, createProjectedCRS, createSphericalCS, createTemporalCRS, createTemporalDatum, createTimeCS, createVerticalCRS, createVerticalCS, createVerticalDatum, 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 CRSAuthorityFactory

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

  ### Methods inherited from interface CSAuthorityFactory

  `createCartesianCS, createCylindricalCS, createEllipsoidalCS, createPolarCS, createSphericalCS, createTimeCS, createVerticalCS`

  ### Methods inherited from interface DatumAuthorityFactory

  `createEngineeringDatum, createGeodeticDatum, createImageDatum, createTemporalDatum, createVerticalDatum`

  ### Methods inherited from interface Factory

  `getVendor`

- ## Field Details

  - ### owner

    protected final EPSGFactory owner
    The `ConcurrentAuthorityFactory` that created this Data Access Object (DAO). The owner supplies caching for all `createFoo(String)` methods.

  - ### connection

    protected final Connection connection
    The connection to the EPSG database. This connection is specified at construction time and closed by the `close()` method.
    See Also:
      - `close()`

  - ### translator

    protected final SQLTranslator translator
    The translator from the SQL statements hard-coded in this class to SQL statements compatible with the actual EPSG database. This translator may also change the schema and table names used in the queries in the actual database uses different names.

- ## Constructor Details

  - ### EPSGDataAccess

    protected EPSGDataAccess(EPSGFactory owner, Connection connection, SQLTranslator translator) throws SQLException
    Creates a factory using the given connection. The connection will be closed when this factory will be closed.

    #### API design note

    This constructor is protected because `EPSGDataAccess` instances should not be created as standalone factories. This constructor is for allowing definition of custom `EPSGDataAccess` subclasses, which are then instantiated by the `EPSGFactory​.newDataAccess(Connection, SQLTranslator)` method of a corresponding custom `EPSGFactory` subclass.
    Parameters:
      `owner` - the `EPSGFactory` which is creating this Data Access Object (DAO).
      `connection` - the connection to the underlying EPSG database.
      `translator` - translator from the SQL statements hard-coded in this class to SQL statements compatible with the actual EPSG database.
    Throws:
      `SQLException` - if an error occurred with the database connection.
    See Also:
      - `EPSGFactory​.newDataAccess(Connection, SQLTranslator)`

- ## Method Details

  - ### getLocale

    public Locale getLocale()
    Returns the locale used by this factory for producing error messages. This locale does not change the way data are read from the EPSG database.
    Specified by:
      `getLocale` in interface `Localized`
    Returns:
      the locale for error messages.

  - ### getAuthority

    public Citation getAuthority()
    Returns the authority for this EPSG dataset. The returned citation contains the database version in the edition attribute, together with date of last update in the edition date. Example (the exact content will vary with Apache SIS versions, JDBC driver and EPSG dataset versions):

          Citation
          ├─ Title ……………………………………………………… EPSG Geodetic Parameter Dataset
          ├─ Identifier ………………………………………… EPSG
          ├─ Online resource (1 of 2)
          │  ├─ Linkage ………………………………………… https://epsg.org/
          │  └─ Function ……………………………………… Browse
          └─ Online resource (2 of 2)
             ├─ Linkage ………………………………………… jdbc:derby:/my/path/to/SIS_DATA/Databases/SpatialMetadata
             ├─ Description ……………………………… EPSG dataset version 9.1 on “Apache Derby Embedded JDBC Driver” version 10.14.
             └─ Function ……………………………………… Connection

    Specified by:
      `getAuthority` in interface `AuthorityFactory`
    Specified by:
      `getAuthority` in class `GeodeticAuthorityFactory`
    Returns:
      the organization responsible for definition of the database, or `null` if unknown.
    See Also:
      - `AbstractFactory​.getVendor()`

  - ### getAuthorityCodes

    public Set<String> getAuthorityCodes(Class<? extends IdentifiedObject> type) throws FactoryException
    Returns the set of authority codes of the given type. This returned set may keep a connection to the EPSG database. Therefore, the set can execute efficiently idioms like the following one:

        getAuthorityCodes(type).containsAll(others);

    The returned set should not be referenced for a long time, as it may prevent this factory to release JDBC resources. If the set of codes is needed for a long time, their values should be copied in another collection object.

    #### Handling of deprecated objects

    The collection returned by this method gives an enumeration of EPSG codes for valid objects only. The EPSG codes of deprecated objects are not included in iterations, computation of `Set​.size()` value, `Set​.toString()` result, etc. with one exception: a call to `Set​.contains(…)` will return `true` if the given identifier exists for a deprecated object, even if that identifier does not show up in iterations. In other words, the returned collection behaves as if deprecated codes were included in the set but invisible.
    Specified by:
      `getAuthorityCodes` in interface `AuthorityFactory`
    Parameters:
      `type` - the type of spatial reference objects for which to get the authority codes.
    Returns:
      the set of authority codes for spatial reference objects of the given type (may be an empty set).
    Throws:
      `FactoryException` - if access to the underlying database failed.

  - ### getCodeSpaces

    public Set<String> getCodeSpaces()
    Returns an empty set since this data access class expects no namespace. Code shall be given to `createFoo(String)` methods directly, without `"EPSG:"` prefix.
    Overrides:
      `getCodeSpaces` in class `GeodeticAuthorityFactory`
    Returns:
      empty set.

  - ### getDescriptionText

    public Optional<InternationalString> getDescriptionText(Class<? extends IdentifiedObject> type, String code) throws FactoryException
    Gets a description of the object corresponding to a code. This method returns the object name in a lightweight manner, without creating the full `IdentifiedObject`.
    Overrides:
      `getDescriptionText` in class `GeodeticAuthorityFactory`
    Parameters:
      `type` - the type of object for which to get a description.
      `code` - value allocated by authority.
    Returns:
      the object name, or empty if none.
    Throws:
      `FactoryException` - if the query failed for some other reason.
    Since:
      1.5

  - ### createObject

    public IdentifiedObject createObject(String code) throws NoSuchAuthorityCodeException, FactoryException
    Returns an arbitrary object from a code. The default implementation delegates to more specific methods, for example `createCoordinateReferenceSystem(String)`, `createDatum(String)`, etc. until a successful one is found.

    Note that this method may be ambiguous because the same EPSG code can be used for different kinds of objects. This method throws an exception on a best-effort basis if it detects an ambiguity. It is recommended to invoke the most specific `createFoo(String)` method when the desired type is known, both for performance reason and for avoiding ambiguity.

    Specified by:
      `createObject` in interface `AuthorityFactory`
    Specified by:
      `createObject` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the object for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `createCoordinateReferenceSystem(String)`
      - `createDatum(String)`
      - `createCoordinateSystem(String)`

  - ### createCoordinateReferenceSystem

    public CoordinateReferenceSystem createCoordinateReferenceSystem(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates an arbitrary coordinate reference system from a code. The returned object will typically be an instance of `GeographicCRS`, `ProjectedCRS`, `VerticalCRS` or `CompoundCRS`.

    #### Examples

    Some EPSG codes for coordinate reference systems are:

    EPSG codes examples
    Code | Type | Description
    --- | --- | ---
    4326 | Geographic | World Geodetic System 1984
    4979 | Geographic 3D | World Geodetic System 1984
    4978 | Geocentric | World Geodetic System 1984
    3395 | Projected | WGS 84 / World Mercator
    5714 | Vertical | Mean Sea Level height
    6349 | Compound | NAD83(2011) + NAVD88 height
    5800 | Engineering | Astra Minas Grid

    Specified by:
      `createCoordinateReferenceSystem` in interface `CRSAuthorityFactory`
    Overrides:
      `createCoordinateReferenceSystem` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the coordinate reference system for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `AbstractCRS`
      - `CRS​.forCode(String)`

  - ### createDatum

    public Datum createDatum(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates an arbitrary datum from a code. The returned object will typically be an instance of `GeodeticDatum`, `VerticalDatum` or `TemporalDatum`.

    #### Examples

    Some EPSG codes for datums are:

    EPSG codes examples
    Code | Type | Description
    --- | --- | ---
    6326 | Datum ensemble | World Geodetic System 1984
    6322 | Dynamic geodetic | World Geodetic System 1972
    1027 | Vertical | EGM2008 geoid
    5100 | Vertical | Mean Sea Level
    9315 | Engineering | Seismic bin grid datum

    Specified by:
      `createDatum` in interface `DatumAuthorityFactory`
    Overrides:
      `createDatum` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the datum for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `AbstractDatum`

  - ### createEllipsoid

    public Ellipsoid createEllipsoid(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates a geometric figure that can be used to describe the approximate shape of the earth. In mathematical terms, it is a surface formed by the rotation of an ellipse about its minor axis.

    #### Examples

    Some EPSG codes for ellipsoids are:

    EPSG codes examples
    Code | Description
    --- | ---
    7030 | WGS 84
    7034 | Clarke 1880
    7048 | GRS 1980 Authalic Sphere

    Specified by:
      `createEllipsoid` in interface `DatumAuthorityFactory`
    Overrides:
      `createEllipsoid` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the ellipsoid for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `GeodeticAuthorityFactory​.createGeodeticDatum(String)`
      - `GeodeticAuthorityFactory​.createEllipsoidalCS(String)`
      - `DefaultEllipsoid`

  - ### createPrimeMeridian

    public PrimeMeridian createPrimeMeridian(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates a prime meridian defining the origin from which longitude values are determined.

    #### Examples

    Some EPSG codes for prime meridians are:

    EPSG codes examples
    Code | Description
    --- | ---
    8901 | Greenwich
    8903 | Paris
    8904 | Bogota
    8905 | Madrid
    8906 | Rome

    Specified by:
      `createPrimeMeridian` in interface `DatumAuthorityFactory`
    Overrides:
      `createPrimeMeridian` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the prime meridian for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `GeodeticAuthorityFactory​.createGeodeticDatum(String)`
      - `DefaultPrimeMeridian`

  - ### createExtent

    public Extent createExtent(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates information about spatial, vertical, and temporal extent (usually a domain of validity) from a code.

    #### Examples

    Some EPSG codes for extents are:

    EPSG codes examples
    Code | Description
    --- | ---
    1262 | World
    3391 | World - between 80°S and 84°N

    #### History

    The table name was `"Area"` before version 10 of the EPSG geodetic dataset. Starting from EPSG version 10, the table name is `"Extent"` but the first 7 columns are the same with different names and order. The last columns are news.

    Before EPSG version 10, extents were referenced in columns named `AREA_OF_USE_CODE`. Starting with version 10, that column still exists but is deprecated and contains only `null` values. An `"Usage"` intersection table is used instead.

    Overrides:
      `createExtent` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the extent for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `createCoordinateReferenceSystem(String)`
      - `createDatum(String)`
      - `DefaultExtent`

  - ### createCoordinateSystem

    public CoordinateSystem createCoordinateSystem(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates an arbitrary coordinate system from a code. The returned object will typically be an instance of `EllipsoidalCS`, `CartesianCS` or `VerticalCS`.

    #### Examples

    Some EPSG codes for coordinate systems are:

    EPSG codes examples
    Code | Type | Axes | Orientations | Unit
    --- | --- | --- | --- | ---
    4406 | Cartesian 2D CS | easting, northing (E,N) | east, north | kilometre
    4496 | Cartesian 2D CS | easting, northing (E,N) | east, north | metre
    4500 | Cartesian 2D CS | northing, easting (N,E) | north, east | metre
    4491 | Cartesian 2D CS | westing, northing (W,N) | west, north | metre
    6422 | Ellipsoidal 2D CS | latitude, longitude | north, east | degree
    6424 | Ellipsoidal 2D CS | longitude, latitude | east, north | degree
    6429 | Ellipsoidal 2D CS | longitude, latitude | east, north | radian
    6423 | Ellipsoidal 3D CS | latitude, longitude, ellipsoidal height | north, east, up | degree, degree, metre
    6404 | Spherical 3D CS | latitude, longitude, radius | north, east, up | degree, degree, metre
    6498 | Vertical CS | depth (D) | down | metre
    6499 | Vertical CS | height (H) | up | metre

    Specified by:
      `createCoordinateSystem` in interface `CSAuthorityFactory`
    Overrides:
      `createCoordinateSystem` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the coordinate system for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `AbstractCS`
      - `CoordinateSystems​.getEpsgCode(Unit, AxisDirection...)`

  - ### createCoordinateSystemAxis

    public CoordinateSystemAxis createCoordinateSystemAxis(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates a coordinate system axis with name, direction, unit and range of values.

    #### Examples

    Some EPSG codes for axes are:

    EPSG codes examples
    Code | Description | Unit
    --- | --- | ---
    106 | Latitude (φ) | degree
    107 | Longitude (λ) | degree
    1 | Easting (E) | metre
    2 | Northing (N) | metre

    Specified by:
      `createCoordinateSystemAxis` in interface `CSAuthorityFactory`
    Overrides:
      `createCoordinateSystemAxis` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the axis for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `createCoordinateSystem(String)`
      - `DefaultCoordinateSystemAxis`

  - ### createUnit

    public Unit<?> createUnit(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates an unit of measurement from a code. Current implementation first checks if `Units​.valueOfEPSG(int)` can provide a hard-coded unit for the given code before to try to parse the information found in the database. This is done that way for better support of non-straightforward units like sexagesimal degrees (EPSG:9110 and 9111).

    #### Examples

    Some EPSG codes for units are:

    EPSG codes examples
    Code | Description
    --- | ---
    9002 | decimal degree
    9001 | metre
    9030 | kilometre
    1040 | second
    1029 | year

    Specified by:
      `createUnit` in interface `CSAuthorityFactory`
    Overrides:
      `createUnit` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the unit of measurement for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `Units​.valueOfEPSG(int)`

  - ### createParameterDescriptor

    public ParameterDescriptor<?> createParameterDescriptor(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates a definition of a single parameter used by an operation method.

    #### Examples

    Some EPSG codes for parameters are:

    EPSG codes examples
    Code | Description
    --- | ---
    8801 | Latitude of natural origin
    8802 | Longitude of natural origin
    8805 | Scale factor at natural origin
    8806 | False easting
    8807 | False northing

    Overrides:
      `createParameterDescriptor` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the parameter descriptor for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `DefaultParameterDescriptor`

  - ### createOperationMethod

    public OperationMethod createOperationMethod(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates description of the algorithm and parameters used to perform a coordinate operation. An `OperationMethod` is a kind of metadata: it does not perform any coordinate operation (e.g. map projection) by itself, but tells us what is needed in order to perform such operation.

    #### Examples

    Some EPSG codes for operation methods are:

    EPSG codes examples
    Code | Description
    --- | ---
    9804 | Mercator (variant A)
    9802 | Lambert Conic Conformal (2SP)
    9810 | Polar Stereographic (variant A)
    9624 | Affine parametric transformation

    Specified by:
      `createOperationMethod` in interface `CoordinateOperationAuthorityFactory`
    Overrides:
      `createOperationMethod` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the operation method for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `DefaultOperationMethod`
      - Apache SIS™ Coordinate Operation Methods

  - ### createCoordinateOperation

    public CoordinateOperation createCoordinateOperation(String code) throws NoSuchAuthorityCodeException, FactoryException
    Creates an operation for transforming coordinates in the source CRS to coordinates in the target CRS. The returned object will either be a `Conversion` or a `Transformation`, depending on the code.

    #### Examples

    Some EPSG codes for coordinate transformations are:

    EPSG codes examples
    Code | Description
    --- | ---
    1133 | ED50 to WGS 84 (1)
    1241 | NAD27 to NAD83 (1)
    1173 | NAD27 to WGS 84 (4)
    6326 | NAD83(2011) to NAVD88 height (1)

    Specified by:
      `createCoordinateOperation` in interface `CoordinateOperationAuthorityFactory`
    Overrides:
      `createCoordinateOperation` in class `GeodeticAuthorityFactory`
    Parameters:
      `code` - value allocated by EPSG.
    Returns:
      the operation for the given code.
    Throws:
      `NoSuchAuthorityCodeException` - if the specified `code` was not found.
      `FactoryException` - if the object creation failed for some other reason.
    See Also:
      - `AbstractCoordinateOperation`

  - ### createFromCoordinateReferenceSystemCodes

    public Set<CoordinateOperation> createFromCoordinateReferenceSystemCodes(String sourceCRS, String targetCRS) throws FactoryException
    Creates operations from source and target coordinate reference system codes. This method only extract the information explicitly declared in the EPSG database; it does not attempt to infer by itself operations that are not explicitly recorded in the database.

    The returned set is ordered with the most accurate operations first. Deprecated operations are not included in the set; if a deprecated operation is really wanted, it can be fetched by an explicit call to `createCoordinateOperation(String)`.

    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:
      `NoSuchAuthorityCodeException` - if a specified code was not found.
      `FactoryException` - if the object creation failed for some other reason.

  - ### newIdentifiedObjectFinder

    public IdentifiedObjectFinder newIdentifiedObjectFinder() throws FactoryException
    Returns a finder which can be used for looking up unidentified objects. The finder tries to fetch a fully identified object from an incomplete one, for example from an object without "`ID[…]`" or "`AUTHORITY[…]`" element in Well Known Text.

    #### Lifetime

    The finder returned by this method depends on this `EPSGDataAccess` instance. The finder should not be used after this factory has been closed or given back to the `EPSGFactory`.
    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)`

  - ### close

    public void close() throws FactoryException
    Closes the JDBC connection used by this factory. If this `EPSGDataAccess` is used by an `EPSGFactory`, then this method will be automatically invoked after some timeout.
    Specified by:
      `close` in interface `AutoCloseable`
    Throws:
      `FactoryException` - if an error occurred while closing the connection.
    See Also:
      - `connection`