NETGeographicLib::GeodesicExact Class Reference

.NET wrapper for GeographicLib::GeodesicExact. More...

#include <NETGeographicLib/GeodesicExact.h>

List of all members.

Public Member Functions

 ~GeodesicExact ()
System::IntPtr^ GetUnmanaged ()
Constructor



 GeodesicExact ()
 GeodesicExact (double a, double f)
Direct geodesic problem specified in terms of distance.



double Direct (double lat1, double lon1, double azi1, double s12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21,[System::Runtime::InteropServices::Out] double% S12)
double Direct (double lat1, double lon1, double azi1, double s12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2)
double Direct (double lat1, double lon1, double azi1, double s12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2)
double Direct (double lat1, double lon1, double azi1, double s12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% m12)
double Direct (double lat1, double lon1, double azi1, double s12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21)
double Direct (double lat1, double lon1, double azi1, double s12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21)
Direct geodesic problem specified in terms of arc length.



void ArcDirect (double lat1, double lon1, double azi1, double a12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21,[System::Runtime::InteropServices::Out] double% S12)
void ArcDirect (double lat1, double lon1, double azi1, double a12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2)
void ArcDirect (double lat1, double lon1, double azi1, double a12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2)
void ArcDirect (double lat1, double lon1, double azi1, double a12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% s12)
void ArcDirect (double lat1, double lon1, double azi1, double a12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% m12)
void ArcDirect (double lat1, double lon1, double azi1, double a12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21)
void ArcDirect (double lat1, double lon1, double azi1, double a12,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21)
General version of the direct geodesic solution.



double GenDirect (double lat1, double lon1, double azi1, bool arcmode, double s12_a12, NETGeographicLib::Mask outmask,[System::Runtime::InteropServices::Out] double% lat2,[System::Runtime::InteropServices::Out] double% lon2,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21,[System::Runtime::InteropServices::Out] double% S12)
Inverse geodesic problem.



double Inverse (double lat1, double lon1, double lat2, double lon2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% azi1,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21,[System::Runtime::InteropServices::Out] double% S12)
double Inverse (double lat1, double lon1, double lat2, double lon2,[System::Runtime::InteropServices::Out] double% s12)
double Inverse (double lat1, double lon1, double lat2, double lon2,[System::Runtime::InteropServices::Out] double% azi1,[System::Runtime::InteropServices::Out] double% azi2)
double Inverse (double lat1, double lon1, double lat2, double lon2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% azi1,[System::Runtime::InteropServices::Out] double% azi2)
double Inverse (double lat1, double lon1, double lat2, double lon2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% azi1,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% m12)
double Inverse (double lat1, double lon1, double lat2, double lon2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% azi1,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21)
double Inverse (double lat1, double lon1, double lat2, double lon2,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% azi1,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21)
General version of inverse geodesic solution.



double GenInverse (double lat1, double lon1, double lat2, double lon2, NETGeographicLib::Mask outmask,[System::Runtime::InteropServices::Out] double% s12,[System::Runtime::InteropServices::Out] double% azi1,[System::Runtime::InteropServices::Out] double% azi2,[System::Runtime::InteropServices::Out] double% m12,[System::Runtime::InteropServices::Out] double% M12,[System::Runtime::InteropServices::Out] double% M21,[System::Runtime::InteropServices::Out] double% S12)
Interface to GeodesicLineExact.



GeodesicLineExactLine (double lat1, double lon1, double azi1, NETGeographicLib::Mask caps)

Properties

Inspector functions.



double MajorRadius [get]
double Flattening [get]
double EllipsoidArea [get]

Detailed Description

.NET wrapper for GeographicLib::GeodesicExact.

This class allows .NET applications to access GeographicLib::GeodesicExact. .NET wrapper for GeographicLib::GeodesicExact. This class allows .NET applications to access GeographicLib::GeodesicExact.

The equations for geodesics on an ellipsoid can be expressed in terms of incomplete elliptic integrals. The Geodesic class expands these integrals in a series in the flattening f and this provides an accurate solution for f &isin [-0.01, 0.01]. The GeodesicExact class computes the ellitpic integrals directly and so provides a solution which is valid for all f. However, in practice, its use should be limited to about b/a [0.01, 100] or f [-99, 0.99].

For the WGS84 ellipsoid, these classes are 2--3 times slower than the series solution and 2--3 times less accurate (because it's less easy to control round-off errors with the elliptic integral formulation); i.e., the error is about 40 nm (40 nanometers) instead of 15 nm. However the error in the series solution scales as f7 while the error in the elliptic integral solution depends weakly on f. If the quarter meridian distance is 10000 km and the ratio b/a = 1 f is varied then the approximate maximum error (expressed as a distance) is

       1 - f  error (nm)
       1/128     387
       1/64      345
       1/32      269
       1/16      210
       1/8       115
       1/4        69
       1/2        36
         1        15
         2        25
         4        96
         8       318
        16       985
        32      2352
        64      6008
       128     19024
 

The computation of the area in these classes is via a 30th order series. This gives accurate results for b/a [1/2, 2]; the accuracy is about 8 decimal digits for b/a [1/4, 4].

See geodellip for the formulation. See the documentation on the Geodesic class for additional information on the geodesics problems.

C# Example:

using System;
using NETGeographicLib;

namespace example_GeodesicExact
{
    class Program
    {
        static void Main(string[] args)
        {
            try {
                GeodesicExact geod = new GeodesicExact( Constants.WGS84.MajorRadius,
                                                        Constants.WGS84.Flattening );
                // Alternatively: GeodesicExact geod = new GeodesicExact();
                {
                    // Sample direct calculation, travelling about NE from JFK
                    double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
                    double lat2, lon2;
                    geod.Direct(lat1, lon1, azi1, s12, out lat2, out lon2);
                    Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat2, lon2));
                }
                {
                    // Sample inverse calculation, JFK to LHR
                    double
                    lat1 = 40.6, lon1 = -73.8, // JFK Airport
                    lat2 = 51.6, lon2 = -0.5;  // LHR Airport
                    double s12;
                    geod.Inverse(lat1, lon1, lat2, lon2, out s12);
                    Console.WriteLine(s12);
                }
            }
            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 {
        GeodesicExact^ geod = gcnew GeodesicExact( Constants::WGS84::MajorRadius,
                                                   Constants::WGS84::Flattening );
        // Alternatively: GeodesicExact^ geod = gcnew GeodesicExact();
        {
            // Sample direct calculation, travelling about NE from JFK
            double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
            double lat2, lon2;
            geod->Direct(lat1, lon1, azi1, s12, lat2, lon2);
            Console::WriteLine(String::Format("Latitude: {0} Longitude: {1}", lat2, lon2));
        }
        {
            // Sample inverse calculation, JFK to LHR
            double
            lat1 = 40.6, lon1 = -73.8, // JFK Airport
            lat2 = 51.6, lon2 = -0.5;  // LHR Airport
            double s12;
            geod->Inverse(lat1, lon1, lat2, lon2, s12);
            Console::WriteLine(s12);
        }
    }
    catch (GeographicErr^ e) {
        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
        return -1;
    }
    return 0;
}

Visual Basic Example:

Imports NETGeographicLib

Module example_GeodesicExact
    Sub Main()
        Try
            Dim geod As GeodesicExact = New GeodesicExact(Constants.WGS84.MajorRadius,
                                                          Constants.WGS84.Flattening)
            ' Alternatively: Dim geod As GeodesicExact = new GeodesicExact()
            ' Sample direct calculation, travelling about NE from JFK
            Dim lat1 As Double = 40.6, lon1 = -73.8, s12 = 5500000.0, azi1 = 51
            Dim lat2, lon2 As Double
            geod.Direct(lat1, lon1, azi1, s12, lat2, lon2)
            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat2, lon2))
            ' Sample inverse calculation, JFK to LHR
            lat1 = 40.6 : lon1 = -73.8 ' JFK Airport
            lat2 = 51.6 : lon2 = -0.5  ' LHR Airport
            geod.Inverse(lat1, lon1, lat2, lon2, s12)
            Console.WriteLine(s12)
        Catch ex As GeographicErr
            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
        End Try
    End Sub
End Module

INTERFACE DIFFERENCES:
A default constructor is provided that assumes WGS84 parameters.

The MajorRadius, Flattening, and EllipsoidArea functions are implemented as properties.

The GenDirect, GenInverse, and Line functions accept the "capabilities mask" as a NETGeographicLib::Mask rather than an unsigned.

Definition at line 86 of file GeodesicExact.h.


Constructor & Destructor Documentation

NETGeographicLib::GeodesicExact::GeodesicExact (  ) 

Constructor for a WGS84 ellipsoid

Referenced by ~GeodesicExact().

NETGeographicLib::GeodesicExact::GeodesicExact ( double  a,
double  f 
)

Constructor for a ellipsoid with

Parameters:
[in] a equatorial radius (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.
Exceptions:
GeographicErr if a or (1 f ) a is not positive.
NETGeographicLib::GeodesicExact::~GeodesicExact (  )  [inline]

The desstructor calls the finalizer.

Definition at line 119 of file GeodesicExact.h.

References GeodesicExact().


Member Function Documentation

double NETGeographicLib::GeodesicExact::Direct ( double  lat1,
double  lon1,
double  azi1,
double  s12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21,
[System::Runtime::InteropServices::Out] double%   S12 
)

Perform the direct geodesic calculation where the length of the geodesic is specified in terms of distance.

Parameters:
[in] lat1 latitude of point 1 (degrees).
[in] lon1 longitude of point 1 (degrees).
[in] azi1 azimuth at point 1 (degrees).
[in] s12 distance between point 1 and point 2 (meters); it can be signed.
[out] lat2 latitude of point 2 (degrees).
[out] lon2 longitude of point 2 (degrees).
[out] azi2 (forward) azimuth at point 2 (degrees).
[out] m12 reduced length of geodesic (meters).
[out] M12 geodesic scale of point 2 relative to point 1 (dimensionless).
[out] M21 geodesic scale of point 1 relative to point 2 (dimensionless).
[out] S12 area under the geodesic (meters2).
Returns:
a12 arc length of between point 1 and point 2 (degrees).

lat1 should be in the range [90, 90]; lon1 and azi1 should be in the range [540, 540). The values of lon2 and azi2 returned are in the range [180, 180).

If either point is at a pole, the azimuth is defined by keeping the longitude fixed, writing lat = (90 ), and taking the limit 0+. An arc length greater that 180 signifies a geodesic which is not a shortest path. (For a prolate ellipsoid, an additional condition is necessary for a shortest path: the longitudinal extent must not exceed of 180.)

The following functions are overloaded versions of GeodesicExact::Direct which omit some of the output parameters. Note, however, that the arc length is always computed and returned as the function value.

double NETGeographicLib::GeodesicExact::Direct ( double  lat1,
double  lon1,
double  azi1,
double  s12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2 
)

See the documentation for GeodesicExact::Direct.

double NETGeographicLib::GeodesicExact::Direct ( double  lat1,
double  lon1,
double  azi1,
double  s12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2 
)

See the documentation for GeodesicExact::Direct.

double NETGeographicLib::GeodesicExact::Direct ( double  lat1,
double  lon1,
double  azi1,
double  s12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   m12 
)

See the documentation for GeodesicExact::Direct.

double NETGeographicLib::GeodesicExact::Direct ( double  lat1,
double  lon1,
double  azi1,
double  s12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21 
)

See the documentation for GeodesicExact::Direct.

double NETGeographicLib::GeodesicExact::Direct ( double  lat1,
double  lon1,
double  azi1,
double  s12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21 
)

See the documentation for GeodesicExact::Direct.

void NETGeographicLib::GeodesicExact::ArcDirect ( double  lat1,
double  lon1,
double  azi1,
double  a12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21,
[System::Runtime::InteropServices::Out] double%   S12 
)

Perform the direct geodesic calculation where the length of the geodesic is specified in terms of arc length.

Parameters:
[in] lat1 latitude of point 1 (degrees).
[in] lon1 longitude of point 1 (degrees).
[in] azi1 azimuth at point 1 (degrees).
[in] a12 arc length between point 1 and point 2 (degrees); it can be signed.
[out] lat2 latitude of point 2 (degrees).
[out] lon2 longitude of point 2 (degrees).
[out] azi2 (forward) azimuth at point 2 (degrees).
[out] s12 distance between point 1 and point 2 (meters).
[out] m12 reduced length of geodesic (meters).
[out] M12 geodesic scale of point 2 relative to point 1 (dimensionless).
[out] M21 geodesic scale of point 1 relative to point 2 (dimensionless).
[out] S12 area under the geodesic (meters2).

lat1 should be in the range [90, 90]; lon1 and azi1 should be in the range [540, 540). The values of lon2 and azi2 returned are in the range [180, 180).

If either point is at a pole, the azimuth is defined by keeping the longitude fixed, writing lat = (90 ), and taking the limit 0+. An arc length greater that 180 signifies a geodesic which is not a shortest path. (For a prolate ellipsoid, an additional condition is necessary for a shortest path: the longitudinal extent must not exceed of 180.)

The following functions are overloaded versions of GeodesicExact::Direct which omit some of the output parameters.

void NETGeographicLib::GeodesicExact::ArcDirect ( double  lat1,
double  lon1,
double  azi1,
double  a12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2 
)

See the documentation for GeodesicExact::ArcDirect.

void NETGeographicLib::GeodesicExact::ArcDirect ( double  lat1,
double  lon1,
double  azi1,
double  a12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2 
)

See the documentation for GeodesicExact::ArcDirect.

void NETGeographicLib::GeodesicExact::ArcDirect ( double  lat1,
double  lon1,
double  azi1,
double  a12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   s12 
)

See the documentation for GeodesicExact::ArcDirect.

void NETGeographicLib::GeodesicExact::ArcDirect ( double  lat1,
double  lon1,
double  azi1,
double  a12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   m12 
)

See the documentation for GeodesicExact::ArcDirect.

void NETGeographicLib::GeodesicExact::ArcDirect ( double  lat1,
double  lon1,
double  azi1,
double  a12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21 
)

See the documentation for GeodesicExact::ArcDirect.

void NETGeographicLib::GeodesicExact::ArcDirect ( double  lat1,
double  lon1,
double  azi1,
double  a12,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21 
)

See the documentation for GeodesicExact::ArcDirect.

double NETGeographicLib::GeodesicExact::GenDirect ( double  lat1,
double  lon1,
double  azi1,
bool  arcmode,
double  s12_a12,
NETGeographicLib::Mask  outmask,
[System::Runtime::InteropServices::Out] double%   lat2,
[System::Runtime::InteropServices::Out] double%   lon2,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21,
[System::Runtime::InteropServices::Out] double%   S12 
)

The general direct geodesic calculation. GeodesicExact::Direct and GeodesicExact::ArcDirect are defined in terms of this function.

Parameters:
[in] lat1 latitude of point 1 (degrees).
[in] lon1 longitude of point 1 (degrees).
[in] azi1 azimuth at point 1 (degrees).
[in] arcmode boolean flag determining the meaning of the second parameter.
[in] s12_a12 if arcmode is false, this is the distance between point 1 and point 2 (meters); otherwise it is the arc length between point 1 and point 2 (degrees); it can be signed.
[in] outmask a bitor'ed combination of NETGeographicLib::Mask values specifying which of the following parameters should be set.
[out] lat2 latitude of point 2 (degrees).
[out] lon2 longitude of point 2 (degrees).
[out] azi2 (forward) azimuth at point 2 (degrees).
[out] s12 distance between point 1 and point 2 (meters).
[out] m12 reduced length of geodesic (meters).
[out] M12 geodesic scale of point 2 relative to point 1 (dimensionless).
[out] M21 geodesic scale of point 1 relative to point 2 (dimensionless).
[out] S12 area under the geodesic (meters2).
Returns:
a12 arc length of between point 1 and point 2 (degrees).

The NETGeographicLib::Mask values possible for outmask are

  • outmask |= NETGeographicLib::Mask::LATITUDE for the latitude lat2;
  • outmask |= NETGeographicLib::Mask::LONGITUDE for the latitude lon2;
  • outmask |= NETGeographicLib::Mask::AZIMUTH for the latitude azi2;
  • outmask |= NETGeographicLib::Mask::DISTANCE for the distance s12;
  • outmask |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length m12;
  • outmask |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales M12 and M21;
  • outmask |= NETGeographicLib::Mask::AREA for the area S12;
  • outmask |= NETGeographicLib::Mask::ALL for all of the above.

The function value a12 is always computed and returned and this equals s12_a12 is arcmode is true. If outmask includes GeodesicExact::DISTANCE and arcmode is false, then s12 = s12_a12. It is not necessary to include NETGeographicLib::Mask::DISTANCE_IN in outmask; this is automatically included is arcmode is false.

double NETGeographicLib::GeodesicExact::Inverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   azi1,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21,
[System::Runtime::InteropServices::Out] double%   S12 
)

Perform the inverse geodesic calculation.

Parameters:
[in] lat1 latitude of point 1 (degrees).
[in] lon1 longitude of point 1 (degrees).
[in] lat2 latitude of point 2 (degrees).
[in] lon2 longitude of point 2 (degrees).
[out] s12 distance between point 1 and point 2 (meters).
[out] azi1 azimuth at point 1 (degrees).
[out] azi2 (forward) azimuth at point 2 (degrees).
[out] m12 reduced length of geodesic (meters).
[out] M12 geodesic scale of point 2 relative to point 1 (dimensionless).
[out] M21 geodesic scale of point 1 relative to point 2 (dimensionless).
[out] S12 area under the geodesic (meters2).
Returns:
a12 arc length of between point 1 and point 2 (degrees).

lat1 and lat2 should be in the range [90, 90]; lon1 and lon2 should be in the range [540, 540). The values of azi1 and azi2 returned are in the range [180, 180).

If either point is at a pole, the azimuth is defined by keeping the longitude fixed, writing lat = (90 ), and taking the limit 0+.

The following functions are overloaded versions of GeodesicExact::Inverse which omit some of the output parameters. Note, however, that the arc length is always computed and returned as the function value.

double NETGeographicLib::GeodesicExact::Inverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
[System::Runtime::InteropServices::Out] double%   s12 
)

See the documentation for GeodesicExact::Inverse.

double NETGeographicLib::GeodesicExact::Inverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
[System::Runtime::InteropServices::Out] double%   azi1,
[System::Runtime::InteropServices::Out] double%   azi2 
)

See the documentation for GeodesicExact::Inverse.

double NETGeographicLib::GeodesicExact::Inverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   azi1,
[System::Runtime::InteropServices::Out] double%   azi2 
)

See the documentation for GeodesicExact::Inverse.

double NETGeographicLib::GeodesicExact::Inverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   azi1,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   m12 
)

See the documentation for GeodesicExact::Inverse.

double NETGeographicLib::GeodesicExact::Inverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   azi1,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21 
)

See the documentation for GeodesicExact::Inverse.

double NETGeographicLib::GeodesicExact::Inverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   azi1,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21 
)

See the documentation for GeodesicExact::Inverse.

double NETGeographicLib::GeodesicExact::GenInverse ( double  lat1,
double  lon1,
double  lat2,
double  lon2,
NETGeographicLib::Mask  outmask,
[System::Runtime::InteropServices::Out] double%   s12,
[System::Runtime::InteropServices::Out] double%   azi1,
[System::Runtime::InteropServices::Out] double%   azi2,
[System::Runtime::InteropServices::Out] double%   m12,
[System::Runtime::InteropServices::Out] double%   M12,
[System::Runtime::InteropServices::Out] double%   M21,
[System::Runtime::InteropServices::Out] double%   S12 
)

The general inverse geodesic calculation. GeodesicExact::Inverse is defined in terms of this function.

Parameters:
[in] lat1 latitude of point 1 (degrees).
[in] lon1 longitude of point 1 (degrees).
[in] lat2 latitude of point 2 (degrees).
[in] lon2 longitude of point 2 (degrees).
[in] outmask a bitor'ed combination of NETGeographicLib::Mask values specifying which of the following parameters should be set.
[out] s12 distance between point 1 and point 2 (meters).
[out] azi1 azimuth at point 1 (degrees).
[out] azi2 (forward) azimuth at point 2 (degrees).
[out] m12 reduced length of geodesic (meters).
[out] M12 geodesic scale of point 2 relative to point 1 (dimensionless).
[out] M21 geodesic scale of point 1 relative to point 2 (dimensionless).
[out] S12 area under the geodesic (meters2).
Returns:
a12 arc length of between point 1 and point 2 (degrees).

The NETGeographicLib::Mask values possible for outmask are

  • outmask |= NETGeographicLib::Mask::DISTANCE for the distance s12;
  • outmask |= NETGeographicLib::Mask::AZIMUTH for the latitude azi2;
  • outmask |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length m12;
  • outmask |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales M12 and M21;
  • outmask |= NETGeographicLib::Mask::AREA for the area S12;
  • outmask |= NETGeographicLib::Mask::ALL for all of the above.

The arc length is always computed and returned as the function value.

GeodesicLineExact ^ NETGeographicLib::GeodesicExact::Line ( double  lat1,
double  lon1,
double  azi1,
NETGeographicLib::Mask  caps 
)

Set up to compute several points on a single geodesic.

Parameters:
[in] lat1 latitude of point 1 (degrees).
[in] lon1 longitude of point 1 (degrees).
[in] azi1 azimuth at point 1 (degrees).
[in] caps bitor'ed combination of NETGeographicLib::Mask values specifying the capabilities the GeodesicLineExact object should possess, i.e., which quantities can be returned in calls to GeodesicLineExact::Position.
Returns:
a GeodesicLineExact object.

lat1 should be in the range [90, 90]; lon1 and azi1 should be in the range [540, 540).

The GeodesicExact::mask values are

  • caps |= NETGeographicLib::Mask::LATITUDE for the latitude lat2; this is added automatically;
  • caps |= NETGeographicLib::Mask::LONGITUDE for the latitude lon2;
  • caps |= NETGeographicLib::Mask::AZIMUTH for the azimuth azi2; this is added automatically;
  • caps |= NETGeographicLib::Mask::DISTANCE for the distance s12;
  • caps |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length m12;
  • caps |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales M12 and M21;
  • caps |= NETGeographicLib::Mask::AREA for the area S12;
  • caps |= NETGeographicLib::Mask::DISTANCE_IN permits the length of the geodesic to be given in terms of s12; without this capability the length can only be specified in terms of arc length;
  • caps |= GeodesicExact::ALL for all of the above.

The default value of caps is GeodesicExact::ALL which turns on all the capabilities.

If the point is at a pole, the azimuth is defined by keeping lon1 fixed, writing lat1 = (90 ), and taking the limit 0+.

System::IntPtr ^ NETGeographicLib::GeodesicExact::GetUnmanaged (  ) 
Returns:
A pointer to the unmanaged GeographicLib::GeodesicExact.

This function is for internal use only.


Property Documentation

double NETGeographicLib::GeodesicExact::MajorRadius [get]
Returns:
a the equatorial radius of the ellipsoid (meters). This is the value used in the constructor.

Definition at line 579 of file GeodesicExact.h.

double NETGeographicLib::GeodesicExact::Flattening [get]
Returns:
f the flattening of the ellipsoid. This is the value used in the constructor.

Definition at line 585 of file GeodesicExact.h.

double NETGeographicLib::GeodesicExact::EllipsoidArea [get]
Returns:
total area of ellipsoid in meters2. The area of a polygon encircling a pole can be found by adding GeodesicExact::EllipsoidArea()/2 to the sum of S12 for each side of the polygon.

Definition at line 593 of file GeodesicExact.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends

Generated on 6 Oct 2014 for NETGeographicLib by  doxygen 1.6.1