Package org.apache.sis.referencing.operation.projection

# Class AzimuthalEquidistant

Object
FormattableObject
AbstractMathTransform
AbstractMathTransform2D
NormalizedProjection
AzimuthalEquidistant

All Implemented Interfaces:
  `Serializable`, `Parameterized`, `LenientComparable`, `MathTransform`, `MathTransform2D`

Direct Known Subclasses:
  `ModifiedAzimuthalEquidistant`

public class AzimuthalEquidistant extends NormalizedProjection
Azimuthal Equidistant (Spherical) projection. This projection method has no EPSG code. See the following references for an overview:

- Azimuthal equidistant projection on Wikipedia
- Azimuthal Equidistant Projection on MathWorld

Current implementation supports only the spherical case. For ellipsoidal formulas, the `ModifiedAzimuthalEquidistant` class provides an approximation valid under 800 kilometres of the projection centre.
Note of projection variants: formulas for this map projection have been published by Snyder (1987) in the following forms:

- Azimuthal Equidistant projection for the sphere. This form has no EPSG code. It is implemented in Apache SIS as "Azimuthal Equidistant (Spherical)".
- Polar aspect of ellipsoidal Azimuthal Equidistant. This form has no EPSG code. It is not yet implemented in Apache SIS.
- Oblique and equatorial aspects of ellipsoidal Azimuthal Equidistant:
  - Nearly rigorous sets of formulas. The EPSG name is "Modified Azimuthal Equidistant" (EPSG:9832). This projection is implemented by `ModifiedAzimuthalEquidistant`.
  - Approximate sets of formulas. The EPSG name is "Guam projection" (EPSG:9831). This projection is not yet implemented in Apache SIS.

This base class is aimed to provide the general case valid for all distances; the fact that current version uses spherical formulas should be considered as an implementation limitation that may change in future version. Subclasses are specialization for more restricted areas.

Since:
  1.1
See Also:
  - `ModifiedAzimuthalEquidistant`
  - Serialized Form

Defined in the `sis-referencing` module

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class NormalizedProjection

  `NormalizedProjection​.ParameterRole`

- ## Field Summary

  ### Fields inherited from class NormalizedProjection

  `eccentricity, eccentricitySquared`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AzimuthalEquidistant(OperationMethod method, Parameters parameters)`
  Creates a Azimuthal Equidistant projection from the given parameters.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff)`
  Converts the specified (x,y) coordinates and stores the result in `dstPts` (angles in radians).
  `Matrix`
  `transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, boolean derivate)`
  Converts the specified (λ,φ) coordinate and stores the (x,y) result in `dstPts`.

  ### Methods inherited from class NormalizedProjection

  `computeHashCode, createMapProjection, equals, getContextualParameters, getParameterDescriptors, getParameterValues, inverse, tryConcatenate`

  ### Methods inherited from class AbstractMathTransform2D

  `createTransformedShape, derivative, getSourceDimensions, getTargetDimensions, transform`

  ### Methods inherited from class AbstractMathTransform

  `derivative, equals, formatTo, hashCode, isIdentity, transform, transform, transform, transform, transform`

  ### Methods inherited from class FormattableObject

  `print, toString, toString, toWKT`

  ### Methods inherited from class Object

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

  ### Methods inherited from interface MathTransform

  `derivative, isIdentity, toWKT, transform, transform, transform, transform, transform`

- ## Constructor Details

  - ### AzimuthalEquidistant

    public AzimuthalEquidistant(OperationMethod method, Parameters parameters)
    Creates a Azimuthal Equidistant projection from the given parameters. The `method` argument can be the description of one of the following:
    - "Azimuthal Equidistant (Spherical)".
    Parameters:
      `method` - description of the projection parameters.
      `parameters` - the parameter values of the projection to create.

- ## Method Details

  - ### transform

    public Matrix transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, boolean derivate) throws ProjectionException
    Converts the specified (λ,φ) coordinate and stores the (x,y) result in `dstPts`.
    Specified by:
      `transform` in class `NormalizedProjection`
    Parameters:
      `srcPts` - source point coordinate, as (longitude, latitude) in radians.
      `srcOff` - the offset of the single coordinate to be converted in the source array.
      `dstPts` - the array into which the converted coordinate is returned (may be the same than `srcPts`).
      `dstOff` - the offset of the location of the converted coordinate that is stored in the destination array.
      `derivate` - `true` for computing the derivative, or `false` if not needed.
    Returns:
      the matrix of the projection derivative at the given source position, or `null` if the `derivate` argument is `false`.
    Throws:
      `ProjectionException` - if the coordinate can not be converted.
    See Also:
      - `AbstractMathTransform​.derivative(DirectPosition)`
      - `AbstractMathTransform​.transform(DirectPosition, DirectPosition)`
      - `MathTransforms​.derivativeAndTransform(MathTransform, double[], int, double[], int)`

  - ### inverseTransform

    protected void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff) throws ProjectionException
    Converts the specified (x,y) coordinates and stores the result in `dstPts` (angles in radians).
    Specified by:
      `inverseTransform` in class `NormalizedProjection`
    Parameters:
      `srcPts` - the array containing the source point coordinate, as linear distance on a unit sphere or ellipse.
      `srcOff` - the offset of the point to be converted in the source array.
      `dstPts` - the array into which the converted point coordinate is returned (may be the same than `srcPts`).
      `dstOff` - the offset of the location of the converted point that is stored in the destination array.
    Throws:
      `ProjectionException` - if the point can not be converted.