上一篇Cesium基础-表面距离量算简单介绍了表面距离的计算原理。这一篇想介绍一下表面面积量算的实现过程。
和表面距离一样,本质还是“微积分”的原理。将整块面无限细化为很小的小面,以提升计算精度。
面细化方法,我用了两种方法。如果大家有更好的方法,欢迎评论区留言。
方法一:将多边形面对应屏幕区域,构建泰森多边形(我比较懒,直接用turf.js的API计算的)
private calculateSurfaceArea(positions:Cartesian2[]):number{
let result = 0;
const bounds = getBounds(positions);
const points = turf.randomPoint(50,{bbox:[bounds[0],bounds[1],bounds[2],bounds[3]]});
const mainPoly = Cartesian2turfPolygon(positions);
const voronoiPolygons = turf.voronoi(points,{bbox:[bounds[0],bounds[1],bounds[2],bounds[3]]});
voronoiPolygons.features.forEach(element => {
const intersectPoints = intersect(mainPoly,element.geometry)
result += this.calculateDetailSurfaceArea(intersectPoints);
});
return result;
}
private calculateDetailSurfaceArea(positions:C

最低0.47元/天 解锁文章
598

被折叠的 条评论
为什么被折叠?



