cesium学习记录09-turf.js的使用(画矩形结合地形生成三角网)
// 首先,确保已经引入了Cesium和turf.js库
// 初始化Cesium Viewer
const viewer = new Cesium.Viewer('cesiumContainer');
// 定义一个函数,用于画矩形并结合地形生成三角网
function drawRectangleWithTerrain(coordinates) {
// 获取Cesium.Cartesian3形式的坐标数组
const cartesianArray = coordinates.map(coord => Cesium.Cartesian3.fromDegrees(coord[0], coord[1]));
// 使用turf.js的bboxPolygon函数从坐标数组生成多边形
const polygon = turf.bboxPolygon(turf.bbox(cartesianArray));
// 将多边形转换为Cesium.PolygonGraphics,并设置Material和Positions
const polygonGraphics = new Cesium.PolygonGraphics({
hierarchy: new Cesium.CallbackProperty(() => Cesium.PolygonHierarchy.fromCartesianArray(cartesianArray), false),
material: new Cesium.ColorMaterialProperty(Cesium.Color.RED.withAlpha(0.5))
});
// 创建一个实体,并将其添加到Cesium Viewer中
const entity = viewer.entities.add({
name: 'Rectangle with Terrain',
polygon: polygonGraphics
});
// 计算多边形的高程
Cesium.sampleTerrain(viewer.terrainProvider, 10, cartesianArray).then(updatedPositions => {
// 更新实体的hierarchy属性
entity.polygon.hierarchy = new Cesium.CallbackProperty(() => {
return new Cesium.PolygonHierarchy(updatedPositions);
}, false);
});
}
// 使用该函数画矩形,这里的坐标是一个二维数组,例如:[[-123.074, 44.048], [-123.074, 44.013], [-123.061, 44.013], [-123.061, 44.048]]
drawRectangleWithTerrain([[-123.074, 44.048], [-123.074, 44.013], [-123.061, 44.013], [-123.061, 44.048]]);
这段代码首先定义了一个函数drawRectangleWithTerrain
,它接收一个坐标数组,然后使用turf.js的bboxPolygon
函数生成一个多边形,并使用Cesium.PolygonGraphics设置材质和位置。最后,创建一个实体并将其添加到Cesium Viewer中,同时使用Cesium.sampleTerrain计算出更新后的高程,并将其应用到实体的hierarchy属性中。这样,我们就可以在Cesium Viewer中看到一个结合地形的矩形三角网。
评论已关闭