# Package org.apache.sis.referencing.operation

package org.apache.sis.referencing.operation
Relationship between any two Coordinate Reference Systems (CRS). An explanation for this package is provided in the OpenGIS® javadoc. The remaining discussion on this page is specific to the Apache SIS implementation.

This package provides an ISO 19111 Coordinate Operation implementation and support classes. The actual transform work is performed by the sub-packages, but most users will not need to deal with them directly.

## Apache SIS extensions

Some SIS implementations provide additional methods that are not part of OGC/ISO specifications:

- `AbstractCoordinateOperation​.getLinearAccuracy()` — tries to convert the accuracy to metres,
- `DefaultConversion​.specialize(…)` — changes a defining conversion into a complete conversion.

## Early binding versus late binding implementations

There is sometimes multiple ways of transforming coordinates for a given pair of source and target CRS. For example, the Bursa-Wolf parameters may vary depending on the area of interest, like in the transformations from NAD27 to WGS84. Even for a fixed set of Bursa-Wolf parameter, there is various ways to use them (Molodensky, Abridged Molodensky, Geocentric translation, etc.).

EPSG identifies two approaches for addressing this multiplicity problem. Quoting the GIGS guideline:

> - Early binding: A priori association of a coordinate transformation with a geodetic CRS. The association is usually made at start-up of the session or project, as that is defined in the software, but always before any data is associated with the ‘CRS’. In general the ‘coordinate transformation’ specified uses the ‘CRS’ of the data as the source ‘CRS’ and WGS 84 as the target ‘CRS’.
> - Late binding: Association at run time of a coordinate transformation with a CRS. Late binding allows the user to select the appropriate transformation upon import of ‘geospatial data’ or merge of two geospatial datasets. This means that, in cases where there are multiple existing transformations, the user can choose the appropriate one, possibly aided by additional information.

> Source: Geospatial Integrity of Geoscience Software Part 1 – GIGS guidelines. OGP publication, Report No. 430-1, September 2011

Apache SIS is a late binding implementation, while a little trace for early binding exists in the form of the `DefaultGeodeticDatum​.getBursaWolfParameters()` method for those who really need it. This means that when searching for a coordinate operation between a given pair of CRS, Apache SIS will query `EPSGFactory` before to try to infer the operation path by itelf. The `CoordinateOperationContext` can be used for further refinements, for example by specifying the area of interest.

Since:
  0.6

- Related Packages
  Module
  Package
  Description
  org.apache.sis.referencing
  org.apache.sis.referencing
  Base classes for reference systems used for general positioning.
  org.apache.sis.referencing
  org.apache.sis.referencing.operation.builder
  Helper classes for creating Math Transforms from a set of points.
  org.apache.sis.referencing
  org.apache.sis.referencing.operation.matrix
  Matrix implementations for spatiotemporal referencing.
  org.apache.sis.referencing
  org.apache.sis.referencing.operation.transform
  Conversions or transformations of multi-dimensional coordinate tuples.
  org.apache.sis.referencing
  org.apache.sis.referencing.crs
  Coordinate Reference System (CRS) definitions as coordinate systems related to the earth through datum.
  org.apache.sis.referencing
  org.apache.sis.referencing.cs
  Coordinate System (CS) definitions as the set of coordinate system axes that spans the coordinate space.
  org.apache.sis.referencing
  org.apache.sis.referencing.datum
  Relationship of a `CoordinateSystem` (an abstract mathematical entity) to the earth or other system.
  org.apache.sis.referencing
  org.apache.sis.referencing.factory
  Creates Coordinate Reference System (CRS) objects from given properties or authority codes.
  org.apache.sis.referencing.gazetteer
  org.apache.sis.referencing.gazetteer
  Mapping between geographic identifiers (addresses, grid indexes…) and locations (descriptions, coordinates…).
- Class
  Description
  AbstractCoordinateOperation
  Describes the operation for transforming coordinates in the source CRS to coordinates in the target CRS.
  CoordinateOperationContext
  Optional information about the context in which a requested coordinate operation will be used.
  CoordinateOperationFinder
  Finds a conversion or transformation path from a source CRS to a target CRS.
  DefaultConversion
  A parameterized mathematical operation that converts coordinates to another CRS without any change of datum.
  DefaultCoordinateOperationFactory
  Creates operations capable to transform coordinates from a given source CRS to a given target CRS.
  DefaultFormula
  Specification of the coordinate operation method formula.
  DefaultOperationMethod
  Describes the algorithm and parameters used to perform a coordinate operation.
  DefaultPassThroughOperation
  Specifies that a subset of a coordinate tuple is subject to a specific coordinate operation.
  DefaultTransformation
  A parameterized mathematical operation that transforms coordinates to another CRS with a change of datum.
  MismatchedDatumException
  Thrown when the source and target CRS of a coordinate conversion use different datum.
  MissingSourceDimensionsException
  Thrown when a coordinate operation cannot be find because some dimensions are missing in the source CRS.