surface area of polygon

Hi,

I need to calculate the surface area of Polygon in Cesium in 3D.

Any help is appreciated!
Thanks.

Hello,

Cesium currently doesn’t have this functionality, but we plan on implementing it in the future.

Meanwhile, take a look at Turf.js. Their area implementation isn’t 100% accurate, but it give a close approximation.

Best Regards,

-Hannah

Thanks Hannah for the help .
Will look into this.

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.

  • Dave

Hi Dave!

Thanks for your code, I just tried but I can't make it work. Is that possible for you send a working example?

BR
Abel