org.geotools.referencing.operation
Class DefaultMathTransformFactory

java.lang.Object
  extended byorg.geotools.referencing.operation.DefaultMathTransformFactory
All Implemented Interfaces:
org.opengis.referencing.Factory, org.opengis.referencing.operation.MathTransformFactory

public class DefaultMathTransformFactory
extends java.lang.Object
implements org.opengis.referencing.operation.MathTransformFactory

Low level factory for creating math transforms. Many high level GIS applications will never need to use this factory directly; they can use a coordinate operation factory instead. However, the interface can be used directly by applications that wish to transform other types of coordinates (e.g. color coordinates, or image pixel coordinates).

A math transform is an object that actually does the work of applying formulae to coordinate values. The math transform does not know or care how the coordinates relate to positions in the real world. This lack of semantics makes implementing significantly easier than it would be otherwise. For example the affine transform applies a matrix to the coordinates without knowing how what it is doing relates to the real world. So if the matrix scales Z values by a factor of 1000, then it could be converting meters into millimeters, or it could be converting kilometers into meters.

Because math transforms have low semantic value (but high mathematical value), programmers who do not have much knowledge of how GIS applications use coordinate systems, or how those coordinate systems relate to the real world can implement . The low semantic content of math transforms also means that they will be useful in applications that have nothing to do with GIS coordinates. For example, a math transform could be used to map color coordinates between different color spaces, such as converting (red, green, blue) colors into (hue, light, saturation) colors.

Since a math transform does not know what its source and target coordinate systems mean, it is not necessary or desirable for a math transform object to keep information on its source and target coordinate systems.

Since:
2.1
Version:
$Id: DefaultMathTransformFactory.java 17902 2006-02-07 09:50:07Z desruisseaux $
Author:
Martin Desruisseaux

Constructor Summary
DefaultMathTransformFactory()
          Constructs a default math transform factory.
 
Method Summary
 org.opengis.referencing.operation.MathTransform createAffineTransform(org.opengis.referencing.operation.Matrix matrix)
          Creates an affine transform from a matrix.
 org.opengis.referencing.operation.MathTransform createConcatenatedTransform(org.opengis.referencing.operation.MathTransform transform1, org.opengis.referencing.operation.MathTransform transform2)
          Creates a transform by concatenating two existing transforms.
 org.opengis.referencing.operation.MathTransform createFromWKT(java.lang.String text)
          Creates a math transform object from a Well Known Text (WKT).
 org.opengis.referencing.operation.MathTransform createFromXML(java.lang.String xml)
          Creates a math transform object from a XML string.
 org.opengis.referencing.operation.MathTransform createParameterizedTransform(org.opengis.parameter.ParameterValueGroup parameters)
          Creates a transform from a group of parameters.
 org.opengis.referencing.operation.MathTransform createParameterizedTransform(org.opengis.parameter.ParameterValueGroup parameters, java.util.Collection methods)
          Creates a transform from a group of parameters and add the method used to a list.
 org.opengis.referencing.operation.MathTransform createPassThroughTransform(int firstAffectedOrdinate, org.opengis.referencing.operation.MathTransform subTransform, int numTrailingOrdinates)
          Creates a transform which passes through a subset of ordinates to another transform.
 java.util.Set getAvailableMethods(java.lang.Class type)
          Returns a set of available methods for math transforms.
 org.opengis.parameter.ParameterValueGroup getDefaultParameters(java.lang.String method)
          Returns the default parameter values for a math transform using the given method.
 org.opengis.referencing.operation.OperationMethod getOperationMethod(java.lang.String name)
          Returns the operation method for the specified name.
 org.opengis.metadata.citation.Citation getVendor()
          Returns the vendor responsible for creating this factory implementation.
static void main(java.lang.String[] args)
          Dump to the standard output stream a list of available operation method.
 void scanForPlugins()
          Scans for factory plug-ins on the application class path.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DefaultMathTransformFactory

public DefaultMathTransformFactory()
Constructs a default math transform factory.

Method Detail

getVendor

public org.opengis.metadata.citation.Citation getVendor()
Returns the vendor responsible for creating this factory implementation. Many implementations may be available for the same factory interface. The default implementation returns Geotools.

Specified by:
getVendor in interface org.opengis.referencing.Factory
Returns:
The vendor for this factory implementation.

getAvailableMethods

public java.util.Set getAvailableMethods(java.lang.Class type)
Returns a set of available methods for math transforms. For each element in this set, the operation method name must be known to the getDefaultParameters(java.lang.String) method in this factory. The set of available methods is implementation dependent.

Specified by:
getAvailableMethods in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
type - Operation.class for fetching all operation methods, or Projection.class for fetching only map projection methods.
Returns:
All math transform methods available in this factory.
See Also:
getDefaultParameters(java.lang.String), createParameterizedTransform(org.opengis.parameter.ParameterValueGroup)

getOperationMethod

public org.opengis.referencing.operation.OperationMethod getOperationMethod(java.lang.String name)
                                                                     throws org.opengis.referencing.NoSuchIdentifierException
Returns the operation method for the specified name.

Parameters:
name - The case insensitive identifier code of the operation method to search for (e.g. ).
Returns:
The operation method.
Throws:
org.opengis.referencing.NoSuchIdentifierException - if there is no operation method registered for the specified name.
Since:
2.2

getDefaultParameters

public org.opengis.parameter.ParameterValueGroup getDefaultParameters(java.lang.String method)
                                                               throws org.opengis.referencing.NoSuchIdentifierException
Returns the default parameter values for a math transform using the given method. The method argument is the name of any operation method returned by the getAvailableMethods(java.lang.Class) method. A typical example is "Transverse_Mercator").

This method creates new parameter instances at every call. It is intented to be modified by the user before to be passed to createParameterizedTransform(parameters).

Specified by:
getDefaultParameters in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
method - The case insensitive name of the method to search for.
Returns:
The default parameter values.
Throws:
org.opengis.referencing.NoSuchIdentifierException - if there is no transform registered for the specified method.
See Also:
getAvailableMethods(java.lang.Class), createParameterizedTransform(org.opengis.parameter.ParameterValueGroup), AbstractMathTransform.getParameterValues()

createParameterizedTransform

public org.opengis.referencing.operation.MathTransform createParameterizedTransform(org.opengis.parameter.ParameterValueGroup parameters)
                                                                             throws org.opengis.referencing.NoSuchIdentifierException,
                                                                                    org.opengis.referencing.FactoryException
Creates a transform from a group of parameters. The method name is inferred from the parameter group name. Example:
 ParameterValueGroup p = factory.getDefaultParameters("Transverse_Mercator");
 p.parameter("semi_major").setValue(6378137.000);
 p.parameter("semi_minor").setValue(6356752.314);
 MathTransform mt = factory.createParameterizedTransform(p);
 

Specified by:
createParameterizedTransform in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
parameters - The parameter values.
Returns:
The parameterized transform.
Throws:
org.opengis.referencing.NoSuchIdentifierException - if there is no transform registered for the method.
org.opengis.referencing.FactoryException - if the object creation failed. This exception is thrown if some required parameter has not been supplied, or has illegal value.
See Also:
getDefaultParameters(java.lang.String), getAvailableMethods(java.lang.Class)

createParameterizedTransform

public org.opengis.referencing.operation.MathTransform createParameterizedTransform(org.opengis.parameter.ParameterValueGroup parameters,
                                                                                    java.util.Collection methods)
                                                                             throws org.opengis.referencing.NoSuchIdentifierException,
                                                                                    org.opengis.referencing.FactoryException
Creates a transform from a group of parameters and add the method used to a list. This variant of provides a way for the client to keep trace of any operation method used by this factory.

Parameters:
parameters - The parameter values.
methods - A collection where to add the operation method that apply to the transform, or if none.
Returns:
The parameterized transform.
Throws:
org.opengis.referencing.NoSuchIdentifierException - if there is no transform registered for the method.
org.opengis.referencing.FactoryException - if the object creation failed. This exception is thrown if some required parameter has not been supplied, or has illegal value.

createAffineTransform

public org.opengis.referencing.operation.MathTransform createAffineTransform(org.opengis.referencing.operation.Matrix matrix)
                                                                      throws org.opengis.referencing.FactoryException
Creates an affine transform from a matrix. If the transform's input dimension is , and output dimension is , then the matrix will have size . The +1 in the matrix dimensions allows the matrix to do a shift, as well as a rotation. The element of the matrix will be the j'th ordinate of the moved origin. The element of the matrix will be 0 for i less than , and 1 for i equals .

Specified by:
createAffineTransform in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
matrix - The matrix used to define the affine transform.
Returns:
The affine transform.
Throws:
org.opengis.referencing.FactoryException - if the object creation failed.

createConcatenatedTransform

public org.opengis.referencing.operation.MathTransform createConcatenatedTransform(org.opengis.referencing.operation.MathTransform transform1,
                                                                                   org.opengis.referencing.operation.MathTransform transform2)
                                                                            throws org.opengis.referencing.FactoryException
Creates a transform by concatenating two existing transforms. A concatenated transform acts in the same way as applying two transforms, one after the other. The dimension of the output space of the first transform must match the dimension of the input space in the second transform. If you wish to concatenate more than two transforms, then you can repeatedly use this method.

Specified by:
createConcatenatedTransform in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
transform1 - The first transform to apply to points.
transform2 - The second transform to apply to points.
Returns:
The concatenated transform.
Throws:
org.opengis.referencing.FactoryException - if the object creation failed.

createPassThroughTransform

public org.opengis.referencing.operation.MathTransform createPassThroughTransform(int firstAffectedOrdinate,
                                                                                  org.opengis.referencing.operation.MathTransform subTransform,
                                                                                  int numTrailingOrdinates)
                                                                           throws org.opengis.referencing.FactoryException
Creates a transform which passes through a subset of ordinates to another transform. This allows transforms to operate on a subset of ordinates. For example, if you have (Lat,Lon,Height) coordinates, then you may wish to convert the height values from meters to feet without affecting the (Lat,Lon) values.

Specified by:
createPassThroughTransform in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
firstAffectedOrdinate - The lowest index of the affected ordinates.
subTransform - Transform to use for affected ordinates.
numTrailingOrdinates - Number of trailing ordinates to pass through. Affected ordinates will range from inclusive to exclusive.
Returns:
A pass through transform with the following dimensions:
 Source: firstAffectedOrdinate + subTransform.getSourceDimensions() + numTrailingOrdinates
 Target: firstAffectedOrdinate + subTransform.getTargetDimensions() + numTrailingOrdinates
Throws:
org.opengis.referencing.FactoryException - if the object creation failed.

createFromXML

public org.opengis.referencing.operation.MathTransform createFromXML(java.lang.String xml)
                                                              throws org.opengis.referencing.FactoryException
Creates a math transform object from a XML string. The default implementation always throws an exception, since this method is not yet implemented.

Specified by:
createFromXML in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
xml - Math transform encoded in XML format.
Throws:
org.opengis.referencing.FactoryException - if the object creation failed.

createFromWKT

public org.opengis.referencing.operation.MathTransform createFromWKT(java.lang.String text)
                                                              throws org.opengis.referencing.FactoryException
Creates a math transform object from a Well Known Text (WKT).

Specified by:
createFromWKT in interface org.opengis.referencing.operation.MathTransformFactory
Parameters:
text - Math transform encoded in Well-Known Text format.
Returns:
The math transform (never ).
Throws:
org.opengis.referencing.FactoryException - if the Well-Known Text can't be parsed, or if the math transform creation failed from some other reason.

scanForPlugins

public void scanForPlugins()
Scans for factory plug-ins on the application class path. This method is needed because the application class path can theoretically change, or additional plug-ins may become available. Rather than re-scanning the classpath on every invocation of the API, the class path is scanned automatically only on the first invocation. Clients can call this method to prompt a re-scan. Thus this method need only be invoked by sophisticated applications which dynamically make new plug-ins available at runtime.


main

public static void main(java.lang.String[] args)
Dump to the standard output stream a list of available operation method. This method can be invoked from the command line. It provides a mean to verify which transforms were found in the classpath. The syntax is:
java org.geotools.referencing.operation.DefaultMathTransformFactory <options> <method>

where options are:

-projections  List only projections
-conversions  List only conversions
-all  List the parameters for all transforms
-encoding <code>  Set the character encoding
-locale <language>  Set the language for the output (e.g. "fr" for French)

and <method> is the optional name of an operation method (e.g. "Affine", "EPSG:9624" or just "9624" for the affine transform method).

Note for Windows users: If the output contains strange symbols, try to supply an "" argument. Example:

java org.geotools.referencing.operation.DefaultMathTransformFactory -encoding Cp850

The codepage number (850 in the previous example) can be obtained from the DOS commande line using the "" command with no arguments. This argument need to be supplied only once.

Parameters:
args - Command line arguments.


Copyright © GeoTools. All Rights Reserved.