Hey All,
I just worked on this myself and used the following. (It’s rough, but gives a pretty good approximation.)
// Get the polygon from your “entity”
var polygon = theEntity.polygon;
var hierarchy = polygon.hierarchy._value;
// “indices” here defines an array, elements of which defines the indice of a vector
// defining one corner of a triangle. Add up the areas of those triangles to get
// an approximate area for the polygon
var indices = Cesium.PolygonPipeline.triangulate(hierarchy.positions, hierarchy.holes);
var area = 0; // In square kilometers
for (var i = 0; i < indices.length; i += 3) {
var vector1 = hierarchy.positions[indices[i]];
var vector2 = hierarchy.positions[indices[i+1]];
var vector3 = hierarchy.positions[indices[i+2]];
// These vectors define the sides of a parallelogram (double the size of the triangle)
var vectorC = Cesium.Cartesian3.subtract(vector2, vector1, new Cesium.Cartesian3());
var vectorD = Cesium.Cartesian3.subtract(vector3, vector1, new Cesium.Cartesian3());
// Area of parallelogram is the cross product of the vectors defining its sides
var areaVector = Cesium.Cartesian3.cross(vectorC, vectorD, new Cesium.Cartesian3());
// Area of the triangle is just half the area of the parallelogram, add it to the sum.
area += Cesium.Cartesian3.magnitude(areaVector)/2.0;
}
``
Hope that helps.