If you’re using GMap.NET to add maps to your .NET application, then the time may come when you want to calculate the area of a polygon on your map. In my case, I have an application that allows users to actually create polygons using a GMap.NET control, by placing and connecting markers to shape their […]

This article was posted by Independent Software, a website and database application development company based in Maputo, Mozambique. Our website offers regular write-ups on technical and design issues, ranging from details at code level to 3D Studio Max rendering. Read more about Independent Software's philosophy, or get in touch with Independent Software.

If you’re using GMap.NET to add maps to your .NET application, then the time may come when you want to calculate the area of a polygon on your map. In my case, I have an application that allows users to actually create polygons using a GMap.NET control, by placing and connecting markers to shape their polygon. Since the map system is used to indicate the limits of an area occupied by a rural community, it’s necessary to calculate how many hectares the delimited area occupies.

Google Maps actually provides a function in its API to calculate polygon areas:

1 |
google.maps.geometry.spherical.computeArea(yourPolygon.getPath()); |

Even so, unfortunately GMap.NET does not offer access to this API. Moreover, your GMap.NET control may be configured to work with a different map provider from Google Maps, like Bing. Consequently, you’ll have to implement your own polygon area calculation algorithms. Luckily, this is not all that complicated, and algorithms are available on the net.

Here’s my approach.

- Assuming that you have a list of
*PointLatLng*values that form the polygon… - For each
*PointLatLng*value, create a new value with the latitude and longitude values converted to meters. - Calculate the area of the polygon using this algorithm.

In code:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
IList<PointLatLng> coords = // List of polygon coordinates // Add all coordinates to a list, converting them to meters: IList<PointLatLng> points = new List<PointLatLng>(); foreach (PointLatLng coord in coords) { PointLatLng p = new PointLatLng( coord.Longitude * (System.Math.PI * 6378137 / 180), coord.Latitude * (System.Math.PI * 6378137 / 180) ); points.Add(p); } // Add point 0 to the end again: points.Add(points[0]); // Calculate polygon area (in square meters): var area = System.Math.Abs(points.Take(points.Count - 1) .Select((p, i) => (points[i + 1].Lat - p.Lat) * (points[i + 1].Lng + p.Lng)) .Sum() / 2); |

Did this article help you out? Please help us find more time to write useful guides & articles like this by *donating a buck* or two. It'll keep us coffee-fueled. Thanks!

hello

I’d like without GMap.Net information balloons can be put, if the clip in the polygon to show me the area of the polygon

I don’t know why its giving me double value of area.

So suppose I built a square having 25Metre length as one side, then it gives me area of 1300~ Sq. Metre. It should be 625 sq. Metre

this algorithm is shit… unless you are measuring a polygon on a 2D surface.

use this one instead, which is very accurate !

http://stackoverflow.com/questions/1340223/calculating-area-enclosed-by-arbitrary-polygon-on-earths-surface

private double area(ArrayList lats,ArrayList lons)

{

double sum=0;

double prevcolat=0;

double prevaz=0;

double colat0=0;

double az0=0;

for (int i=0;i=90)

{

az=0;

}

else if (lats.get(i)0 && i<lats.size())

{

sum=sum+(1-Math.cos(prevcolat + (colat-prevcolat)/2))*Math.PI*((Math.abs(az-prevaz)/Math.PI)-2*Math.ceil(((Math.abs(az-prevaz)/Math.PI)-1)/2))* Math.signum(az-prevaz);

}

prevcolat=colat;

prevaz=az;

}

sum=sum+(1-Math.cos(prevcolat + (colat0-prevcolat)/2))*(az0-prevaz);

return 5.10072E14* Math.min(Math.abs(sum)/4/Math.PI,1-Math.abs(sum)/4/Math.PI);

}

Hm, it said area of my university is near 1837162381123 square meters…