NETGeographicLib::PolygonArea Class Reference

.NET wrapper for GeographicLib::PolygonArea and PolygonAreaExact. More...

#include <NETGeographicLib/PolygonArea.h>

List of all members.

Public Member Functions

 PolygonArea (Geodesic^ earth, bool polyline)
 PolygonArea (const bool polyline)
 ~PolygonArea ()
void Clear ()
void AddPoint (double lat, double lon)
void AddEdge (double azi, double s)
unsigned Compute (bool reverse, bool sign,[System::Runtime::InteropServices::Out] double% perimeter,[System::Runtime::InteropServices::Out] double% area)
unsigned TestPoint (double lat, double lon, bool reverse, bool sign,[System::Runtime::InteropServices::Out] double% perimeter,[System::Runtime::InteropServices::Out] double% area)
unsigned TestEdge (double azi, double s, bool reverse, bool sign,[System::Runtime::InteropServices::Out] double% perimeter,[System::Runtime::InteropServices::Out] double% area)

Inspector functions



double MajorRadius [get]
double Flattening [get]
void CurrentPoint ([System::Runtime::InteropServices::Out] double% lat,[System::Runtime::InteropServices::Out] double% lon)

Detailed Description

.NET wrapper for GeographicLib::PolygonArea and PolygonAreaExact.

This class allows .NET applications to access GeographicLib::PolygonArea.

This computes the area of a geodesic polygon using the method given Section 6 of

This class lets you add vertices one at a time to the polygon. The area and perimeter are accumulated in two times the standard floating point precision to guard against the loss of accuracy with many-sided polygons. At any point you can ask for the perimeter and area so far. There's an option to treat the points as defining a polyline instead of a polygon; in that case, only the perimeter is computed.

C# Example:

using System;
using NETGeographicLib;

namespace example_PolygonArea
{
    class Program
    {
        static void Main(string[] args)
        {
            try {
                Geodesic geod = new Geodesic();  // WGS84
                PolygonArea poly = new PolygonArea(geod, true);
                poly.AddPoint( 52,  0);     // London
                poly.AddPoint( 41,-74);     // New York
                poly.AddPoint(-23,-43);     // Rio de Janeiro
                poly.AddPoint(-26, 28);     // Johannesburg
                double perimeter, area;
                uint n = poly.Compute(false, true, out perimeter, out area);
                Console.WriteLine(String.Format("{0} {1} {2}", n, perimeter, area));
            }
            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 {
        Geodesic^ geod = gcnew Geodesic();  // WGS84
        PolygonArea^ poly = gcnew PolygonArea(geod, true);
        poly->AddPoint( 52,  0);     // London
        poly->AddPoint( 41,-74);     // New York
        poly->AddPoint(-23,-43);     // Rio de Janeiro
        poly->AddPoint(-26, 28);     // Johannesburg
        double perimeter, area;
        unsigned int n = poly->Compute(false, true, perimeter, area);
        Console::WriteLine(String::Format("{0} {1} {2}", n, perimeter, area));
    }
    catch (GeographicErr^ e) {
        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
        return -1;
    }
    return 0;
}

Visual Basic Example:

Imports NETGeographicLib

Module example_PolygonArea
    Sub Main()
        Try
            Dim geod As Geodesic = New Geodesic()  ' WGS84
            Dim poly As PolygonArea = New PolygonArea(geod, True)
            poly.AddPoint(52, 0)     ' London
            poly.AddPoint(41, -74)   ' New York
            poly.AddPoint(-23, -43)  ' Rio de Janeiro
            poly.AddPoint(-26, 28)   ' Johannesburg
            Dim perimeter, area As Double
            Dim n As UInteger = poly.Compute(False, True, perimeter, area)
            Console.WriteLine(String.Format("{0} {1} {2}", n, perimeter, area))
        Catch ex As GeographicErr
            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
        End Try
    End Sub
End Module

INTERFACE DIFFERENCES:
The MajorRadius and Flattening functions are implemented as properties.

Definition at line 49 of file PolygonArea.h.


Constructor & Destructor Documentation

NETGeographicLib::PolygonArea::PolygonArea ( Geodesic^   earth,
bool  polyline 
)

Constructor for PolygonArea.

Parameters:
[in] earth the Geodesic object to use for geodesic calculations.
[in] polyline if true that treat the points as defining a polyline instead of a polygon.

Referenced by ~PolygonArea().

NETGeographicLib::PolygonArea::PolygonArea ( const bool  polyline  ) 

Constructor for PolygonArea that assumes a WGS84 ellipsoid.

Parameters:
[in] polyline if true that treat the points as defining a polyline instead of a polygon.
NETGeographicLib::PolygonArea::~PolygonArea (  )  [inline]

The destructor calls the finalizer.

Definition at line 79 of file PolygonArea.h.

References PolygonArea().


Member Function Documentation

void NETGeographicLib::PolygonArea::Clear (  ) 

Clear PolygonArea, allowing a new polygon to be started.

void NETGeographicLib::PolygonArea::AddPoint ( double  lat,
double  lon 
)

Add a point to the polygon or polyline.

Parameters:
[in] lat the latitude of the point (degrees).
[in] lon the longitude of the point (degrees).

lat should be in the range [90, 90] and lon should be in the range [540, 540).

void NETGeographicLib::PolygonArea::AddEdge ( double  azi,
double  s 
)

Add an edge to the polygon or polyline.

Parameters:
[in] azi azimuth at current point (degrees).
[in] s distance from current point to next point (meters).

azi should be in the range [540, 540). This does nothing if no points have been added yet. Use PolygonArea::CurrentPoint to determine the position of the new vertex.

unsigned NETGeographicLib::PolygonArea::Compute ( bool  reverse,
bool  sign,
[System::Runtime::InteropServices::Out] double%   perimeter,
[System::Runtime::InteropServices::Out] double%   area 
)

Return the results so far.

Parameters:
[in] reverse if true then clockwise (instead of counter-clockwise) traversal counts as a positive area.
[in] sign if true then return a signed result for the area if the polygon is traversed in the "wrong" direction instead of returning the area for the rest of the earth.
[out] perimeter the perimeter of the polygon or length of the polyline (meters).
[out] area the area of the polygon (meters2); only set if polyline is false in the constructor.
Returns:
the number of points.
unsigned NETGeographicLib::PolygonArea::TestPoint ( double  lat,
double  lon,
bool  reverse,
bool  sign,
[System::Runtime::InteropServices::Out] double%   perimeter,
[System::Runtime::InteropServices::Out] double%   area 
)

Return the results assuming a tentative final test point is added; however, the data for the test point is not saved. This lets you report a running result for the perimeter and area as the user moves the mouse cursor. Ordinary floating point arithmetic is used to accumulate the data for the test point; thus the area and perimeter returned are less accurate than if PolygonArea::AddPoint and PolygonArea::Compute are used.

Parameters:
[in] lat the latitude of the test point (degrees).
[in] lon the longitude of the test point (degrees).
[in] reverse if true then clockwise (instead of counter-clockwise) traversal counts as a positive area.
[in] sign if true then return a signed result for the area if the polygon is traversed in the "wrong" direction instead of returning the area for the rest of the earth.
[out] perimeter the approximate perimeter of the polygon or length of the polyline (meters).
[out] area the approximate area of the polygon (meters2); only set if polyline is false in the constructor.
Returns:
the number of points.

lat should be in the range [90, 90] and lon should be in the range [540, 540).

unsigned NETGeographicLib::PolygonArea::TestEdge ( double  azi,
double  s,
bool  reverse,
bool  sign,
[System::Runtime::InteropServices::Out] double%   perimeter,
[System::Runtime::InteropServices::Out] double%   area 
)

Return the results assuming a tentative final test point is added via an azimuth and distance; however, the data for the test point is not saved. This lets you report a running result for the perimeter and area as the user moves the mouse cursor. Ordinary floating point arithmetic is used to accumulate the data for the test point; thus the area and perimeter returned are less accurate than if PolygonArea::AddEdge and PolygonArea::Compute are used.

Parameters:
[in] azi azimuth at current point (degrees).
[in] s distance from current point to final test point (meters).
[in] reverse if true then clockwise (instead of counter-clockwise) traversal counts as a positive area.
[in] sign if true then return a signed result for the area if the polygon is traversed in the "wrong" direction instead of returning the area for the rest of the earth.
[out] perimeter the approximate perimeter of the polygon or length of the polyline (meters).
[out] area the approximate area of the polygon (meters2); only set if polyline is false in the constructor.
Returns:
the number of points.

azi should be in the range [540, 540).

void NETGeographicLib::PolygonArea::CurrentPoint ( [System::Runtime::InteropServices::Out] double%   lat,
[System::Runtime::InteropServices::Out] double%   lon 
)

Report the previous vertex added to the polygon or polyline.

Parameters:
[out] lat the latitude of the point (degrees).
[out] lon the longitude of the point (degrees).

If no points have been added, then NaNs are returned. Otherwise, lon will be in the range [180, 180).


Property Documentation

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

Definition at line 194 of file PolygonArea.h.

double NETGeographicLib::PolygonArea::Flattening [get]
Returns:
f the flattening of the ellipsoid. This is the value inherited from the Geodesic object used in the constructor.

Definition at line 200 of file PolygonArea.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