在项目中,有时会有实现 垂直空心圆柱(管道)的需求;
对于倾斜的或水平的管道实现起来比较容易,网上也有一些教程,但是对于垂直的管道就会发现生成的管道没有厚度,网上对于竖直管道生成的分享也几乎没有,这里就给大家分享一下我的实现思路。
先上代码:
温馨提示:此方法需要借助 turf.js 库
turf 库官网链接:GET START | Turf.js中文网
var center = [112.044137, 38.708863]; // 圆柱中心
var radius_out = 0.005; //外圈半径
var radius_in = 0.003; //内圈半径
var options = {
steps: 1000, //几边形圆,4,四边形
units: 'kilometers', //千米
properties: { foo: 'bar' },
};
//外圈
var circle_wai = turf.circle(center, radius_out, options);
let waiquan = circle_wai.geometry.coordinates[0].flat();
waiquan.splice(waiquan.length - 2, 2);
//内圈
var circle_nei = turf.circle(center, radius_in, options);
let neiquan = circle_nei.geometry.coordinates[0].flat();
neiquan.splice(neiquan.length - 2, 2);
//生成带孔多边形
const polygonHoles = viewer.entities.add({
polygon: {
hierarchy: {
positions: Cesium.Cartesian3.fromDegreesArray(waiquan),
holes: [
{
positions: Cesium.Cartesian3.fromDegreesArray(neiquan),
},
],
},
extrudedHeight: 1545, //圆柱底部高度
material: Cesium.Color.fromCssColorString('#1ca5ff').withAlpha(0.8),
height: 1570, //圆柱顶部高度
}
});
viewer.zoomTo(polygonHoles);
思路:
该方法是借助 turf 库的 turf.circle()方法,基于一个点坐标,内、外圈半径,生成两组多边形圆坐标,只要指定边数越大,生成的多边形圆就越接近圆形。 拿到两组多边形圆的坐标后使用 Cesium 方法生成带孔的 polygon 实体即可。
如果对你有帮助, 就请点一个赞吧