# Interface Ellipsoid

All Superinterfaces:
  `IdentifiedObject`

All Known Implementing Classes:
  `DefaultEllipsoid`

@UML(identifier="CD_Ellipsoid", specification=ISO_19111) public interface Ellipsoid extends IdentifiedObject
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. An ellipsoid requires two defining parameters:

- semi-major axis and inverse flattening, or
- semi-major axis and semi-minor axis.

There is not just one ellipsoid. An ellipsoid is a matter of choice, and therefore many choices are possible. The size and shape of an ellipsoid was traditionally chosen such that the surface of the geoid is matched as closely as possible locally, e.g. in a country. A number of global best-fit ellipsoids are now available. An association of an ellipsoid with the earth is made through the definition of the size and shape of the ellipsoid and the position and orientation of this ellipsoid with respect to the earth. Collectively this choice is captured by the concept of "geodetic datum". A change of size, shape, position or orientation of an ellipsoid will result in a change of geographic coordinates of a point and be described as a different geodetic datum. Conversely geographic coordinates are unambiguous only when associated with a geodetic datum.

Since:
  1.0

- ## Field Summary

  ### Fields inherited from interface IdentifiedObject

  `ALIAS_KEY, IDENTIFIERS_KEY, NAME_KEY, REMARKS_KEY`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Unit<Length>`
  `getAxisUnit()`
  Returns the linear unit of the semi-major and semi-minor axis values.
  `double`
  `getInverseFlattening()`
  Returns the value of the inverse of the flattening constant.
  `double`
  `getSemiMajorAxis()`
  Length of the semi-major axis of the ellipsoid.
  `double`
  `getSemiMinorAxis()`
  Length of the semi-minor axis of the ellipsoid.
  `boolean`
  `isIvfDefinitive()`
  Indicates if the inverse flattening is definitive for this ellipsoid.
  `boolean`
  `isSphere()`
  `true` if the ellipsoid is degenerate and is actually a sphere.

  ### Methods inherited from interface IdentifiedObject

  `getAlias, getIdentifiers, getName, getRemarks, toWKT`

- ## Method Details

  - ### getAxisUnit

    @UML(identifier="getAxisUnit", specification=OGC_01009) Unit<Length> getAxisUnit()
    Returns the linear unit of the semi-major and semi-minor axis values.
    Returns:
      The axis linear unit.

  - ### getSemiMajorAxis

    @UML(identifier="semiMajorAxis", obligation=MANDATORY, specification=ISO_19111) double getSemiMajorAxis()
    Length of the semi-major axis of the ellipsoid. This is the equatorial radius in axis linear unit.
    Returns:
      Length of semi-major axis.

  - ### getSemiMinorAxis

    @UML(identifier="secondDefiningParameter.semiMinorAxis", obligation=CONDITIONAL, specification=ISO_19111) double getSemiMinorAxis()
    Length of the semi-minor axis of the ellipsoid. This is the polar radius in axis linear unit.
    Returns:
      Length of semi-minor axis.

  - ### getInverseFlattening

    @UML(identifier="secondDefiningParameter.inverseFlattening", obligation=CONDITIONAL, specification=ISO_19111) double getInverseFlattening()
    Returns the value of the inverse of the flattening constant. The inverse flattening is related to the equatorial/polar radius by the formula ivf = re/(re-rp). For perfect spheres (i.e. if `isSphere()` returns `true`), the `POSITIVE_INFINITY` value is used.
    Returns:
      The inverse flattening value.

  - ### isIvfDefinitive

    @UML(identifier="CS_Ellipsoid.isIvfDefinitive", obligation=CONDITIONAL, specification=OGC_01009) boolean isIvfDefinitive()
    Indicates if the inverse flattening is definitive for this ellipsoid. Some ellipsoids use the IVF as the defining value, and calculate the polar radius whenever asked. Other ellipsoids use the polar radius to calculate the IVF whenever asked. This distinction can be important to avoid floating-point rounding errors.
    Returns:
      `true` if the inverse flattening is definitive, or `false` if the polar radius is definitive.

  - ### isSphere

    @UML(identifier="secondDefiningParameter.isSphere", obligation=CONDITIONAL, specification=ISO_19111) boolean isSphere()
    `true` if the ellipsoid is degenerate and is actually a sphere. The sphere is completely defined by the semi-major axis, which is the radius of the sphere.
    Returns:
      `true` if the ellipsoid is degenerate and is actually a sphere.