public abstract class AbstractMathTransform extends Formattable implements MathTransform
MathTransform
interface. AbstractMathTransform
provides a convenient base class from which other
transform classes can be easily derived. In addition, AbstractMathTransform
implements
methods required by the MathTransform2D
interface, but does not
implements MathTransform2D
. Subclasses must declare implements MathTransform2D
themselves if they know to map two-dimensional coordinate systems.Modifier and Type | Class and Description |
---|---|
protected class |
AbstractMathTransform.Inverse
Default implementation for inverse math transform.
|
SINGLE_LINE
Modifier | Constructor and Description |
---|---|
protected |
AbstractMathTransform()
Constructs a math transform.
|
Modifier and Type | Method and Description |
---|---|
Shape |
createTransformedShape(Shape shape)
Transform the specified shape.
|
Matrix |
derivative(DirectPosition point)
Gets the derivative of this transform at a point.
|
Matrix |
derivative(Point2D point)
Gets the derivative of this transform at a point.
|
protected static void |
ensureNonNull(String name,
Object object)
Makes sure that an argument is non-null.
|
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.
|
String |
getName()
Returns a name for this math transform (never
null ). |
ParameterDescriptorGroup |
getParameterDescriptors()
Returns the parameter descriptors for this math transform, or
null if unknow. |
ParameterValueGroup |
getParameterValues()
Returns the parameter values for this math transform, or
null if unknow. |
abstract int |
getSourceDimensions()
Gets the dimension of input points.
|
abstract 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.
|
protected static boolean |
needCopy(int srcOff,
int dimSource,
int dstOff,
int dimTarget,
int numPts)
Checks if source coordinates need to be copied before to apply the transformation.
|
protected static double |
normalizeAngle(double x)
Ensures that the specified longitude stay within 0 and {code}PI{code}.
|
protected static double |
rollLongitude(double x)
Ensures that the specified longitude stay within ±π radians.
|
DirectPosition |
transform(DirectPosition ptSrc,
DirectPosition ptDst)
Transforms the specified
ptSrc and stores the result in ptDst . |
void |
transform(double[] srcPts,
int srcOff,
float[] dstPts,
int dstOff,
int numPts)
Transforms a list of coordinate point ordinal values.
|
void |
transform(float[] 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.
|
Point2D |
transform(Point2D ptSrc,
Point2D ptDst)
Transforms the specified
ptSrc and stores the result in ptDst . |
cleanupThreadLocals, toString, toWKT, toWKT, toWKT, toWKT
toWKT, transform
protected AbstractMathTransform()
public String getName()
null
). This convenience methods returns
the name of the parameter descriptors if any, or the
short class name otherwise.null
).public abstract int getSourceDimensions()
getSourceDimensions
in interface MathTransform
public abstract int getTargetDimensions()
getTargetDimensions
in interface MathTransform
public ParameterDescriptorGroup getParameterDescriptors()
null
if unknow. This
method is similar to OperationMethod.getParameters()
, except that MathTransform
returns parameters in standard units (usually meters or decimal degrees).null
.OperationMethod.getParameters()
public ParameterValueGroup getParameterValues()
null
if unknow. This method
is similar to Operation.getParameterValues()
, except that MathTransform
returns
parameters in standard units (usually meters or decimal degrees). Since this method returns a copy of the parameter
values, any change to a value will have no effect on this math transform.null
.Operation.getParameterValues()
public boolean isIdentity()
false
.isIdentity
in interface MathTransform
true
if this MathTransform
is an identity transform; false
otherwise.public Point2D transform(Point2D ptSrc, Point2D ptDst) throws TransformException
ptSrc
and stores the result in ptDst
. The default
implementation invokes MathTransform.transform(double[],int,double[],int,int)
using a temporary
array of doubles.ptSrc
- The specified coordinate point to be transformed.ptDst
- The specified coordinate point that stores the result of transforming ptSrc
, or null
.ptSrc
and storing the result in
ptDst
.MismatchedDimensionException
- If this transform doesn't map two-dimensional coordinate
systems.TransformException
- If the point can't be transformed.MathTransform2D.transform(Point2D,Point2D)
public DirectPosition transform(DirectPosition ptSrc, DirectPosition ptDst) throws TransformException
ptSrc
and stores the result in ptDst
. The default
implementation delegates to MathTransform.transform(double[],int,double[],int,int)
.transform
in interface MathTransform
ptSrc
- the specified coordinate point to be transformed.ptDst
- the specified coordinate point that stores the result of transforming ptSrc
, or null
.ptSrc
and storing the result in
ptDst
, or a newly created point if ptDst
was null.TransformException
- if the point can't be transformed.public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts) throws TransformException
MathTransform.transform(double[],int,double[],int,int)
using a temporary array of doubles.transform
in interface MathTransform
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 than srcPts
.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.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 to this
.public void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts) throws TransformException
MathTransform.transform(double[],int,double[],int,int)
using a temporary array of doubles.transform
in interface MathTransform
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.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.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 to this
.public void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws TransformException
MathTransform.transform(double[],int,double[],int,int)
.transform
in interface MathTransform
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.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.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 to this
.public Shape createTransformedShape(Shape shape) throws TransformException
shape
- Shape to transform.shape
if this transform is the identity transform.IllegalStateException
- if this transform doesn't map 2D coordinate systems.TransformException
- if a transform failed.MathTransform2D.createTransformedShape(Shape)
public Matrix derivative(Point2D point) throws TransformException
MathTransform2D
interface should override
this method. Other subclasses should override derivative(DirectPosition)
instead.point
- The coordinate point where to evaluate the derivative.MismatchedDimensionException
- if the input dimension is not 2.TransformException
- if the derivative can't be evaluated at the specified point.MathTransform2D.derivative(Point2D)
public Matrix derivative(DirectPosition point) throws TransformException
point
has a valid dimension. Next, it try to delegate the work to an other method:
derivative(Point2D)
.
MathTransform1D
, then this method delegates
the work to derivative(double)
.
TransformException
is thrown.derivative
in interface MathTransform
point
- The coordinate point where to evaluate the derivative.null
).NullPointerException
- if the derivative dependents on coordinate and point
is
null
.MismatchedDimensionException
- if point
doesn't have the expected dimension.TransformException
- if the derivative can't be evaluated at the specified point.public MathTransform inverse() throws NoninvertibleTransformException
this
if this transform is an identity transform, and throws a NoninvertibleTransformException
otherwise. Subclasses should override this method.inverse
in interface MathTransform
NoninvertibleTransformException
- if the transform can't be inversed.public int hashCode()
public boolean equals(Object object)
object
is an instance of the same class than this
and use the same parameter descriptor. Subclasses should override this method in order to
compare internal fields.equals
in class Object
object
- The object to compare with this transform.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.protected String formatWKT(Formatter formatter)
getParameterValues()
. The parameter group name is used as the math
transform name.formatWKT
in class Formattable
formatter
- The formatter to use."PARAM_MT"
in the default implementation.Formattable.toWKT()
,
Formattable.toString()
protected static void ensureNonNull(String name, Object object) throws InvalidParameterValueException
name
- Argument name.object
- User argument.InvalidParameterValueException
- if object
is null.protected static boolean needCopy(int srcOff, int dimSource, int dstOff, int dimTarget, int numPts)
transform(...)
method implementation. This method
make the following assumptions:
However, this method does not assumes that source and target dimension are the same (in the special case where source and target dimension are always the same, a simplier and more efficient check is possible). The following example prepares a transformation from 2 dimensional points to three dimensional points:
public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) { if (srcPts==dstPts && needCopy(srcOff, 2, dstOff, 3, numPts) { final double[] old = srcPts; srcPts = new double[numPts*2]; System.arraycopy(old, srcOff, srcPts, 0, srcPts.length); srcOff = 0; } }This method is for internal usage by the referencing module only. Do not use! It will be replaced by a different mechanism in a future GeoTools version.
srcOff
- The offset in the source coordinate array.dimSource
- The dimension of input points.dstOff
- The offset in the destination coordinate array.dimTarget
- The dimension of output points.numPts
- The number of points to transform.true
if the source coordinates should be copied before to apply the
transformation in order to avoid an overlap with the destination array.protected static double rollLongitude(double x)
x
- The longitude in radians.protected static double normalizeAngle(double x)
x
- An angleCopyright © 1996–2019 Geotools. All rights reserved.