private double GetArea(List <Coordinate> tempPolygon) { double area = Math.Abs(CgAlgorithms.SignedArea(tempPolygon)); if (_previousParts == null || _previousParts.Count == 0) { _firstPartIsCounterClockwise = CgAlgorithms.IsCounterClockwise(tempPolygon); } else { if (CgAlgorithms.IsCounterClockwise(tempPolygon) != _firstPartIsCounterClockwise) { area = -area; } } if (Map.Projection != null) { if (Map.Projection.IsLatLon) { // this code really assumes the location is near the equator const double RadiusOfEarth = 111319.5; area *= RadiusOfEarth * RadiusOfEarth; } else { area *= Map.Projection.Unit.Meters * Map.Projection.Unit.Meters; } } return(area); }