MapSuite offers all the tools to get accurate measurements of area, distance. The issue for the developer is to understand how to use those tools according to what is desired.
I am going to take a very concrete example using a Polygon because that shape is a good example for later understanding the overall concept underneath the seemingly simple task of getting the area of an ellipse.
Let’s say that you have a polygon representing a field with GPS readings for its vertices. (I am using a polygon roughly in the same area as the circle used in this post). You need to plot the polygon on the map which is in decimal degrees. But you also have the need to get accurate measurements of the area of the polygon.
First, you create the Polygon with its vertices in decimal degrees.
PolygonShape polygonShape = new PolygonShape();
polygonShape.OuterRing.Vertices.Add(new Vertex(-90.0036, 45.0016));
polygonShape.OuterRing.Vertices.Add(new Vertex(-89.9966, 45.0011));
polygonShape.OuterRing.Vertices.Add(new Vertex(-89.9951, 44.9978));
polygonShape.OuterRing.Vertices.Add(new Vertex(-89.9990,44.9956));
polygonShape.OuterRing.Vertices.Add(new Vertex(-90.0040,44.9975));
polygonShape.OuterRing.Vertices.Add(new Vertex(-90.0036,45.0016));
When you display it on the Map in decimal degrees, it looks like that:

Now, you want to get the area of this polygon. Map Suite offers an API to get the area of a polygon GetArea. The first parameter is for passing the GeographyUnit. It can be in meters, feet or decimal degrees according to the unit your shape is in. (It turns out that only meters, feet and decimal degrees are used). If the unit is in meters or feet, the math used for calculating distances and areas is straightforward. It is the geometry used on a planar system.
On the other hand, if the unit is decimal degrees, we cannot use the planar geometry because basically decimal degrees are angles from the center of sphere. See picture below:

<object
classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui>
st1\:*{behavior:url(#ieooui) }
So, we have to use spherical geometry based on a sphere of an average radius for the earth. In the case of our polygon, you would get the following result:
double polygonAreaGeo = polygonShape.GetArea(GeographyUnit.DecimalDegree, AreaUnit.SquareMeters);
The area is equal to 336,752 square meters.
While this API gives a convenient way to have an idea of the area, you have to be aware that doing spherical geometry on a sphere of that size is inherently not going to be very accurate
To have a more accurate measurement of the area, you would have to project the polygon to the local projection that is best fit for the geographic area. A local projection is better for accurate measurement than decimal degrees because it uses parameters specific for that area such as reference spheroid, datum, origin latitude, longitude etc. I don’t have the time here to explain about projections but you can check it out at en.wikipedia.org/wiki/Map_projection
Now, different projections have different characteristics and one projection may be better fit then another based on what you really care. Do you want a projection that preserves shapes and angles? Then you may want to use UTM. Or do you want a projection specifically designed for preserving areas? Then, you may want to use State Plane which has been specifically designed for surveying.
In your case, what you care about is area, so I would use State Plane. The polygon is in <st1:place w:st="on">Wisconsin</st1:place> central zone. So I will apply the polygon to that projection to get a more accurate area measurements. For your convenience, I created the following function that takes a shape, the projection it is in, the geography unit (meters or feet) and the area unit for the result:
private double GetArea(AreaBaseShape areaBaseShape, Proj4Projection proj4, GeographyUnit projectionUnit, AreaUnit areaUnit )
{
double result = 0;
proj4.Open();
AreaBaseShape projAreaBaseShape = (AreaBaseShape)proj4.ConvertToExternalProjection(areaBaseShape);
result = projAreaBaseShape.GetArea(projectionUnit, areaUnit);
proj4.Close();
return result;
}
So for that polygon to get the most accurate area, I would use the stateplane projection for Central <st1:place w:st="on">Wisconsin</st1:place> spatialreference.org/ref/esri/102753/
Proj4Projection StatePlaneProj4 = new Proj4Projection();
StatePlaneProj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
StatePlaneProj4.ExternalProjectionParametersString = Proj4Projection.GetEsriParametersString(102753);//unit in Feet
double polygonAreaStatePlane = GetArea(polygonShape,StatePlaneProj4, GeographyUnit.Feet, AreaUnit.SquareMeters);
The result is 337,889 square meters.
Now let see what is the area given in UTM, that part of <st1:state w:st="on"><st1:place w:st="on">Wisconsin</st1:place></st1:state> is in zone 16. spatialreference.org/ref/epsg/26916/
Proj4Projection UTMProj4 = new Proj4Projection();
UTMProj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
UTMProj4.ExternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(26916);
double polygonAreaUTM = GetArea(polygonShape,UTMProj4, GeographyUnit.Meter, AreaUnit.SquareMeters);
The result is 338,123 square meters.
I would trust more the result from the State Plane projection if you compare the characteristics of StatePlane with UTM.
en.wikipedia.org/wiki/State_plane
en.wikipedia.org/wiki/Univer...ate_system
Using the method Of course, you can get the area of the polygon in any other projections.
Now, for a circle, it is a case a little bit particular because of a way it is defined as opposed to a polygon. A polygon is defined by a series of vertices. A circle is defined by a center and a radius.
A radius cannot be projected. In that case, I think that sincerely the approach to adopt is to ignore projection and to create a circle in meters with a center at a location that does not matter and just use it for getting the area.
For displaying it, as I explain in the previous post, you can create the Ellipse in the two different ways:
-As circle:
PointShape pointShape = new PointShape(-90.0, 45.0);
MultipolygonShape areaShape = pointShape.Buffer(1, GeographyUnit.DecimalDegree, DistanceUnit.Meter);
As an Ellipse:
double latDiff = DecimalDegreesHelper.GetLatitudeDifferenceFromDistance(1, DistanceUnit.Meter, -90);
double longDiff = DecimalDegreesHelper.GetLongitudeDifferenceFromDistance(1, DistanceUnit.Meter, 45);
EllipseShape ellipseShape1 = new EllipseShape(pointShape, longDiff, latDiff);
double area1 = ellipseShape1.GetArea(GeographyUnit.DecimalDegree, AreaUnit.SquareMeters);
You will notice that many GIS packages and the OGS do not deal at all with circle and deals only with polygons for area shapes. We offer that shape in the API as a convenient way to create ellipse but that comes at a price in adding complexity in dealing with projection.
I hope that this gave a better understand of what the issues are with dealing with calulating areas when dealing with polygons and circles on a map in decimal degrees.