public class TransverseMercator extends AbstractProj
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.
This class has been derived from the implementation of the Geotools project; git 8cbf52d, org.geotools.referencing.operation.projection.TransverseMercator at the time of migration.
References:
PJ_tmerc.c
, pj_mlfn.c
, pj_fwd.c
and pj_inv.c
.Modifier and Type | Field and Description |
---|---|
private double |
eb2
A derived quantity of excentricity, computed by
e'² = (a²-b²)/b² = es/(1-es)
where a is the semi-major axis length and b is the semi-minor axis
length. |
private static double |
EPSILON
Maximum difference allowed when comparing real numbers.
|
private static double |
FC1
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
private static double |
FC2
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
private static double |
FC3
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
private static double |
FC4
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
private static double |
FC5
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
private static double |
FC6
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
private static double |
FC7
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
private static double |
FC8
Contants used for the forward and inverse transform for the eliptical
case of the Transverse Mercator.
|
protected double |
latitudeOfOrigin
Latitude of origin in radians.
|
private double |
ml0
Meridian distance at the
latitudeOfOrigin . |
Constructor and Description |
---|
TransverseMercator() |
Modifier and Type | Method and Description |
---|---|
Bounds |
getAlgorithmBounds()
Return the bounds where this projection is applicable.
|
java.lang.String |
getName()
Replies a human readable name of this projection.
|
java.lang.String |
getProj4Id()
Replies the Proj.4 identifier.
|
void |
initialize(ProjParameters params)
Initialize the projection using the provided parameters.
|
double[] |
invproject(double x,
double y)
Convert east/north to lat/lon.
|
double[] |
project(double y,
double x)
Convert lat/lon to east/north.
|
inv_mlfn, mlfn, normalizeLon
private static final double FC1
private static final double FC2
private static final double FC3
private static final double FC4
private static final double FC5
private static final double FC6
private static final double FC7
private static final double FC8
private static final double EPSILON
private double eb2
e'² = (a²-b²)/b² = es/(1-es)
where a is the semi-major axis length and b is the semi-minor axis
length.protected double latitudeOfOrigin
Consider this field as final. It is not final only because some classes need to modify it at construction time.
private double ml0
latitudeOfOrigin
.
Used for calculations for the ellipsoid.public TransverseMercator()
public java.lang.String getName()
Proj
public java.lang.String getProj4Id()
Proj
null
.public void initialize(ProjParameters params) throws ProjectionConfigurationException
Proj
initialize
in interface Proj
initialize
in class AbstractProj
params
- The projection parametersProjectionConfigurationException
- in case parameters are not suitablepublic double[] project(double y, double x)
Proj
y
- the latitude in radiansx
- the longitude in radianspublic double[] invproject(double x, double y)
Proj
x
- east value in meters, divided by the semi major axis of the ellipsoidy
- north value in meters, divided by the semi major axis of the ellipsoidpublic Bounds getAlgorithmBounds()
Proj