Class TransverseMercator
- Object
-
- Formattable
-
- AbstractMathTransform
-
- MapProjection
-
- TransverseMercator
-
- All Implemented Interfaces:
Serializable
,MathTransform
,MathTransform2D
public class TransverseMercator extends MapProjection
Transverse Mercator Projection (EPSG code 9807). This is a cylindrical projection, in which the cylinder has been rotated 90°. Instead of being tangent to the equator (or to an other standard latitude), it is tangent to a central meridian. Deformation are more important as we are going futher from the central meridian. The Transverse Mercator projection is appropriate for region wich have a greater extent north-south than east-west.The elliptical equations used here are series approximations, and their accuracy decreases as points move farther from the central meridian of the projection. The forward equations here are accurate to a less than a mm ±10 degrees from the central meridian, a few mm ±15 degrees from the central meridian and a few cm ±20 degrees from the central meridian. The spherical equations are not approximations and should always give the correct values.
There are a number of versions of the transverse mercator projection including the Universal (UTM) and Modified (MTM) Transverses Mercator projections. In these cases the earth is divided into zones. For the UTM the zones are 6 degrees wide, numbered from 1 to 60 proceeding east from 180 degrees longitude, and between lats 84 degrees North and 80 degrees South. The central meridian is taken as the center of the zone and the latitude of origin is the equator. A scale factor of 0.9996 and false easting of 500000m is used for all zones and a false northing of 10000000m is used for zones in the southern hemisphere.
NOTE: formulas used below are not those of Snyder, but rather those from the
proj4
package of the USGS survey, which have been reproduced verbatim. USGS work is acknowledged here.References:
- Proj-4.4.6 available at www.remotesensing.org/proj
Relevent files are:PJ_tmerc.c
,pj_mlfn.c
,pj_fwd.c
andpj_inv.c
. - John P. Snyder (Map Projections - A Working Manual, U.S. Geological Survey Professional Paper 1395, 1987).
- "Coordinate Conversions and Transformations including Formulas", EPSG Guidence Note Number 7, Version 19.
- Since:
- 2.1
- Author:
- André Gosselin, Martin Desruisseaux (PMO, IRD), Rueben Schulz
- See Also:
- Transverse Mercator projection on MathWorld, "Transverse_Mercator" on RemoteSensing.org, Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
TransverseMercator.Provider
The math transform provider for a Transverse Mercator projection (EPSG code 9807).static class
TransverseMercator.Provider_SouthOrientated
The math transform provider for a South Orientated Transverse Mercator projection (EPSG code 9808).-
Nested classes/interfaces inherited from class MapProjection
MapProjection.AbstractProvider
-
-
Field Summary
-
Fields inherited from class MapProjection
centralMeridian, en0, en1, en2, en3, en4, excentricity, excentricitySquared, falseEasting, falseNorthing, globalScale, invertible, isSpherical, latitudeOfOrigin, LOGGER, scaleFactor, semiMajor, semiMinor, SKIP_SANITY_CHECKS
-
Fields inherited from class Formattable
SINGLE_LINE
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
TransverseMercator(ParameterValueGroup parameters)
Constructs a new map projection from the supplied parameters.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(Object o)
Compares the specified object with this map projection for equality.double
getCentralMeridian()
Convenience method returning the meridian in the middle of current zone.ParameterDescriptorGroup
getParameterDescriptors()
Returns the parameter descriptors for this map projection.protected double
getToleranceForAssertions(double longitude, double latitude)
Maximal error (in metres) tolerated for assertions, if enabled.int
getZone()
Convenience method computing the zone code from the central meridian.int
hashCode()
Returns a hash value for this projection.protected Point2D
inverseTransformNormalized(double x, double y, Point2D ptDst)
Transforms the specified (x,y) coordinates and stores the result inptDst
.protected Point2D
transformNormalized(double x, double y, Point2D ptDst)
Transforms the specified (λ,φ) coordinates (units in radians) and stores the result inptDst
(linear distance on a unit sphere).-
Methods inherited from class MapProjection
checkReciprocal, getParameterValues, getSourceDimensions, getTargetDimensions, inv_mlfn, inverse, mlfn, orthodromicDistance, resetWarnings, transform, transform, transform
-
Methods inherited from class AbstractMathTransform
createTransformedShape, derivative, derivative, ensureNonNull, formatWKT, getName, isIdentity, needCopy, normalizeAngle, rollLongitude, transform, transform, transform
-
Methods inherited from class Formattable
cleanupThreadLocals, toString, toWKT, toWKT, toWKT, toWKT
-
Methods inherited from interface MathTransform
derivative, isIdentity, toWKT, transform, transform, transform
-
Methods inherited from interface MathTransform2D
createTransformedShape, derivative
-
-
-
-
Constructor Detail
-
TransverseMercator
protected TransverseMercator(ParameterValueGroup parameters) throws ParameterNotFoundException
Constructs a new map projection from the supplied parameters.- Parameters:
parameters
- The parameter values in standard units.- Throws:
ParameterNotFoundException
- if a mandatory parameter is missing.
-
-
Method Detail
-
getParameterDescriptors
public ParameterDescriptorGroup getParameterDescriptors()
Returns the parameter descriptors for this map projection. This is used for a providing a default implementation ofMapProjection.getParameterValues()
, as well as arguments checking.- Specified by:
getParameterDescriptors
in classMapProjection
- Returns:
- The parameter descriptors for this math transform, or
null
. - See Also:
OperationMethod.getParameters()
-
transformNormalized
protected Point2D transformNormalized(double x, double y, Point2D ptDst) throws ProjectionException
Transforms the specified (λ,φ) coordinates (units in radians) and stores the result inptDst
(linear distance on a unit sphere).- Specified by:
transformNormalized
in classMapProjection
- Parameters:
x
- The longitude of the coordinate, in radians.y
- The latitude of the coordinate, in radians.ptDst
- the specified coordinate point that stores the result of transformingptSrc
, ornull
. Ordinates will be in a dimensionless unit, as a linear distance on a unit sphere or ellipse.- Returns:
- the coordinate point after transforming (
lambda
,phi
) and storing the result inptDst
. - Throws:
ProjectionException
- if the point can't be transformed.
-
inverseTransformNormalized
protected Point2D inverseTransformNormalized(double x, double y, Point2D ptDst) throws ProjectionException
Transforms the specified (x,y) coordinates and stores the result inptDst
.- Specified by:
inverseTransformNormalized
in classMapProjection
- Parameters:
x
- The easting of the coordinate, linear distance on a unit sphere or ellipse.y
- The northing of the coordinate, linear distance on a unit sphere or ellipse.ptDst
- the specified coordinate point that stores the result of transformingptSrc
, ornull
. Ordinates will be in radians.- Returns:
- the coordinate point after transforming
x
,y
and storing the result inptDst
. - Throws:
ProjectionException
- if the point can't be transformed.
-
getToleranceForAssertions
protected double getToleranceForAssertions(double longitude, double latitude)
Maximal error (in metres) tolerated for assertions, if enabled. When assertions are enabled, every direct projection is followed by an inverse projection, and the result is compared to the original coordinate. If a distance greater than the tolerance level is found, then anProjectionException
will be thrown. Subclasses should override this method if they need to relax the tolerance level.- Overrides:
getToleranceForAssertions
in classMapProjection
- Parameters:
longitude
- The longitude in decimal degrees.latitude
- The latitude in decimal degrees.- Returns:
- The tolerance level for assertions, in meters.
-
getZone
public int getZone()
Convenience method computing the zone code from the central meridian.- Returns:
- The zone number, using the scalefactor and false easting to decide if this is a UTM or MTM case. Returns 0 if the case of the projection cannot be determined.
-
getCentralMeridian
public double getCentralMeridian()
Convenience method returning the meridian in the middle of current zone. This meridian is typically the central meridian. This method may be invoked to make sure that the central meridian is correctly set.- Returns:
- The central meridian, using the scalefactor and false easting to decide if this is a
UTM or MTM case. Returns
Double.NaN
if the case of the projection cannot be determined.
-
hashCode
public int hashCode()
Returns a hash value for this projection.- Overrides:
hashCode
in classMapProjection
-
equals
public boolean equals(Object o)
Description copied from class:MapProjection
Compares the specified object with this map projection for equality.- Overrides:
equals
in classMapProjection
- Parameters:
o
- 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.
-
-