Class ConcatenatedTransform
- Object
-
- Formattable
-
- AbstractMathTransform
-
- ConcatenatedTransform
-
- All Implemented Interfaces:
Serializable
,MathTransform
public class ConcatenatedTransform extends AbstractMathTransform implements Serializable
Base class for concatenated transform. Concatenated transforms are serializable if all their step transforms are serializables.- Since:
- 2.0
- Author:
- Martin Desruisseaux (IRD)
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class AbstractMathTransform
AbstractMathTransform.Inverse
-
-
Field Summary
Fields Modifier and Type Field Description MathTransform
transform1
The first math transform.MathTransform
transform2
The second math transform.-
Fields inherited from class Formattable
SINGLE_LINE
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
ConcatenatedTransform(MathTransform transform1, MathTransform transform2)
Constructs a concatenated transform.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static MathTransform
create(MathTransform tr1, MathTransform tr2)
Constructs a concatenated transform.Matrix
derivative(Point2D point)
Gets the derivative of this transform at a point.Matrix
derivative(Position point)
Gets the derivative of this transform at a point.boolean
equals(Object object)
Compares the specified object with this math transform for equality.protected String
formatWKT(Formatter formatter)
Format the inner part of a Well Known Text (WKT) element.int
getSourceDimensions()
Gets the dimension of input points.int
getStepCount()
Returns the number of math transform steps performed by this concatenated transform.int
getTargetDimensions()
Gets the dimension of output points.int
hashCode()
Returns a hash value for this transform.MathTransform
inverse()
Creates the inverse transform of this object.boolean
isIdentity()
Tests whether this transform does not move any points.void
transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
Transforms a list of coordinate point ordinal values.void
transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
Transforms a list of coordinate point ordinal values.Position
transform(Position ptSrc, Position ptDst)
Transforms the specifiedptSrc
and stores the result inptDst
.-
Methods inherited from class AbstractMathTransform
createTransformedShape, ensureNonNull, getName, getParameterDescriptors, getParameterValues, needCopy, normalizeAngle, rollLongitude, transform, transform, transform
-
Methods inherited from class Formattable
cleanupThreadLocals, toString, toWKT, toWKT, toWKT, toWKT
-
Methods inherited from interface MathTransform
toWKT
-
-
-
-
Field Detail
-
transform1
public final MathTransform transform1
The first math transform.
-
transform2
public final MathTransform transform2
The second math transform.
-
-
Constructor Detail
-
ConcatenatedTransform
protected ConcatenatedTransform(MathTransform transform1, MathTransform transform2)
Constructs a concatenated transform. This constructor is for subclasses only. To create a concatenated transform, use the factory methodcreate(org.geotools.api.referencing.operation.MathTransform, org.geotools.api.referencing.operation.MathTransform)
instead.- Parameters:
transform1
- The first math transform.transform2
- The second math transform.
-
-
Method Detail
-
create
public static MathTransform create(MathTransform tr1, MathTransform tr2)
Constructs a concatenated transform. This factory method checks for step transforms dimension. The returned transform will implementsMathTransform2D
if source and target dimensions are equal to 2. Likewise, it will implementsMathTransform1D
if source and target dimensions are equal to 1.MathTransform
implementations are available in two version: direct and non-direct. The "non-direct" version use an intermediate buffer when performing transformations; they are slower and consume more memory. They are used only as a fallback when a "direct" version can't be created.- Parameters:
tr1
- The first math transform.tr2
- The second math transform.- Returns:
- The concatenated transform.
-
getSourceDimensions
public final int getSourceDimensions()
Gets the dimension of input points.- Specified by:
getSourceDimensions
in interfaceMathTransform
- Specified by:
getSourceDimensions
in classAbstractMathTransform
- Returns:
- The dimension of input points.
-
getTargetDimensions
public final int getTargetDimensions()
Gets the dimension of output points.- Specified by:
getTargetDimensions
in interfaceMathTransform
- Specified by:
getTargetDimensions
in classAbstractMathTransform
- Returns:
- The dimension of output points.
-
getStepCount
public final int getStepCount()
Returns the number of math transform steps performed by this concatenated transform.- Returns:
- The number of transform steps.
- Since:
- 2.5
-
transform
public Position transform(Position ptSrc, Position ptDst) throws TransformException
Transforms the specifiedptSrc
and stores the result inptDst
.- Specified by:
transform
in interfaceMathTransform
- Overrides:
transform
in classAbstractMathTransform
- Parameters:
ptSrc
- the specified coordinate point to be transformed.ptDst
- the specified coordinate point that stores the result of transformingptSrc
, ornull
.- Returns:
- the coordinate point after transforming
ptSrc
and storing the result inptDst
, or a newly created point ifptDst
was null. - Throws:
TransformException
- if the point can't be transformed.
-
transform
public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws TransformException
Transforms a list of coordinate point ordinal values. The source points are first transformed bytransform1
, then the intermediate points are transformed bytransform2
. The transformations are performed without intermediate buffer if it can be avoided.- Specified by:
transform
in interfaceMathTransform
- Parameters:
srcPts
- the array containing the source point coordinates.srcOff
- the offset to the first point to be transformed in the source array.dstPts
- the array into which the transformed point coordinates are returned. May be the same thansrcPts
.dstOff
- the offset to the location of the first transformed point that is stored in the destination array.numPts
- the number of point objects to be transformed.- Throws:
TransformException
- if a point can't be transformed. Some implementations will stop at the first failure, wile some other implementations will fill the untransformable points with NaN values, continue and throw the exception only at end. Implementations that fall in the later case should set the last completed transform tothis
.
-
transform
public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts) throws TransformException
Transforms a list of coordinate point ordinal values. The source points are first copied in a temporary array of typedouble[]
, transformed bytransform1
first, then bytransform2
and finally the result is casted tofloat
primitive type and stored in the destination array. The use ofdouble
primitive type for intermediate results is necesssary for reducing rounding errors.- Specified by:
transform
in interfaceMathTransform
- Overrides:
transform
in classAbstractMathTransform
- Parameters:
srcPts
- the array containing the source point coordinates.srcOff
- the offset to the first point to be transformed in the source array.dstPts
- the array into which the transformed point coordinates are returned. May be the same thansrcPts
.dstOff
- the offset to the location of the first transformed point that is stored in the destination array.numPts
- the number of point objects to be transformed.- Throws:
TransformException
- if a point can't be transformed. Some implementations will stop at the first failure, wile some other implementations will fill the untransformable points with NaN values, continue and throw the exception only at end. Implementations that fall in the later case should set the last completed transform tothis
.
-
inverse
public MathTransform inverse() throws NoninvertibleTransformException
Creates the inverse transform of this object.- Specified by:
inverse
in interfaceMathTransform
- Overrides:
inverse
in classAbstractMathTransform
- Returns:
- The inverse transform.
- Throws:
NoninvertibleTransformException
- if the transform can't be inversed.
-
derivative
public Matrix derivative(Point2D point) throws TransformException
Gets the derivative of this transform at a point. This method delegates to thederivative(Position)
method because the transformation stepstransform1
andtransform2
may not be instances ofMathTransform2D
.- Overrides:
derivative
in classAbstractMathTransform
- Parameters:
point
- The coordinate point where to evaluate the derivative.- Returns:
- The derivative at the specified point as a 2×2 matrix.
- Throws:
TransformException
- if the derivative can't be evaluated at the specified point.- See Also:
MathTransform2D.derivative(Point2D)
-
derivative
public Matrix derivative(Position point) throws TransformException
Gets the derivative of this transform at a point.- Specified by:
derivative
in interfaceMathTransform
- Overrides:
derivative
in classAbstractMathTransform
- Parameters:
point
- The coordinate point where to evaluate the derivative.- Returns:
- The derivative at the specified point (never
null
). - Throws:
TransformException
- if the derivative can't be evaluated at the specified point.
-
isIdentity
public final boolean isIdentity()
Tests whether this transform does not move any points. Default implementation check if the two transforms are identity.- Specified by:
isIdentity
in interfaceMathTransform
- Overrides:
isIdentity
in classAbstractMathTransform
- Returns:
true
if thisMathTransform
is an identity transform;false
otherwise.
-
hashCode
public final int hashCode()
Returns a hash value for this transform.- Overrides:
hashCode
in classAbstractMathTransform
-
equals
public final boolean equals(Object object)
Compares the specified object with this math transform for equality.- Overrides:
equals
in classAbstractMathTransform
- Parameters:
object
- The object to compare with this transform.- Returns:
true
if the given object is a transform of the same class and if, given identical source position, the transformed position would be the equals.
-
formatWKT
protected String formatWKT(Formatter formatter)
Format the inner part of a Well Known Text (WKT) element.- Overrides:
formatWKT
in classAbstractMathTransform
- Parameters:
formatter
- The formatter to use.- Returns:
- The WKT element name.
- See Also:
Formattable.toWKT()
,Formattable.toString()
-
-