Class CoordinateOperationFinder
- When
createOperation(sourceCRS, targetCRS)
is invoked, this class first tries to find the authority codes for the given source and target CRS. If such codes are found, they are submitted to a registry of coordinate operations. If an operation is found, it will be returned.Note: the above is known as the late-binding approach. The late-binding approach allows the authority to define better suited operations than what we would get if we were transforming everything from and to a pivot system (e.g. WGS84). In addition, this approach provides useful information like the coordinate operation scope and domain of validity, accuracy. - If the above authority factory does not know about the specified CRS, then this class tries to
infer the coordinate operation by itself. The CRS type is examined and the work is dispatched
to one or many of the
createOperationStep(…)
protected methods defined in this class. Those methods use properties associated to the CRS, includingBOUNDCRS
orTOWGS84
elements found in Well Known Text (WKT).Note: the use of elements likeTOWGS84
is known as the early-binding approach. The operation found by this approach may be sub-optimal. The early-binding approach is used only as a fallback when the late-binding approach gave no result.
Customization
Instances of this class are created byDefaultCoordinateOperationFactory
.
The only public method is createOperation(CoordinateReferenceSystem, CoordinateReferenceSystem)
,
which dispatches its work to the createOperationStep(…)
protected methods.
Developers can override those protected methods if they want to alter the way some operations are created.
Limitations
- Each instance of this class shall be used only once.
- This class is not thread-safe. A new instance shall be created for each coordinate operation to infer.
- Since:
- 0.7
- Version:
- 1.3
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionIdentifiers used as the basis for identifier of CRS used as an intermediate step.The pair of source and target CRS for which we already searched a coordinate operation.private final boolean
Whether this finder instance is allowed to useDefaultCoordinateOperationFactory.cache
.Fields inherited from class org.apache.sis.referencing.operation.CoordinateOperationRegistry
areaOfInterest, AXIS_CHANGES, CONSTANTS, DATUM_SHIFT, desiredAccuracy, ELLIPSOID_CHANGE, factory, factorySIS, GEOCENTRIC_CONVERSION, IDENTITY, registry, stopAtFirst
-
Constructor Summary
ConstructorsConstructorDescriptionCoordinateOperationFinder
(org.opengis.referencing.operation.CoordinateOperationAuthorityFactory registry, org.opengis.referencing.operation.CoordinateOperationFactory factory, CoordinateOperationContext context) Creates a new instance for the given factory and context. -
Method Summary
Modifier and TypeMethodDescriptionprivate static List<org.opengis.referencing.operation.CoordinateOperation>
asList
(org.opengis.referencing.operation.CoordinateOperation operation) Returns the given operation as a list of one element.private static boolean
canHide
(org.opengis.metadata.Identifier id) Returnstrue
if a coordinate operation of the given name can be hidden in the list of operations.private static String
canNotInvert
(org.opengis.referencing.crs.GeneralDerivedCRS crs) Returns an error message for "Cannot invert operation XYZ.".private org.opengis.referencing.operation.CoordinateOperation
concatenate
(org.opengis.referencing.operation.CoordinateOperation step1, org.opengis.referencing.operation.CoordinateOperation step2) Concatenates two operation steps.private org.opengis.referencing.operation.CoordinateOperation
concatenate
(org.opengis.referencing.operation.CoordinateOperation step1, org.opengis.referencing.operation.CoordinateOperation step2, org.opengis.referencing.operation.CoordinateOperation step3) Concatenates three transformation steps.private org.opengis.referencing.crs.CoordinateReferenceSystem
createCompoundCRS
(org.opengis.referencing.crs.CoordinateReferenceSystem template, org.opengis.referencing.crs.CoordinateReferenceSystem[] components) Creates a compound CRS, but we special processing for (two-dimensional Geographic + ellipsoidal heights) tuples.private org.opengis.referencing.operation.CoordinateOperation
createFromAffineTransform
(org.opengis.metadata.Identifier name, org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS, org.opengis.referencing.operation.Matrix matrix) Creates a coordinate operation from a matrix, which usually describes an affine transform.org.opengis.referencing.operation.CoordinateOperation
createOperation
(org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS) Infers an operation for conversion or transformation between two coordinate reference systems.List<org.opengis.referencing.operation.CoordinateOperation>
createOperations
(org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS) Infers operations for conversions or transformations between two coordinate reference systems.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, List<? extends org.opengis.referencing.crs.SingleCRS> sourceComponents, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS, List<? extends org.opengis.referencing.crs.SingleCRS> targetComponents) Creates an operation between at least oneCompoundCRS
(usually the source) and an arbitrary CRS.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.GeneralDerivedCRS sourceCRS, org.opengis.referencing.crs.GeneralDerivedCRS targetCRS) Creates an operation between two derived coordinate reference systems.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.GeneralDerivedCRS sourceCRS, org.opengis.referencing.crs.SingleCRS targetCRS) Creates an operation from a derived CRS to an arbitrary single coordinate reference system.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.GeodeticCRS sourceCRS, org.opengis.referencing.crs.GeodeticCRS targetCRS) Creates an operation between two geodetic (geographic or geocentric) coordinate reference systems.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.GeodeticCRS sourceCRS, org.opengis.referencing.crs.VerticalCRS targetCRS) Creates an operation between a geodetic and a vertical coordinate reference systems.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.SingleCRS sourceCRS, org.opengis.referencing.crs.GeneralDerivedCRS targetCRS) Creates operations from an arbitrary single CRS to a derived coordinate reference system.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.TemporalCRS sourceCRS, org.opengis.referencing.crs.TemporalCRS targetCRS) Creates an operation between two temporal coordinate reference systems.protected List<org.opengis.referencing.operation.CoordinateOperation>
createOperationStep
(org.opengis.referencing.crs.VerticalCRS sourceCRS, org.opengis.referencing.crs.VerticalCRS targetCRS) Creates an operation between two vertical coordinate reference systems.defaultName
(org.opengis.referencing.crs.CoordinateReferenceSystem source, org.opengis.referencing.crs.CoordinateReferenceSystem target) Returns a name for a transformation between two CRS.derivedFrom
(org.opengis.referencing.IdentifiedObject object) Returns a name for an object derived from the specified one.private static boolean
isAffine
(org.opengis.referencing.operation.CoordinateOperation operation) Returnstrue
if the given operation is non-null and use the affine operation method.private static boolean
isIdentity
(org.opengis.referencing.operation.CoordinateOperation operation) Returnstrue
if the specified operation is an identity conversion.private static String
notFoundMessage
(org.opengis.referencing.IdentifiedObject source, org.opengis.referencing.IdentifiedObject target) Returns an error message for "No path found from sourceCRS to targetCRS".properties
(String name) Returns the given name in a singleton map.Methods inherited from class org.apache.sis.referencing.operation.CoordinateOperationRegistry
createFromMathTransform, inverse, properties, recoverableException, toAuthorityDefinition
-
Field Details
-
identifierOfStepCRS
Identifiers used as the basis for identifier of CRS used as an intermediate step. The values can be of two kinds:- If the value is an instance of
Integer
, then this is the number of identifiers derived from the identifier associated to the key. - Otherwise the key is itself an
Identifier
derived from another identifier, and the value is that identifier.
- See Also:
- If the value is an instance of
-
previousSearches
The pair of source and target CRS for which we already searched a coordinate operation. This is used as a safety against infinite recursivity. -
useCache
private final boolean useCacheWhether this finder instance is allowed to useDefaultCoordinateOperationFactory.cache
.
-
-
Constructor Details
-
CoordinateOperationFinder
public CoordinateOperationFinder(org.opengis.referencing.operation.CoordinateOperationAuthorityFactory registry, org.opengis.referencing.operation.CoordinateOperationFactory factory, CoordinateOperationContext context) throws org.opengis.util.FactoryException Creates a new instance for the given factory and context.- Parameters:
registry
- the factory to use for creating operations as defined by authority, ornull
if none.factory
- the factory to use for creating operations not found in the registry.context
- the area of interest and desired accuracy, ornull
if none.- Throws:
org.opengis.util.FactoryException
- if an error occurred while initializing thisCoordinateOperationFinder
.- See Also:
-
-
Method Details
-
createOperation
public org.opengis.referencing.operation.CoordinateOperation createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS) throws org.opengis.referencing.operation.OperationNotFoundException, org.opengis.util.FactoryException Infers an operation for conversion or transformation between two coordinate reference systems. If a non-null authority factory – the registry – has been specified at construction time, then this method will first query that factory (late-binding approach – see class javadoc). If no operation has been found in the registry or if no registry has been specified to the constructor, this method inspects the given CRS and delegates the work to one or manycreateOperationStep(…)
methods (early-binding approach).The default implementation invokes
createOperations(sourceCRS, targetCRS)
, then returns the first operation in the returned list or throws an exception if the list is empty.- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.referencing.operation.OperationNotFoundException
- if no operation path was found fromsourceCRS
totargetCRS
.org.opengis.util.FactoryException
- if the operation creation failed for some other reason.
-
createOperations
public List<org.opengis.referencing.operation.CoordinateOperation> createOperations(org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS) throws org.opengis.util.FactoryException Infers operations for conversions or transformations between two coordinate reference systems. If a non-null authority factory – the registry – has been specified at construction time, then this method will first query that factory (late-binding approach – see class javadoc). If no operation has been found in the registry or if no registry has been specified to the constructor, this method inspects the given CRS and delegates the work to one or manycreateOperationStep(…)
methods (early-binding approach).At first, this method is invoked with the
sourceCRS
andtargetCRS
arguments given to theCoordinateOperationFactory.createOperation(…)
method. But then, this method may be invoked recursively by somecreateOperationStep(…)
methods with different source or target CRS, for example in order to process the base geographic CRS of a projected CRS.Coordinate operations are returned in preference order: best operations for the area of interest should be first. The returned list is modifiable: callers can add, remove or set elements without impact on this
CoordinateOperationFinder
instance.- Overrides:
createOperations
in classCoordinateOperationRegistry
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- coordinate operations from
sourceCRS
totargetCRS
. - Throws:
org.opengis.referencing.operation.OperationNotFoundException
- if no operation path was found fromsourceCRS
totargetCRS
.org.opengis.util.FactoryException
- if the operation creation failed for some other reason.- Since:
- 1.0
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.SingleCRS sourceCRS, org.opengis.referencing.crs.GeneralDerivedCRS targetCRS) throws org.opengis.util.FactoryException Creates operations from an arbitrary single CRS to a derived coordinate reference system. Conversions fromGeographicCRS
toProjectedCRS
are also handled by this method, since projected CRS are a special kind ofGeneralDerivedCRS
.The default implementation constructs the following operation chain:
where the conversion fromsourceCRS → baseCRS → targetCRS
baseCRS
totargetCRS
is obtained fromtargetCRS.getConversionFromBase()
.This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- coordinate operations from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.GeneralDerivedCRS sourceCRS, org.opengis.referencing.crs.SingleCRS targetCRS) throws org.opengis.util.FactoryException Creates an operation from a derived CRS to an arbitrary single coordinate reference system. Conversions fromProjectedCRS
toGeographicCRS
are also handled by this method, since projected CRS are a special kind ofGeneralDerivedCRS
.The default implementation constructs the following operation chain:
where the conversion fromsourceCRS → baseCRS → targetCRS
sourceCRS
tobaseCRS
is obtained from the inverse ofsourceCRS.getConversionFromBase()
.This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.GeneralDerivedCRS sourceCRS, org.opengis.referencing.crs.GeneralDerivedCRS targetCRS) throws org.opengis.util.FactoryException Creates an operation between two derived coordinate reference systems. The default implementation performs three steps:- Convert from
sourceCRS
to its base CRS. - Convert the source base CRS to target base CRS.
- Convert from the target base CRS to the
targetCRS
.
This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
- Convert from
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.GeodeticCRS sourceCRS, org.opengis.referencing.crs.GeodeticCRS targetCRS) throws org.opengis.util.FactoryException Creates an operation between two geodetic (geographic or geocentric) coordinate reference systems. The default implementation can:- adjust axis order and orientation, for example converting from (North, West) axes to (East, North) axes,
- apply units conversion if needed,
- perform longitude rotation if needed,
- perform datum shift if Bursa-Wolf parameters are available for the area of interest.
This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.GeodeticCRS sourceCRS, org.opengis.referencing.crs.VerticalCRS targetCRS) throws org.opengis.util.FactoryException Creates an operation between a geodetic and a vertical coordinate reference systems. The height returned by this method will usually be part of a pass-through operation.This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.VerticalCRS sourceCRS, org.opengis.referencing.crs.VerticalCRS targetCRS) throws org.opengis.util.FactoryException Creates an operation between two vertical coordinate reference systems. The default implementation checks if both CRS use the same datum, then adjusts for axis direction and units.This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.TemporalCRS sourceCRS, org.opengis.referencing.crs.TemporalCRS targetCRS) throws org.opengis.util.FactoryException Creates an operation between two temporal coordinate reference systems. The default implementation checks if both CRS use the same datum, then adjusts for axis direction, units and epoch.This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.targetCRS
- output coordinate reference system.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
createOperationStep
protected List<org.opengis.referencing.operation.CoordinateOperation> createOperationStep(org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, List<? extends org.opengis.referencing.crs.SingleCRS> sourceComponents, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS, List<? extends org.opengis.referencing.crs.SingleCRS> targetComponents) throws org.opengis.util.FactoryException Creates an operation between at least oneCompoundCRS
(usually the source) and an arbitrary CRS. The default implementation tries to invoke thecreateOperation(…)
method with various combinations of source and target components. A preference is given for components of the same type (e.g. sourceGeodeticCRS
with targetGeodeticCRS
, etc.).This method returns only one step for a chain of concatenated operations (to be built by the caller). But a list is returned because the same step may be implemented by different operation methods. Only one element in the returned list should be selected (usually the first one).
- Parameters:
sourceCRS
- input coordinate reference system.sourceComponents
- components of the source CRS.targetCRS
- output coordinate reference system.targetComponents
- components of the target CRS.- Returns:
- a coordinate operation from
sourceCRS
totargetCRS
. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
createFromAffineTransform
private org.opengis.referencing.operation.CoordinateOperation createFromAffineTransform(org.opengis.metadata.Identifier name, org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS, org.opengis.referencing.operation.Matrix matrix) throws org.opengis.util.FactoryException Creates a coordinate operation from a matrix, which usually describes an affine transform. A defaultOperationMethod
object is given to this transform. In the special case where thename
identifier isCoordinateOperationRegistry.DATUM_SHIFT
orCoordinateOperationRegistry.ELLIPSOID_CHANGE
, the operation will be aTransformation
instance instead ofConversion
.- Parameters:
name
- the identifier for the operation to be created.sourceCRS
- the source coordinate reference system.targetCRS
- the target coordinate reference system.matrix
- the matrix which describe an affine transform operation.- Returns:
- the conversion or transformation.
- Throws:
org.opengis.util.FactoryException
- if the operation cannot be created.
-
createCompoundCRS
private org.opengis.referencing.crs.CoordinateReferenceSystem createCompoundCRS(org.opengis.referencing.crs.CoordinateReferenceSystem template, org.opengis.referencing.crs.CoordinateReferenceSystem[] components) throws org.opengis.util.FactoryException Creates a compound CRS, but we special processing for (two-dimensional Geographic + ellipsoidal heights) tuples. If any such tuple is found, a three-dimensional geographic CRS is created instead of the compound CRS.- Parameters:
template
- the CRS from which to inherit properties.components
- ordered array ofCoordinateReferenceSystem
objects.- Returns:
- the coordinate reference system for the given properties.
- Throws:
org.opengis.util.FactoryException
- if the object creation failed.- See Also:
-
concatenate
private org.opengis.referencing.operation.CoordinateOperation concatenate(org.opengis.referencing.operation.CoordinateOperation step1, org.opengis.referencing.operation.CoordinateOperation step2) throws org.opengis.util.FactoryException Concatenates two operation steps. The new concatenated operation gets an automatically generated name.Special case
If one of the given operation steps performs a change of axis order or units, then that change will be merged with the other operation instead of creating anConcatenatedOperation
.- Parameters:
step1
- the first step, ornull
for the identity operation.step2
- the second step, ornull
for the identity operation.- Returns:
- a concatenated operation, or
null
if all arguments were null. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
concatenate
private org.opengis.referencing.operation.CoordinateOperation concatenate(org.opengis.referencing.operation.CoordinateOperation step1, org.opengis.referencing.operation.CoordinateOperation step2, org.opengis.referencing.operation.CoordinateOperation step3) throws org.opengis.util.FactoryException Concatenates three transformation steps. If the first and/or the last operation is anCoordinateOperationRegistry.AXIS_CHANGES
, then it will be included as part of the second operation instead of creating aConcatenatedOperation
. If a concatenated operation is created, it will get an automatically generated name.- Parameters:
step1
- the first step, ornull
for the identity operation.step2
- the second step, ornull
for the identity operation.step3
- the third step, ornull
for the identity operation.- Returns:
- a concatenated operation, or
null
if all arguments were null. - Throws:
org.opengis.util.FactoryException
- if the operation cannot be constructed.
-
isAffine
private static boolean isAffine(org.opengis.referencing.operation.CoordinateOperation operation) Returnstrue
if the given operation is non-null and use the affine operation method. -
isIdentity
private static boolean isIdentity(org.opengis.referencing.operation.CoordinateOperation operation) Returnstrue
if the specified operation is an identity conversion. This method always returnsfalse
for transformations even if their associated math transform is an identity one, because such transformations are usually datum shift and must be visible. -
canHide
private static boolean canHide(org.opengis.metadata.Identifier id) Returnstrue
if a coordinate operation of the given name can be hidden in the list of operations. Note that theMathTransform
will still take the operation in account however. -
properties
Returns the given name in a singleton map. -
derivedFrom
Returns a name for an object derived from the specified one. This method builds a name of the form "<original identifier> (step 1)" where "(step 1)" may be replaced by "(step 2)", "(step 3)", etc. if this method has already been invoked for the same identifier (directly or indirectly). -
defaultName
private static Map<String,?> defaultName(org.opengis.referencing.crs.CoordinateReferenceSystem source, org.opengis.referencing.crs.CoordinateReferenceSystem target) Returns a name for a transformation between two CRS. -
asList
private static List<org.opengis.referencing.operation.CoordinateOperation> asList(org.opengis.referencing.operation.CoordinateOperation operation) Returns the given operation as a list of one element. We cannot useCollections.singletonList(Object)
because the list needs to be modifiable, as required bycreateOperations(CoordinateReferenceSystem, CoordinateReferenceSystem)
method contract. -
notFoundMessage
private static String notFoundMessage(org.opengis.referencing.IdentifiedObject source, org.opengis.referencing.IdentifiedObject target) Returns an error message for "No path found from sourceCRS to targetCRS". This is used for the construction ofOperationNotFoundException
.- Parameters:
source
- the source CRS.target
- the target CRS.- Returns:
- a default error message.
-
canNotInvert
Returns an error message for "Cannot invert operation XYZ.". This is used for the construction ofOperationNotFoundException
.- Parameters:
crs
- the CRS having a conversion that cannot be inverted.- Returns:
- a default error message.
-