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: 
My test result: The expected value should be 10000, but found 1.28153883377486E + 48.
Any ideas what is wrong with my code?
source share