Albers equal area conic projection. More...
#include <AlbersEqualArea.hpp>
Public Member Functions | |
AlbersEqualArea (real a, real f, real stdlat, real k0) | |
AlbersEqualArea (real a, real f, real stdlat1, real stdlat2, real k1) | |
AlbersEqualArea (real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1) | |
void | Forward (real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const |
void | Forward (real lon0, real lat, real lon, real &x, real &y) const |
void | Reverse (real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const |
void | Reverse (real lon0, real x, real y, real &lat, real &lon) const |
void | SetScale (real lat, real k=real(1)) |
Inspector functions | |
Math::real | MajorRadius () const |
Math::real | Flattening () const |
Math::real | OriginLatitude () const |
Math::real | CentralScale () const |
Static Public Member Functions | |
static const AlbersEqualArea & | AzimuthalEqualAreaNorth () |
static const AlbersEqualArea & | AzimuthalEqualAreaSouth () |
static const AlbersEqualArea & | CylindricalEqualArea () |
Private Types | |
typedef Math::real | real |
Private Member Functions | |
real | atanhee (real x) const |
real | Datanhee (real x, real y) const |
real | DDatanhee (real x, real y) const |
void | Init (real sphi1, real cphi1, real sphi2, real cphi2, real k1) |
real | tphif (real txi) const |
real | txif (real tphi) const |
Static Private Member Functions | |
static real | atanhxm1 (real x) |
static real | Dsn (real x, real y, real sx, real sy) |
static real | hyp (real x) |
Private Attributes | |
real | _a |
real | _e |
real | _e2 |
real | _e2m |
real | _f |
real | _fm |
real | _k0 |
real | _k2 |
real | _lat0 |
real | _m02 |
real | _n0 |
real | _nrho0 |
real | _qx |
real | _qZ |
real | _scxi0 |
real | _sign |
real | _sxi0 |
real | _txi0 |
real | eps_ |
real | epsx2_ |
real | epsx_ |
real | tol0_ |
real | tol_ |
Static Private Attributes | |
static const int | numit0_ = 20 |
static const int | numit_ = 5 |
Friends | |
class | Ellipsoid |
Albers equal area conic projection.
Implementation taken from the report,
This is a implementation of the equations in Snyder except that divided differences will be [have been] used to transform the expressions into ones which may be evaluated accurately. [In this implementation, the projection correctly becomes the cylindrical equal area or the azimuthal equal area projection when the standard latitude is the equator or a pole.]
The ellipsoid parameters, the standard parallels, and the scale on the standard parallels are set in the constructor. Internally, the case with two standard parallels is converted into a single standard parallel, the latitude of minimum azimuthal scale, with an azimuthal scale specified on this parallel. This latitude is also used as the latitude of origin which is returned by AlbersEqualArea::OriginLatitude. The azimuthal scale on the latitude of origin is given by AlbersEqualArea::CentralScale. The case with two standard parallels at opposite poles is singular and is disallowed. The central meridian (which is a trivial shift of the longitude) is specified as the lon0 argument of the AlbersEqualArea::Forward and AlbersEqualArea::Reverse functions. AlbersEqualArea::Forward and AlbersEqualArea::Reverse also return the meridian convergence, γ, and azimuthal scale, k. A small square aligned with the cardinal directions is projected to a rectangle with dimensions k (in the E-W direction) and 1/k (in the N-S direction). The E-W sides of the rectangle are oriented γ degrees counter-clockwise from the x axis. There is no provision in this class for specifying a false easting or false northing or a different latitude of origin.
Example of use:
ConicProj is a command-line utility providing access to the functionality of LambertConformalConic and AlbersEqualArea.
Definition at line 60 of file AlbersEqualArea.hpp.
|
private |
Definition at line 62 of file AlbersEqualArea.hpp.
Constructor with a single standard parallel.
[in] | a | equatorial radius of ellipsoid (meters). |
[in] | f | flattening of ellipsoid. Setting f = 0 gives a sphere. Negative f gives a prolate ellipsoid. |
[in] | stdlat | standard parallel (degrees), the circle of tangency. |
[in] | k0 | azimuthal scale on the standard parallel. |
GeographicErr | if a, (1 − f) a, or k0 is not positive. |
GeographicErr | if stdlat is not in [−90°, 90°]. |
Definition at line 21 of file src/AlbersEqualArea.cpp.
GeographicLib::AlbersEqualArea::AlbersEqualArea | ( | real | a, |
real | f, | ||
real | stdlat1, | ||
real | stdlat2, | ||
real | k1 | ||
) |
Constructor with two standard parallels.
[in] | a | equatorial radius of ellipsoid (meters). |
[in] | f | flattening of ellipsoid. Setting f = 0 gives a sphere. Negative f gives a prolate ellipsoid. |
[in] | stdlat1 | first standard parallel (degrees). |
[in] | stdlat2 | second standard parallel (degrees). |
[in] | k1 | azimuthal scale on the standard parallels. |
GeographicErr | if a, (1 − f) a, or k1 is not positive. |
GeographicErr | if stdlat1 or stdlat2 is not in [−90°, 90°], or if stdlat1 and stdlat2 are opposite poles. |
Definition at line 49 of file src/AlbersEqualArea.cpp.
GeographicLib::AlbersEqualArea::AlbersEqualArea | ( | real | a, |
real | f, | ||
real | sinlat1, | ||
real | coslat1, | ||
real | sinlat2, | ||
real | coslat2, | ||
real | k1 | ||
) |
Constructor with two standard parallels specified by sines and cosines.
[in] | a | equatorial radius of ellipsoid (meters). |
[in] | f | flattening of ellipsoid. Setting f = 0 gives a sphere. Negative f gives a prolate ellipsoid. |
[in] | sinlat1 | sine of first standard parallel. |
[in] | coslat1 | cosine of first standard parallel. |
[in] | sinlat2 | sine of second standard parallel. |
[in] | coslat2 | cosine of second standard parallel. |
[in] | k1 | azimuthal scale on the standard parallels. |
GeographicErr | if a, (1 − f) a, or k1 is not positive. |
GeographicErr | if stdlat1 or stdlat2 is not in [−90°, 90°], or if stdlat1 and stdlat2 are opposite poles. |
This allows parallels close to the poles to be specified accurately. This routine computes the latitude of origin and the azimuthal scale at this latitude. If dlat = abs(lat2 − lat1) ≤ 160°, then the error in the latitude of origin is less than 4.5 × 10−14d;.
Definition at line 81 of file src/AlbersEqualArea.cpp.
Definition at line 73 of file AlbersEqualArea.hpp.
|
staticprivate |
Definition at line 348 of file src/AlbersEqualArea.cpp.
|
static |
A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, stdlat = 90°, and k0 = 1. This degenerates to the Lambert azimuthal equal area projection.
Definition at line 284 of file src/AlbersEqualArea.cpp.
|
static |
A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, stdlat = −90°, and k0 = 1. This degenerates to the Lambert azimuthal equal area projection.
Definition at line 291 of file src/AlbersEqualArea.cpp.
|
inline |
Definition at line 285 of file AlbersEqualArea.hpp.
|
static |
A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, stdlat = 0, and k0 = 1. This degenerates to the cylindrical equal area projection.
Definition at line 277 of file src/AlbersEqualArea.cpp.
Definition at line 109 of file AlbersEqualArea.hpp.
|
private |
Definition at line 366 of file src/AlbersEqualArea.cpp.
|
inlinestaticprivate |
Definition at line 102 of file AlbersEqualArea.hpp.
|
inline |
Definition at line 270 of file AlbersEqualArea.hpp.
void GeographicLib::AlbersEqualArea::Forward | ( | real | lon0, |
real | lat, | ||
real | lon, | ||
real & | x, | ||
real & | y, | ||
real & | gamma, | ||
real & | k | ||
) | const |
Forward projection, from geographic to Lambert conformal conic.
[in] | lon0 | central meridian longitude (degrees). |
[in] | lat | latitude of point (degrees). |
[in] | lon | longitude of point (degrees). |
[out] | x | easting of point (meters). |
[out] | y | northing of point (meters). |
[out] | gamma | meridian convergence at point (degrees). |
[out] | k | azimuthal scale of projection at point; the radial scale is the 1/k. |
The latitude origin is given by AlbersEqualArea::LatitudeOrigin(). No false easting or northing is added and lat should be in the range [−90°, 90°]. The values of x and y returned for points which project to infinity (i.e., one or both of the poles) will be large but finite.
Definition at line 386 of file src/AlbersEqualArea.cpp.
|
inline |
AlbersEqualArea::Forward without returning the convergence and scale.
Definition at line 241 of file AlbersEqualArea.hpp.
Definition at line 69 of file AlbersEqualArea.hpp.
|
private |
Definition at line 119 of file src/AlbersEqualArea.cpp.
|
inline |
Definition at line 264 of file AlbersEqualArea.hpp.
|
inline |
This is the latitude of minimum azimuthal scale and equals the stdlat in the 1-parallel constructor and lies between stdlat1 and stdlat2 in the 2-parallel constructors.
Definition at line 279 of file AlbersEqualArea.hpp.
void GeographicLib::AlbersEqualArea::Reverse | ( | real | lon0, |
real | x, | ||
real | y, | ||
real & | lat, | ||
real & | lon, | ||
real & | gamma, | ||
real & | k | ||
) | const |
Reverse projection, from Lambert conformal conic to geographic.
[in] | lon0 | central meridian longitude (degrees). |
[in] | x | easting of point (meters). |
[in] | y | northing of point (meters). |
[out] | lat | latitude of point (degrees). |
[out] | lon | longitude of point (degrees). |
[out] | gamma | meridian convergence at point (degrees). |
[out] | k | azimuthal scale of projection at point; the radial scale is the 1/k. |
The latitude origin is given by AlbersEqualArea::LatitudeOrigin(). No false easting or northing is added. The value of lon returned is in the range [−180°, 180°]. The value of lat returned is in the range [−90°, 90°]. If the input point is outside the legal projected space the nearest pole is returned.
Definition at line 411 of file src/AlbersEqualArea.cpp.
|
inline |
AlbersEqualArea::Reverse without returning the convergence and scale.
Definition at line 251 of file AlbersEqualArea.hpp.
Set the azimuthal scale for the projection.
[in] | lat | (degrees). |
[in] | k | azimuthal scale at latitude lat (default 1). |
GeographicErr | k is not positive. |
GeographicErr | if lat is not in (−90°, 90°). |
This allows a "latitude of conformality" to be specified.
Definition at line 433 of file src/AlbersEqualArea.cpp.
|
private |
Definition at line 325 of file src/AlbersEqualArea.cpp.
|
private |
Definition at line 298 of file src/AlbersEqualArea.cpp.
|
friend |
Definition at line 119 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 65 of file AlbersEqualArea.hpp.
|
private |
Definition at line 66 of file AlbersEqualArea.hpp.
|
private |
Definition at line 65 of file AlbersEqualArea.hpp.
|
private |
Definition at line 66 of file AlbersEqualArea.hpp.
|
private |
Definition at line 66 of file AlbersEqualArea.hpp.
|
private |
Definition at line 66 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 64 of file AlbersEqualArea.hpp.
|
private |
Definition at line 66 of file AlbersEqualArea.hpp.
|
private |
Definition at line 65 of file AlbersEqualArea.hpp.
|
private |
Definition at line 66 of file AlbersEqualArea.hpp.
|
private |
Definition at line 66 of file AlbersEqualArea.hpp.
|
private |
Definition at line 63 of file AlbersEqualArea.hpp.
|
private |
Definition at line 63 of file AlbersEqualArea.hpp.
|
private |
Definition at line 63 of file AlbersEqualArea.hpp.
|
staticprivate |
Definition at line 68 of file AlbersEqualArea.hpp.
|
staticprivate |
Definition at line 67 of file AlbersEqualArea.hpp.
|
private |
Definition at line 63 of file AlbersEqualArea.hpp.
|
private |
Definition at line 63 of file AlbersEqualArea.hpp.