# Package org.apache.sis.referencing.operation.transform

Conversions or transformations of multi-dimensional coordinate points. `MathTransform` provides a single API for coordinate conversions or transformations, including map projections. Each `MathTransform` instances can:

- transform a single point,
- transform efficiently an array of coordinates,
- transform a Java2D `Shape` (`MathTransform2D` only),
- compute the transform derivative at a location (for advanced users),
- be concatenated in a conversion or transformation chain.

`MathTransform` are truly n-dimensional, but specialized implementations for 1D and 2D cases are provided for performance reasons or for inter-operability with Java2D. In the 2D case, Apache SIS provides instances of the standard `AffineTransform` class when possible.

This package does not include map projections, which are a special kind of transforms defined in their own projection package.

Creating math transforms
`MathTransform` instances can be created either directly or indirectly. The recommended way is the indirect one: first find the coordinate operation (generally from a pair of source and target CRS), then invoke `CoordinateOperation​.getMathTransform()`. However sophisticated users can also create math transforms explicitly from a group of parameter values using the math transform factory.
Non-spatial coordinates
`MathTransform` usually performs conversions or transformations from points given in a source coordinate reference system to coordinate values for the same points in the target coordinate reference system. However the conversions are not necessarily between CRS; a `MathTransform` can also be used for converting the sample values in a raster for example. Such kind of transforms are named transfer functions.

Since:
  0.5

Defined in the `sis-referencing` module

- Interface Summary
  Interface | Description
  --- | ---
  LinearTransform | A usually affine, or otherwise a projective transform, which convert coordinates using only linear equations.
  MathTransformProvider | An object capable to create `MathTransform` instances from given parameter values.

- Class Summary
  Class | Description
  --- | ---
  AbstractMathTransform | Provides a default implementation for most methods required by the `MathTransform` interface.
  AbstractMathTransform.Inverse | Base class for implementations of inverse math transforms.
  AbstractMathTransform1D | Base class for math transforms that are known to be one-dimensional in all cases.
  AbstractMathTransform1D.Inverse | Base class for implementation of inverse math transforms.
  AbstractMathTransform2D | Base class for math transforms that are known to be two-dimensional in all cases.
  AbstractMathTransform2D.Inverse | Base class for implementation of inverse math transforms.
  ContextualParameters | The parameters that describe a sequence of normalize → non-linear kernel → denormalize transforms as a whole.
  DatumShiftTransform | Transforms between two CRS (usually geographic) based on different datum.
  DefaultMathTransformFactory | Low level factory for creating math transforms.
  DefaultMathTransformFactory.Context | Source and target coordinate systems for which a new parameterized transform is going to be used.
  EllipsoidToCentricTransform | Transform from two- or three- dimensional ellipsoidal coordinates to (geo)centric coordinates.
  InterpolatedGeocentricTransform | Transforms between two geographic CRS by performing geocentric translations interpolated from a grid file.
  InterpolatedMolodenskyTransform | Transforms between two geographic CRS by performing geocentric translations interpolated from a grid file, but using Molodensky approximation.
  InterpolatedTransform | Transforms between two CRS by performing translations interpolated from a grid file.
  MathTransforms | Utility methods creating or working on `MathTransform` instances.
  MolodenskyTransform | Two- or three-dimensional datum shift using the (potentially abridged) Molodensky transformation.
  PassThroughTransform | Transform which passes through a subset of coordinates to another transform.
  TransferFunction | The function converting raster sample values to geophysics values.
  TransformSeparator | Extracts a sub-transform from a given `MathTransform` and source or target dimension indices.

- Enum Summary
  Enum | Description
  --- | ---
  ContextualParameters.MatrixRole | Whether a matrix is used for normalization or denormalization before or after a non-linear operation.
  EllipsoidToCentricTransform.TargetType | Whether the output coordinate system is Cartesian or Spherical.
  IterationStrategy | Strategy for iterating over the point arrays given to `AbstractMathTransform​.transform(…)` methods.