Calculate the area of ​​a polygon with latitude and longitude

I have this code written using this: source1 and this: source 2

public static double CalculatePolygonArea(IList<GpsLocation> coordinates) { double area = 0; if (coordinates.Count > 2) { for (var i = 0; i < coordinates.Count-1; i++) { GpsLocation p1, p2; p1 = coordinates[i]; p2 = coordinates[i + 1]; area += ToRad(p2.Longitude - p1.Longitude) * (2 + Math.Sin(ToRad(p1.Latitude)) + Math.Sin(ToRad(p2.Latitude))); area = area * R * R / 2; } } return Math.Abs(area); } 

Here is my test code:

 [Fact] public void GpsPolygonAreaTest() { var poly = new List<GpsLocation>(); var p1 = new GpsLocation(0, 0); poly.Add(p1); var p2 = GpsHelper.CreateLocationBasedOnBearingDistance(p1, 5, 100); poly.Add(p2); var p3 = GpsHelper.CreateLocationBasedOnBearingDistance(p2, 95, 100); poly.Add(p3); var p4 = GpsHelper.CreateLocationBasedOnBearingDistance(p3, 185, 100); poly.Add(p4); poly.Add(p1); var area = GpsHelper.CalculatePolygonArea(poly); area.Should().Be(10000); } 

I confirmed that my polygon is 100 mx 100 m, see image: polygon

My test result: The expected value should be 10000, but found 1.28153883377486E + 48.

Any ideas what is wrong with my code?

+1
source share
1 answer

I am sure this statement is:

 area = area * R * R / 2; 

should be placed after the loop over the vertices, and not repeated at each iteration.

+1
source

Source: https://habr.com/ru/post/1346433/


All Articles