| org.geotools.referencing.operation.projection.MapProjection org.geotools.referencing.operation.projection.ObliqueMercator
All known Subclasses: org.geotools.referencing.operation.projection.HotineObliqueMercator,
ObliqueMercator | public class ObliqueMercator extends MapProjection (Code) | | Oblique Mercator Projection. A conformal, oblique, cylindrical projection
with the cylinder touching the ellipsoid (or sphere) along a great circle
path (the central line). The
and
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 convented 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
(EPSG code 9812) has grid coordinates start at the intersection of the central line
and the equator of the aposphere. The
(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
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.0 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.0 degrees. Furthermore, the latitude of the first point cannot be 0.0 and
the latitude of the second point cannot be -90.0 degrees. A change of
10-7 radians can allow calculation at these special cases. Snyder's restriction
of the central latitude being 0.0 has been removed, since the equations appear
to work correctly in this case.
Azimuth values of 0.0 and ±90.0 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
is 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:
- Oblique_Mercator (EPSG code 9815) - grid coordinates begin at the central point, has "rectified_grid_angle" parameter.
- Hotine_Oblique_Mercator_Azimuth_Center (ESRI) - grid coordinates begin at the central point.
- Rectified_Skew_Orthomorphic_Center (ESRI) - grid coordinates begin at the central point, has "rectified_grid_angle" parameter.
- Hotine_Oblique_Mercator (EPSG code 9812) - grid coordinates begin at the interseciton of the central line and aposphere equator, has "rectified_grid_angle" parameter.
- Hotine_Oblique_Mercator_Azimuth_Natural_Origin (ESRI) - grid coordinates begin at the interseciton of the central line and aposphere equator.
- Rectified_Skew_Orthomorphic_Natural_Origin (ESRI) - grid coordinates begin at the interseciton of the central line and aposphere equator, has "rectified_grid_angle" parameter.
- Hotine_Oblique_Mercator_Two_Point_Center (ESRI) - grid coordinates begin at the central point.
- Hotine_Oblique_Mercator_Two_Point_Natural_Origin (ESRI) - grid coordinates begin at the interseciton of the central line and aposphere equator.
References:
-
libproj4 is available at
libproj4 Miscellanea
Relevent files are:
PJ_omerc.c ,
pj_tsfn.c ,
pj_fwd.c ,
pj_inv.c and
lib_proj.h
- 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 part 2, Version 24.
- Gerald Evenden, 2004,
Documentation of revised Oblique Mercator
See Also: Oblique Mercator projection on MathWorld See Also: "hotine_oblique_mercator" on RemoteSensing.org See Also: "oblique_mercator" on RemoteSensing.org since: 2.1 version: $Id: ObliqueMercator.java 24581 2007-02-26 01:36:46Z desruisseaux $ author: Rueben Schulz |
Inner Class :public static class Provider extends AbstractProvider | |
Inner Class :public static class Provider_TwoPoint extends Provider | |
Field Summary | |
final protected double | azimuth The azimuth of the central line passing throught the centre of the projection, in radians. | final protected double | latitudeOfCentre Latitude of the projection centre. | final protected double | longitudeOfCentre Longitude of the projection centre. | final protected double | rectifiedGridAngle The rectified bearing of the central line, in radians. | final boolean | twoPoint true if using two points on the central line to specify the azimuth. |
Constructor Summary | |
protected | ObliqueMercator(ParameterValueGroup parameters) Constructs a new map projection from the supplied parameters. | | ObliqueMercator(ParameterValueGroup parameters, Collection expected, boolean twoPoint, boolean hotine) Constructs a new map projection from the supplied parameters.
Parameters: parameters - The parameter values in standard units. Parameters: expected - The expected parameter descriptors. Parameters: twoPoint - true for the "two points" case, or false for the"azimuth" case. |
azimuth | final protected double azimuth(Code) | | The azimuth of the central line passing throught the centre of the projection, in radians.
|
latitudeOfCentre | final protected double latitudeOfCentre(Code) | | Latitude of the projection centre. This is similar to the
ObliqueMercator.latitudeOfOrigin , but the latitude of origin is the
Earth equator on aposphere for the oblique mercator.
|
longitudeOfCentre | final protected double longitudeOfCentre(Code) | | Longitude of the projection centre. This is NOT equal
to the
ObliqueMercator.centralMeridian , which is the meridian where the
central line intersects the Earth equator on aposphere.
This parameter applies to the "azimuth" case only.
It is set to
Double.NaN NaN for the "two points" case.
|
rectifiedGridAngle | final protected double rectifiedGridAngle(Code) | | The rectified bearing of the central line, in radians. This is equals to the
if the
Provider.RECTIFIED_GRID_ANGLE "rectified_grid_angle" parameter value is not set.
|
twoPoint | final boolean twoPoint(Code) | | true if using two points on the central line to specify the azimuth.
|
ObliqueMercator | protected ObliqueMercator(ParameterValueGroup parameters) throws ParameterNotFoundException(Code) | | 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. since: 2.4 |
ObliqueMercator | ObliqueMercator(ParameterValueGroup parameters, Collection expected, boolean twoPoint, boolean hotine) throws ParameterNotFoundException(Code) | | Constructs a new map projection from the supplied parameters.
Parameters: parameters - The parameter values in standard units. Parameters: expected - The expected parameter descriptors. Parameters: twoPoint - true for the "two points" case, or false for the"azimuth" case. The former is used by ESRI but not EPSG. Parameters: hotine - true only if invoked by the HotineObliqueMercatorconstructor. throws: ParameterNotFoundException - if a mandatory parameter is missing. |
equals | public boolean equals(Object object)(Code) | | Compares the specified object with this map projection for equality.
|
getParameterDescriptors | public ParameterDescriptorGroup getParameterDescriptors()(Code) | | |
getParameterValues | public ParameterValueGroup getParameterValues()(Code) | | |
getToleranceForAssertions | protected double getToleranceForAssertions(double longitude, double latitude)(Code) | | Maximal error (in metres) tolerated for assertion, if enabled.
Parameters: longitude - The longitude in decimal degrees. Parameters: latitude - The latitude in decimal degrees. The tolerance level for assertions, in meters. |
hashCode | public int hashCode()(Code) | | Returns a hash value for this projection.
|
Methods inherited from org.geotools.referencing.operation.projection.MapProjection | static boolean checkInverseTransform(double longitude, double latitude, Point2D expected, double tolerance)(Code)(Java Doc) static boolean checkInverseTransform(double longitude, double latitude, Point2D expected)(Code)(Java Doc) static boolean checkTransform(double x, double y, Point2D expected, double tolerance)(Code)(Java Doc) static boolean checkTransform(double x, double y, Point2D expected)(Code)(Java Doc) final double cphi2(double ts) throws ProjectionException(Code)(Java Doc) final double doubleValue(Collection expected, ParameterDescriptor param, ParameterValueGroup group) throws ParameterNotFoundException(Code)(Java Doc) static void ensureLatitudeEquals(ParameterDescriptor name, double y, double expected) throws IllegalArgumentException(Code)(Java Doc) static void ensureLatitudeInRange(ParameterDescriptor name, double y, boolean edge) throws IllegalArgumentException(Code)(Java Doc) static void ensureLongitudeInRange(ParameterDescriptor name, double x, boolean edge) throws IllegalArgumentException(Code)(Java Doc) final void ensureSpherical() throws IllegalArgumentException(Code)(Java Doc) public boolean equals(Object object)(Code)(Java Doc) static boolean equals(double value1, double value2)(Code)(Java Doc) abstract public ParameterDescriptorGroup getParameterDescriptors()(Code)(Java Doc) public ParameterValueGroup getParameterValues()(Code)(Java Doc) final public int getSourceDimensions()(Code)(Java Doc) final public int getTargetDimensions()(Code)(Java Doc) protected double getToleranceForAssertions(double longitude, double latitude)(Code)(Java Doc) public int hashCode()(Code)(Java Doc) final public MathTransform inverse()(Code)(Java Doc) abstract protected Point2D inverseTransformNormalized(double x, double y, Point2D ptDst) throws ProjectionException(Code)(Java Doc) boolean isExpectedParameter(Collection expected, ParameterDescriptor param)(Code)(Java Doc) final double msfn(double s, double c)(Code)(Java Doc) final void set(Collection expected, ParameterDescriptor param, ParameterValueGroup group, double value)(Code)(Java Doc) final public Point2D transform(Point2D ptSrc, Point2D ptDst) throws ProjectionException(Code)(Java Doc) final public void transform(double[] src, int srcOffset, double[] dest, int dstOffset, int numPts) throws ProjectionException(Code)(Java Doc) final public void transform(float[] src, int srcOffset, float[] dest, int dstOffset, int numPts) throws ProjectionException(Code)(Java Doc) abstract protected Point2D transformNormalized(double x, double y, Point2D ptDst) throws ProjectionException(Code)(Java Doc) final double tsfn(double phi, double sinphi)(Code)(Java Doc)
|
|
|