代码如下:
private static double CalculatePolygonArea(CoordinateCollection coordinates)
{
double area = 0;
if (coordinates.Count > 2)
{
var coordlist = coordinates.ToList();
for (var i = 0; i < coordlist.Count - 1; i++)
{
SharpKml.Base.Vector p1 = coordlist[i];
SharpKml.Base.Vector p2 = coordlist[i + 1];
area += ConvertToRadian(p2.Longitude - p1.Longitude) * (2 + Math.Sin(ConvertToRadian(p1.Latitude)) + Math.Sin(ConvertToRadian(p2.Latitude)));
}
area = area * 6378137.0 * 6378137.0 / 2.0;
}
return Math.Abs(area);
}
private static double ConvertToRadian(double input)
{
return input * Math.PI / 180;
}
来源:
Calculate the area of polygon according to the longitude and latitude.
assuming your source is WGS1984, if not then you'll need to adjust the ellipsoid used by the second line.
area = rad(x2 - x1) * (2 + sin(rad(y1)) + sin(rad(y2))) + rad(x3 - x2) * (2 + sin(rad(y2)) + sin(rad(y3))) + rad(x4 - x3) * (2 + sin(rad(y3)) + sin(rad(y4))) + rad(x5 - x4) * (2 + sin(rad(y4)) + sin(rad(y5)))
area = abs(area * 6378137.0 * 6378137.0 / 2.0)
rad() is a function that converts Degrees to Radians (i.e. Degrees * PI / 180).