.NET Wrapper for GeographicLib::AlbersEqualArea. More...
#include <NETGeographicLib/AlbersEqualArea.h>
Public Types | |
enum | StandardTypes { CylindricalEqualArea, AzimuthalEqualAreaNorth, AzimuthalEqualAreaSouth } |
Public Member Functions | |
~AlbersEqualArea () | |
Destructor. | |
AlbersEqualArea (StandardTypes type) | |
AlbersEqualArea (double a, double f, double stdlat, double k0) | |
AlbersEqualArea (double a, double f, double stdlat1, double stdlat2, double k1) | |
AlbersEqualArea (double a, double f, double sinlat1, double coslat1, double sinlat2, double coslat2, double k1) | |
void | SetScale (double lat, double k) |
void | Forward (double lon0, double lat, double lon,[System::Runtime::InteropServices::Out] double% x,[System::Runtime::InteropServices::Out] double% y,[System::Runtime::InteropServices::Out] double% gamma,[System::Runtime::InteropServices::Out] double% k) |
void | Reverse (double lon0, double x, double y,[System::Runtime::InteropServices::Out] double% lat,[System::Runtime::InteropServices::Out] double% lon,[System::Runtime::InteropServices::Out] double% gamma,[System::Runtime::InteropServices::Out] double% k) |
void | Forward (double lon0, double lat, double lon,[System::Runtime::InteropServices::Out] double% x,[System::Runtime::InteropServices::Out] double% y) |
void | Reverse (double lon0, double x, double y,[System::Runtime::InteropServices::Out] double% lat,[System::Runtime::InteropServices::Out] double% lon) |
Properties | |
Inspector functions | |
double | MajorRadius [get] |
double | Flattening [get] |
double | OriginLatitude [get] |
double | CentralScale [get] |
.NET Wrapper for GeographicLib::AlbersEqualArea.
This class allows .NET applications to access GeographicLib::AlbersEqualArea
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.
C# Example:
using System; using NETGeographicLib; namespace example_AlbersEqualArea { class Program { static void Main(string[] args) { try { const double lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels k1 = 1, // scale lon0 = -77 - 45/60.0; // Central meridan // Set up basic projection AlbersEqualArea albers = new AlbersEqualArea( Constants.WGS84.MajorRadius, Constants.WGS84.Flattening, lat1, lat2, k1); { // Sample conversion from geodetic to Albers Equal Area double lat = 39.95, lon = -75.17; // Philadelphia double x, y; albers.Forward(lon0, lat, lon, out x, out y); Console.WriteLine( String.Format("X: {0} Y: {1}", x, y ) ); } { // Sample conversion from Albers Equal Area grid to geodetic double x = 220e3, y = -53e3; double lat, lon; albers.Reverse(lon0, x, y, out lat, out lon); Console.WriteLine( String.Format("Latitude: {0} Longitude: {1}", lat, lon ) ); } } catch (GeographicErr e) { Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) ); } } } }
Managed C++ Example:
using namespace System; using namespace NETGeographicLib; int main(array<System::String ^> ^/*args*/) { try { const double lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels k1 = 1, // scale lon0 = -77 - 45/60.0; // Central meridan // Set up basic projection AlbersEqualArea^ albers = gcnew AlbersEqualArea( Constants::WGS84::MajorRadius, Constants::WGS84::Flattening, lat1, lat2, k1); { // Sample conversion from geodetic to Albers Equal Area double lat = 39.95, lon = -75.17; // Philadelphia double x, y; albers->Forward(lon0, lat, lon, x, y); Console::WriteLine( String::Format("X: {0} Y: {1}", x, y ) ); } { // Sample conversion from Albers Equal Area grid to geodetic double x = 220e3, y = -53e3; double lat, lon; albers->Reverse(lon0, x, y, lat, lon); Console::WriteLine( String::Format("Latitude: {0} Longitude: {1}", lat, lon ) ); } } catch (GeographicErr^ e) { Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) ); return -1; } return 0; }
Visual Basic Example:
Imports NETGeographicLib Module example_AlbersEqualArea Sub Main() Try Dim lat1 As Double = 40 + 58 / 60.0 : Dim lat2 As Double = 39 + 56 / 60.0 ' standard parallels Dim k1 As Double = 1 ' scale Dim lon0 As Double = -77 - 45 / 60.0 ' Central meridan ' Set up basic projection Dim albers As AlbersEqualArea = New AlbersEqualArea(Constants.WGS84.MajorRadius, Constants.WGS84.Flattening, lat1, lat2, k1) ' Sample conversion from geodetic to Albers Equal Area Dim lat As Double = 39.95 : Dim lon As Double = -75.17 ' Philadelphia Dim x, y As Double albers.Forward(lon0, lat, lon, x, y) Console.WriteLine(String.Format("X: {0} Y: {1}", x, y)) ' Sample conversion from Albers Equal Area grid to geodetic x = 220000.0 : y = -53000.0 albers.Reverse(lon0, x, y, lat, lon) Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon)) Catch ex As GeographicErr Console.WriteLine(String.Format("Caught exception: {0}", ex.Message)) End Try End Sub End Module
INTERFACE DIFFERENCES:
A constructor has been provided that creates the standard projections.
The MajorRadius, Flattening, OriginLatitude, and CentralScale functions are implemented as properties.
Definition at line 67 of file AlbersEqualArea.h.
Standard AlbersEqualAreaProjections that assume the WGS84 ellipsoid.
Definition at line 79 of file AlbersEqualArea.h.
NETGeographicLib::AlbersEqualArea::~AlbersEqualArea | ( | ) | [inline] |
NETGeographicLib::AlbersEqualArea::AlbersEqualArea | ( | StandardTypes | type | ) |
! Constructor for one of the standard types.
[in] | type | The desired standard type. |
Referenced by ~AlbersEqualArea().
NETGeographicLib::AlbersEqualArea::AlbersEqualArea | ( | double | a, | |
double | f, | |||
double | stdlat, | |||
double | k0 | |||
) |
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. If f > 1, set flattening to 1/f. |
[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]. |
NETGeographicLib::AlbersEqualArea::AlbersEqualArea | ( | double | a, | |
double | f, | |||
double | stdlat1, | |||
double | stdlat2, | |||
double | 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. If f > 1, set flattening to 1/f. |
[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. |
NETGeographicLib::AlbersEqualArea::AlbersEqualArea | ( | double | a, | |
double | f, | |||
double | sinlat1, | |||
double | coslat1, | |||
double | sinlat2, | |||
double | coslat2, | |||
double | 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. If f > 1, set flattening to 1/f. |
[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 1014d;.
void NETGeographicLib::AlbersEqualArea::SetScale | ( | double | lat, | |
double | k | |||
) |
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.
void NETGeographicLib::AlbersEqualArea::Forward | ( | double | lon0, | |
double | lat, | |||
double | lon, | |||
[System::Runtime::InteropServices::Out] double% | x, | |||
[System::Runtime::InteropServices::Out] double% | y, | |||
[System::Runtime::InteropServices::Out] double% | gamma, | |||
[System::Runtime::InteropServices::Out] double% | k | |||
) |
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]; lon and lon0 should be in the range [540, 540). 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.
void NETGeographicLib::AlbersEqualArea::Reverse | ( | double | lon0, | |
double | x, | |||
double | y, | |||
[System::Runtime::InteropServices::Out] double% | lat, | |||
[System::Runtime::InteropServices::Out] double% | lon, | |||
[System::Runtime::InteropServices::Out] double% | gamma, | |||
[System::Runtime::InteropServices::Out] double% | k | |||
) |
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. lon0 should be in the range [540, 540). 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.
void NETGeographicLib::AlbersEqualArea::Forward | ( | double | lon0, | |
double | lat, | |||
double | lon, | |||
[System::Runtime::InteropServices::Out] double% | x, | |||
[System::Runtime::InteropServices::Out] double% | y | |||
) |
AlbersEqualArea::Forward without returning the convergence and scale.
void NETGeographicLib::AlbersEqualArea::Reverse | ( | double | lon0, | |
double | x, | |||
double | y, | |||
[System::Runtime::InteropServices::Out] double% | lat, | |||
[System::Runtime::InteropServices::Out] double% | lon | |||
) |
AlbersEqualArea::Reverse without returning the convergence and scale.
double NETGeographicLib::AlbersEqualArea::MajorRadius [get] |
Definition at line 245 of file AlbersEqualArea.h.
double NETGeographicLib::AlbersEqualArea::Flattening [get] |
Definition at line 251 of file AlbersEqualArea.h.
double NETGeographicLib::AlbersEqualArea::OriginLatitude [get] |
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 260 of file AlbersEqualArea.h.
double NETGeographicLib::AlbersEqualArea::CentralScale [get] |
Definition at line 266 of file AlbersEqualArea.h.