# Interface DatumFactory

All Superinterfaces:
  `Factory, ObjectFactory`

All Known Implementing Classes:
  `GeodeticObjectFactory`

@UML(identifier="CS_CoordinateSystemFactory", specification=OGC_01009) public interface DatumFactory extends ObjectFactory
Builds up complex datums from simpler objects or values. `DatumFactory` allows applications to make datums that cannot be created by a `DatumAuthorityFactory`. This factory is very flexible, whereas the authority factory is easier to use. So `DatumAuthorityFactory` can be used to make "standard" datums, and `DatumFactory` can be used to make "special" datums.

Since:
  1.0
See Also:
  - `CSFactory`
  - `CRSFactory`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Ellipsoid`
  `createEllipsoid(Map<String,?> properties, double semiMajorAxis, double semiMinorAxis, Unit<Length> unit)`
  Creates an ellipsoid from radius values.
  `EngineeringDatum`
  `createEngineeringDatum(Map<String,?> properties)`
  Creates an engineering datum.
  `Ellipsoid`
  `createFlattenedSphere(Map<String,?> properties, double semiMajorAxis, double inverseFlattening, Unit<Length> unit)`
  Creates an ellipsoid from an major radius, and inverse flattening.
  `GeodeticDatum`
  `createGeodeticDatum(Map<String,?> properties, Ellipsoid ellipsoid, PrimeMeridian primeMeridian)`
  Creates geodetic datum from ellipsoid and (optionally) Bursa-Wolf parameters.
  `ImageDatum`
  `createImageDatum(Map<String,?> properties, PixelInCell pixelInCell)`
  Creates an image datum.
  `PrimeMeridian`
  `createPrimeMeridian(Map<String,?> properties, double longitude, Unit<Angle> unit)`
  Creates a prime meridian, relative to Greenwich.
  `TemporalDatum`
  `createTemporalDatum(Map<String,?> properties, Date origin)`
  Creates a temporal datum from an enumerated type value.
  `VerticalDatum`
  `createVerticalDatum(Map<String,?> properties, VerticalDatumType type)`
  Creates a vertical datum from an enumerated type value.

  ### Methods inherited from interface Factory

  `getVendor`

- ## Method Details

  - ### createEngineeringDatum

    @UML(identifier="createLocalDatum", specification=OGC_01009) EngineeringDatum createEngineeringDatum(Map<String,?> properties) throws FactoryException
    Creates an engineering datum.
    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
    Returns:
      The datum for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### createGeodeticDatum

    @UML(identifier="createHorizontalDatum", specification=OGC_01009) GeodeticDatum createGeodeticDatum(Map<String,?> properties, Ellipsoid ellipsoid, PrimeMeridian primeMeridian) throws FactoryException
    Creates geodetic datum from ellipsoid and (optionally) Bursa-Wolf parameters.
    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
      `ellipsoid` - Ellipsoid to use in new geodetic datum.
      `primeMeridian` - Prime meridian to use in new geodetic datum.
    Returns:
      The datum for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### createImageDatum

    ImageDatum createImageDatum(Map<String,?> properties, PixelInCell pixelInCell) throws FactoryException
    Creates an image datum.
    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
      `pixelInCell` - Specification of the way the image grid is associated with the image data attributes.
    Returns:
      The datum for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### createTemporalDatum

    TemporalDatum createTemporalDatum(Map<String,?> properties, Date origin) throws FactoryException
    Creates a temporal datum from an enumerated type value.

    Warning: The argument type of this method may change in GeoAPI 3.1 release. It may be replaced by a type matching more closely either ISO 19108 (Temporal Schema) or ISO 19103.

    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
      `origin` - The date and time origin of this temporal datum.
    Returns:
      The datum for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### createVerticalDatum

    @UML(identifier="createVerticalDatum", specification=OGC_01009) VerticalDatum createVerticalDatum(Map<String,?> properties, VerticalDatumType type) throws FactoryException
    Creates a vertical datum from an enumerated type value.
    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
      `type` - The type of this vertical datum (often "geoidal").
    Returns:
      The datum for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### createEllipsoid

    @UML(identifier="createEllipsoid", specification=OGC_01009) Ellipsoid createEllipsoid(Map<String,?> properties, double semiMajorAxis, double semiMinorAxis, Unit<Length> unit) throws FactoryException
    Creates an ellipsoid from radius values.
    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
      `semiMajorAxis` - Equatorial radius in supplied linear units.
      `semiMinorAxis` - Polar radius in supplied linear units.
      `unit` - Linear units of ellipsoid axes.
    Returns:
      The ellipsoid for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### createFlattenedSphere

    @UML(identifier="createFlattenedSphere", specification=OGC_01009) Ellipsoid createFlattenedSphere(Map<String,?> properties, double semiMajorAxis, double inverseFlattening, Unit<Length> unit) throws FactoryException
    Creates an ellipsoid from an major radius, and inverse flattening.
    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
      `semiMajorAxis` - Equatorial radius in supplied linear units.
      `inverseFlattening` - Eccentricity of ellipsoid.
      `unit` - Linear units of major axis.
    Returns:
      The ellipsoid for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.

  - ### createPrimeMeridian

    @UML(identifier="createPrimeMeridian", specification=OGC_01009) PrimeMeridian createPrimeMeridian(Map<String,?> properties, double longitude, Unit<Angle> unit) throws FactoryException
    Creates a prime meridian, relative to Greenwich.
    Parameters:
      `properties` - Name and other properties to give to the new object. Available properties are listed there.
      `longitude` - Longitude of prime meridian in supplied angular units East of Greenwich.
      `unit` - Angular units of longitude.
    Returns:
      The prime meridian for the given properties.
    Throws:
      `FactoryException` - if the object creation failed.