org.geotools.referencing.operation
Class DefaultCoordinateOperationFactory

Object
  extended by AbstractFactory
      extended by ReferencingFactory
          extended by AbstractCoordinateOperationFactory
              extended by DefaultCoordinateOperationFactory
All Implemented Interfaces:
RegisterableService, Factory, ObjectFactory, CoordinateOperationFactory
Direct Known Subclasses:
AuthorityBackedFactory

public class DefaultCoordinateOperationFactory
extends AbstractCoordinateOperationFactory

Creates coordinate operations. This factory is capable to find coordinate transformations or conversions between two coordinate reference systems. It delegates most of its work to one or many of createOperationStep methods. Subclasses can override those methods in order to extend the factory capability to some more CRS.

Since:
2.1
Author:
Martin Desruisseaux (IRD)
Tutorial:
Coordinate Transformation Services for Geotools 2.1

Field Summary
 
Fields inherited from class AbstractCoordinateOperationFactory
AXIS_CHANGES, DATUM_SHIFT, ELLIPSOID_SHIFT, GEOCENTRIC_CONVERSION, IDENTITY, INVERSE_OPERATION
 
Fields inherited from class ReferencingFactory
LOGGER
 
Fields inherited from class AbstractFactory
hints, MAXIMUM_PRIORITY, MINIMUM_PRIORITY, NORMAL_PRIORITY, priority
 
Constructor Summary
DefaultCoordinateOperationFactory()
          Constructs a coordinate operation factory using the default factories.
DefaultCoordinateOperationFactory(Hints userHints)
          Constructs a coordinate operation factory using the specified hints.
DefaultCoordinateOperationFactory(Hints userHints, int priority)
          Constructs a coordinate operation factory using the specified hints and priority.
 
Method Summary
protected  CoordinateOperation createFromDatabase(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS)
          If the coordinate operation is explicitly defined in some database (typically EPSG), returns it.
 CoordinateOperation createOperation(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS)
          Returns an operation for conversion or transformation between two coordinate reference systems.
 CoordinateOperation createOperation(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, OperationMethod method)
          Deprecated. Current implementation ignore the method argument.
protected  CoordinateOperation createOperationStep(CompoundCRS sourceCRS, CompoundCRS targetCRS)
          Creates an operation between two compound coordinate reference systems.
protected  CoordinateOperation createOperationStep(CompoundCRS sourceCRS, SingleCRS targetCRS)
          Creates an operation from a compound to a single coordinate reference systems.
protected  CoordinateOperation createOperationStep(GeocentricCRS sourceCRS, GeocentricCRS targetCRS)
          Creates an operation between two geocentric coordinate reference systems.
protected  CoordinateOperation createOperationStep(GeocentricCRS sourceCRS, GeographicCRS targetCRS)
          Creates an operation from a geocentric to a geographic coordinate reference systems.
protected  CoordinateOperation createOperationStep(GeographicCRS sourceCRS, GeocentricCRS targetCRS)
          Creates an operation from a geographic to a geocentric coordinate reference systems.
protected  CoordinateOperation createOperationStep(GeographicCRS sourceCRS, GeographicCRS targetCRS)
          Creates an operation between two geographic coordinate reference systems.
protected  CoordinateOperation createOperationStep(GeographicCRS sourceCRS, ProjectedCRS targetCRS)
          Creates an operation from a geographic to a projected coordinate reference system.
protected  CoordinateOperation createOperationStep(GeographicCRS sourceCRS, VerticalCRS targetCRS)
          Creates an operation between a geographic and a vertical coordinate reference systems.
protected  CoordinateOperation createOperationStep(ProjectedCRS sourceCRS, GeographicCRS targetCRS)
          Creates an operation from a projected to a geographic coordinate reference system.
protected  CoordinateOperation createOperationStep(ProjectedCRS sourceCRS, ProjectedCRS targetCRS)
          Creates an operation between two projected coordinate reference systems.
protected  CoordinateOperation createOperationStep(SingleCRS sourceCRS, CompoundCRS targetCRS)
          Creates an operation from a single to a compound coordinate reference system.
protected  CoordinateOperation createOperationStep(TemporalCRS sourceCRS, TemporalCRS targetCRS)
          Creates an operation between two temporal coordinate reference systems.
protected  CoordinateOperation createOperationStep(VerticalCRS sourceCRS, VerticalCRS targetCRS)
          Creates an operation between two vertical coordinate reference systems.
 
Methods inherited from class AbstractCoordinateOperationFactory
concatenate, concatenate, createConcatenatedOperation, createDefiningConversion, createFromAffineTransform, createFromMathTransform, createFromMathTransform, createFromParameters, ensureNonNull, getErrorMessage, getImplementationHints, getMathTransformFactory, inverse, swapAndScaleAxis
 
Methods inherited from class ReferencingFactory
getVendor
 
Methods inherited from class AbstractFactory
addImplementationHints, equals, getPriority, hashCode, onDeregistration, onRegistration, toString
 
Methods inherited from class Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface Factory
getVendor
 

Constructor Detail

DefaultCoordinateOperationFactory

public DefaultCoordinateOperationFactory()
Constructs a coordinate operation factory using the default factories.


DefaultCoordinateOperationFactory

public DefaultCoordinateOperationFactory(Hints userHints)
Constructs a coordinate operation factory using the specified hints. This constructor recognizes the CRS, CS, DATUM and MATH_TRANSFORM FACTORY hints.

Parameters:
userHints - The hints, or null if none.

DefaultCoordinateOperationFactory

public DefaultCoordinateOperationFactory(Hints userHints,
                                         int priority)
Constructs a coordinate operation factory using the specified hints and priority. This constructor recognizes the CRS, CS, DATUM and MATH_TRANSFORM FACTORY hints.

Parameters:
userHints - The hints, or null if none.
priority - The priority for this factory, as a number between MINIMUM_PRIORITY and MAXIMUM_PRIORITY inclusive.
Since:
2.2
Method Detail

createOperation

public CoordinateOperation createOperation(CoordinateReferenceSystem sourceCRS,
                                           CoordinateReferenceSystem targetCRS)
                                    throws OperationNotFoundException,
                                           FactoryException
Returns an operation for conversion or transformation between two coordinate reference systems. If an operation exists, it is returned. If more than one operation exists, the default is returned. If no operation exists, then the exception is thrown.

The default implementation inspects the CRS and delegates the work to one or many createOperationStep(...) methods. This method fails if no path between the CRS is found.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
OperationNotFoundException - if no operation path was found from sourceCRS to targetCRS.
FactoryException - if the operation creation failed for some other reason.

createOperation

public CoordinateOperation createOperation(CoordinateReferenceSystem sourceCRS,
                                           CoordinateReferenceSystem targetCRS,
                                           OperationMethod method)
                                    throws OperationNotFoundException,
                                           FactoryException
Deprecated. Current implementation ignore the method argument.

Returns an operation using a particular method for conversion or transformation between two coordinate reference systems. If the operation exists on the implementation, then it is returned. If the operation does not exist on the implementation, then the implementation has the option of inferring the operation from the argument objects. If for whatever reason the specified operation will not be returned, then the exception is thrown.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
method - the algorithmic method for conversion or transformation
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
OperationNotFoundException - if no operation path was found from sourceCRS to targetCRS.
FactoryException - if the operation creation failed for some other reason.

createOperationStep

protected CoordinateOperation createOperationStep(TemporalCRS sourceCRS,
                                                  TemporalCRS targetCRS)
                                           throws FactoryException
Creates an operation between two temporal coordinate reference systems. The default implementation checks if both CRS use the same datum, and then adjusts for axis direction, units and epoch.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(VerticalCRS sourceCRS,
                                                  VerticalCRS targetCRS)
                                           throws FactoryException
Creates an operation between two vertical coordinate reference systems. The default implementation checks if both CRS use the same datum, and then adjusts for axis direction and units.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(GeographicCRS sourceCRS,
                                                  VerticalCRS targetCRS)
                                           throws FactoryException
Creates an operation between a geographic and a vertical coordinate reference systems. The default implementation accepts the conversion only if the geographic CRS is a tri dimensional one and the vertical CRS is for height above the ellipsoid. More elaborated operation, like transformation from ellipsoidal to geoidal height, should be implemented here.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(GeographicCRS sourceCRS,
                                                  GeographicCRS targetCRS)
                                           throws FactoryException
Creates an operation between two geographic coordinate reference systems. The default implementation can adjust axis order and orientation (e.g. transforming from (NORTH,WEST) to (EAST,NORTH)), performs units conversion and apply datum shifts if needed.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(ProjectedCRS sourceCRS,
                                                  ProjectedCRS targetCRS)
                                           throws FactoryException
Creates an operation between two projected coordinate reference systems. The default implementation can adjust axis order and orientation. It also performs units conversion if it is the only extra change needed. Otherwise, it performs three steps:

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(GeographicCRS sourceCRS,
                                                  ProjectedCRS targetCRS)
                                           throws FactoryException
Creates an operation from a geographic to a projected coordinate reference system. The default implementation constructs the following operation chain:
 sourceCRS  →  baseCRS  →  targetCRS
 
where the conversion from baseCRS to targetCRS is obtained from targetCRS.getConversionFromBase().

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(ProjectedCRS sourceCRS,
                                                  GeographicCRS targetCRS)
                                           throws FactoryException
Creates an operation from a projected to a geographic coordinate reference system. The default implementation constructs the following operation chain:
 sourceCRS  →  baseCRS  →  targetCRS
 
where the conversion from sourceCRS to baseCRS is obtained from the inverse of sourceCRS.getConversionFromBase().

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(GeocentricCRS sourceCRS,
                                                  GeocentricCRS targetCRS)
                                           throws FactoryException
Creates an operation between two geocentric coordinate reference systems. The default implementation can adjust for axis order and orientation, performs units conversion and apply Bursa Wolf transformation if needed.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(GeographicCRS sourceCRS,
                                                  GeocentricCRS targetCRS)
                                           throws FactoryException
Creates an operation from a geographic to a geocentric coordinate reference systems. If the source CRS doesn't have a vertical axis, height above the ellipsoid will be assumed equals to zero everywhere. The default implementation uses the "Ellipsoid_To_Geocentric" math transform.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(GeocentricCRS sourceCRS,
                                                  GeographicCRS targetCRS)
                                           throws FactoryException
Creates an operation from a geocentric to a geographic coordinate reference systems. The default implementation use the "Geocentric_To_Ellipsoid" math transform.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(CompoundCRS sourceCRS,
                                                  SingleCRS targetCRS)
                                           throws FactoryException
Creates an operation from a compound to a single coordinate reference systems.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(SingleCRS sourceCRS,
                                                  CompoundCRS targetCRS)
                                           throws FactoryException
Creates an operation from a single to a compound coordinate reference system.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createOperationStep

protected CoordinateOperation createOperationStep(CompoundCRS sourceCRS,
                                                  CompoundCRS targetCRS)
                                           throws FactoryException
Creates an operation between two compound coordinate reference systems.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS.
Throws:
FactoryException - If the operation can't be constructed.

createFromDatabase

protected CoordinateOperation createFromDatabase(CoordinateReferenceSystem sourceCRS,
                                                 CoordinateReferenceSystem targetCRS)
If the coordinate operation is explicitly defined in some database (typically EPSG), returns it. Otherwise (if there is no database, or if the database doesn't contains an explicit operation from sourceCRS to targetCRS, or if this method failed to create an operation from the database), returns null.

The default implementation always returns null, since there is no database connected to a DefaultCoordinateOperationFactory instance. In other words, the default implementation is "standalone": it tries to figure out transformation paths by itself. Subclasses should override this method if they can fetch a more accurate operation from some database. The mean subclass doing so is AuthorityBackedFactory.

This method is invoked by createOperation(sourceCRS, targetCRS) before to try to figure out a transformation path by itself. It is also invoked by various createOperationStep(...) methods when an intermediate CRS was obtained by GeneralDerivedCRS.getBaseCRS() (this case occurs especially during geographic from/to projected CRS operations). This method is not invoked for synthetic CRS generated by createOperationStep(...), since those temporary CRS are not expected to exist in a database.

Parameters:
sourceCRS - Input coordinate reference system.
targetCRS - Output coordinate reference system.
Returns:
A coordinate operation from sourceCRS to targetCRS if and only if one is explicitly defined in some underlying database, or null otherwise.
Since:
2.3


Copyright © 1996-2014 Geotools. All Rights Reserved.