org.geotoolkit.referencing.operation.projection
Class ObliqueMercator

Object
  extended by FormattableObject
      extended by AbstractMathTransform
          extended by AbstractMathTransform2D
              extended by UnitaryProjection
                  extended by ObliqueMercator
All Implemented Interfaces:
Serializable, Formattable, Parameterized, LenientComparable, MathTransform, MathTransform2D

@Immutable
public class ObliqueMercator
extends UnitaryProjection

Oblique Mercator projection (EPSG code 9815). See the Mercator projection on MathWorld for an overview. See any of the following providers for a list of programmatic parameters:


Description
The Oblique Mercator projection is a conformal, oblique, cylindrical projection with the cylinder touching the ellipsoid (or sphere) along a great circle path (the central line). The Mercator and Transverse Mercator projections can be thought of as special cases of the oblique Mercator, where the central line is along the equator or a meridian, respectively. The Oblique Mercator projection has been used in Switzerland, Hungary, Madagascar, Malaysia, Borneo and the panhandle of Alaska.

The Oblique Mercator projection uses a (U,V) coordinate system, with the U axis along the central line. During the forward projection, coordinates from the ellipsoid are projected conformally to a sphere of constant total curvature, called the "aposphere", before being projected onto the plane. The projection coordinates are further converted to a (X,Y) coordinate system by rotating the calculated (u,v) coordinates to give output (x,y) coordinates. The rotation value is usually the same as the projection azimuth (the angle, east of north, of the central line), but some cases allow a separate rotation parameter.

There are two forms of the oblique Mercator, differing in the origin of their grid coordinates. The Hotine Oblique Mercator (EPSG code 9812) has grid coordinates start at the intersection of the central line and the equator of the aposphere. The Oblique Mercator (EPSG code 9815) is the same, except the grid coordinates begin at the central point (where the latitude of center and central line intersect). ESRI separates these two case by appending "Natural_Origin" (for the "Hotine_Oblique_Mercator") and "Center" (for the "Oblique_Mercator") to the projection names.

Two different methods are used to specify the central line for the oblique Mercator: 1) a central point and an azimuth, east of north, describing the central line and 2) two points on the central line. The EPSG does not use the two point method, while ESRI separates the two cases by putting "Azimuth" and "Two_Point" in their projection names. Both cases use the point where the "latitude_of_center" parameter crosses the central line as the projection's central point. The "central_meridian" is not a projection parameter, and is instead calculated as the intersection between the central line and the equator of the aposphere.

For the azimuth method, the central latitude cannot be ±90 degrees and the central line cannot be at a maximum or minimum latitude at the central point. In the two point method, the latitude of the first and second points cannot be equal. Also, the latitude of the first point and central point cannot be ±90 degrees. Furthermore, the latitude of the first point cannot be 0 and the latitude of the second point cannot be -90 degrees. A change of 10-7 radians can allow calculation at these special cases. Snyder's restriction of the central latitude being 0 has been removed, since the equations appear to work correctly in this case.

Azimuth values of 0 and ±90 degrees are allowed (and used in Hungary and Switzerland), though these cases would usually use a Mercator or Transverse Mercator projection instead. Azimuth values > 90 degrees cause errors in the equations.

The oblique Mercator is also called the "Rectified Skew Orthomorphic" (RSO). It appears that the only difference from the oblique Mercator is that the RSO allows the rotation from the (U,V) to (X,Y) coordinate system to be different from the azimuth. This separate parameter is called "rectified_grid_angle" (or "XY_Plane_Rotation" by ESRI) and is also included in the EPSG's parameters for the Oblique Mercator and Hotine Oblique Mercator. The rotation parameter is optional in all the non-two point projections and will be set to the azimuth if not specified.

Projection cases and aliases implemented by the ObliqueMercator are:

NameAuthorityRemarks
Oblique_MercatorEPSG:9815 grid coordinates begin at the central point, has "rectified_grid_angle" parameter.
Hotine_Oblique_Mercator_Azimuth_CenterESRI grid coordinates begin at the central point.
Rectified_Skew_Orthomorphic_CenterESRI grid coordinates begin at the central point, has "rectified_grid_angle" parameter.
Hotine_Oblique_MercatorEPSG:9812 grid coordinates begin at the intersection of the central line and aposphere equator, has "rectified_grid_angle" parameter.
Hotine_Oblique_Mercator_Azimuth_Natural_OriginESRI grid coordinates begin at the intersection of the central line and aposphere equator.
Rectified_Skew_Orthomorphic_Natural_OriginESRI grid coordinates begin at the intersection of the central line and aposphere equator, has "rectified_grid_angle" parameter.
Hotine_Oblique_Mercator_Two_Point_CenterESRI grid coordinates begin at the central point.
Hotine_Oblique_Mercator_Two_Point_Natural_OriginESRI grid coordinates begin at the intersection of the central line and aposphere equator.


References

Since:
2.1
Version:
3.19
Author:
Gerald Evenden (USGS), Rueben Schulz (UBC), Martin Desruisseaux (Geomatys), Rémi Maréchal (Geomatys)
See Also:
Mercator, TransverseMercator, Serialized Form
Module:
referencing/geotk-referencing (download)    View source code for this class

Nested Class Summary
protected static class ObliqueMercator.Parameters
          Parameters used in Oblique Mercator projections.
 
Field Summary
 
Fields inherited from class UnitaryProjection
excentricity, excentricitySquared
 
Fields inherited from class FormattableObject
EPSG, GEOTIFF, INTERNAL, OGC, SINGLE_LINE
 
Constructor Summary
protected ObliqueMercator(ObliqueMercator.Parameters parameters)
          Constructs a new map projection from the supplied parameters.
 
Method Summary
static MathTransform2D create(ParameterDescriptorGroup descriptor, ParameterValueGroup values)
          Creates an Oblique Mercator projection from the given parameters.
 Matrix derivative(Point2D point)
          Gets the derivative of this transform at a point.
 boolean equals(Object object, ComparisonMode mode)
          Compares the given object with this transform for equivalence.
protected  void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff)
          Transforms the specified (x,y) coordinates and stores the result in dstPts (angles in radians).
protected  void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff)
          Transforms the specified (λ,φ) coordinates (units in radians) and stores the result in dstPts (linear distance on a unit sphere).
 
Methods inherited from class UnitaryProjection
computeHashCode, finish, getParameterValues, getUnmarshalledParameters, inverse, resetWarnings, rollLongitude, transform, unrollLongitude
 
Methods inherited from class AbstractMathTransform2D
getParameterDescriptors, getSourceDimensions, getTargetDimensions, transform
 
Methods inherited from class AbstractMathTransform
createTransformedShape, derivative, ensureNonNull, equals, formatWKT, getName, hashCode, isIdentity, rollLongitude, transform, transform, transform, transform
 
Methods inherited from class FormattableObject
getDefaultIndentation, print, setDefaultIndentation, toString, toWKT, toWKT, toWKT
 
Methods inherited from class Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface MathTransform2D
createTransformedShape
 
Methods inherited from interface MathTransform
derivative, isIdentity, toWKT, transform, transform, transform, transform
 

Constructor Detail

ObliqueMercator

protected ObliqueMercator(ObliqueMercator.Parameters parameters)
Constructs a new map projection from the supplied parameters.

Parameters:
parameters - The parameters of the projection to be created.
Method Detail

create

public static MathTransform2D create(ParameterDescriptorGroup descriptor,
                                     ParameterValueGroup values)
Creates an Oblique Mercator projection from the given parameters. The descriptor argument is usually the PARAMETERS constant defined in ObliqueMercator or a subclass, but is not restricted to. If a different descriptor is supplied, it is user's responsibility to ensure that it is suitable to an Oblique Mercator projection.

Parameters:
descriptor - Typically ObliqueMercator.PARAMETERS, or the parameters from one of its subclasses.
values - The parameter values of the projection to create.
Returns:
The map projection.
Since:
3.00

transform

protected void transform(double[] srcPts,
                         int srcOff,
                         double[] dstPts,
                         int dstOff)
                  throws ProjectionException
Transforms the specified (λ,φ) coordinates (units in radians) and stores the result in dstPts (linear distance on a unit sphere).

Specified by:
transform in class UnitaryProjection
Parameters:
srcPts - The array containing the source point coordinate, as (longitude, latitude) angles in radians.
srcOff - The offset of the point to be converted in the source array.
dstPts - the array into which the converted point coordinate is returned (may be the same than srcPts). Ordinates will be in a dimensionless unit, as a linear distance on a unit sphere or ellipse.
dstOff - The offset of the location of the converted point that is stored in the destination array.
Throws:
ProjectionException - if the point can't be converted.

inverseTransform

protected void inverseTransform(double[] srcPts,
                                int srcOff,
                                double[] dstPts,
                                int dstOff)
                         throws ProjectionException
Transforms the specified (x,y) coordinates and stores the result in dstPts (angles in radians).

Specified by:
inverseTransform in class UnitaryProjection
Parameters:
srcPts - The array containing the source point coordinate, as linear distance on a unit sphere or ellipse.
srcOff - The offset of the point to be converted in the source array.
dstPts - the array into which the converted point coordinate is returned (may be the same than srcPts). Ordinates will be (longitude, latitude) angles in radians.
dstOff - The offset of the location of the converted point that is stored in the destination array.
Throws:
ProjectionException - if the point can't be converted.

derivative

public Matrix derivative(Point2D point)
                  throws ProjectionException
Gets the derivative of this transform at a point.

Specified by:
derivative in interface MathTransform2D
Overrides:
derivative in class AbstractMathTransform
Parameters:
point - The coordinate point where to evaluate the derivative.
Returns:
The derivative at the specified point as a 2×2 matrix.
Throws:
ProjectionException - if the derivative can't be evaluated at the specified point.
See Also:
MathTransform2D.derivative(Point2D)

equals

public boolean equals(Object object,
                      ComparisonMode mode)
Compares the given object with this transform for equivalence.

Specified by:
equals in interface LenientComparable
Overrides:
equals in class UnitaryProjection
Parameters:
object - The object to compare with this unitary projection for equivalence.
mode - The strictness level of the comparison. Default to STRICT.
Returns:
true if the given object is equivalent to this unitary projection.


Copyright © 2009-2011 Geotoolkit.org. All Rights Reserved.