无源淹没分析比较简单,核心就是抬升面的高度。
这里将面绘制完后,获取最高和最低的高程值,传入表单框中。
点击分析,开始抬升
高程获取
灵感来自:Cesium选定范围取最高、最低高程及填挖方分析 | 开飞机的老张 (kaifeiji.cc)
Turf中文网:Turf.js中文网 (fenxianglu.cn)
过程:从Cesium中获取坐标后传入Turf中进行插值,然后返回插值点坐标,Cesium中通过Cesium.sampleTerrain获取高程值,详细见官网API:Global - Cesium Documentation
高程获取函数:
const minAndMaxHeight =async (positions) => {
//将笛卡尔坐标转为经纬度坐标,并转为turf.js的Polygon类型
const lnglats = positions.map(position => [Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(position).longitude),
Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(position).latitude)])
console.log(lnglats)
const turfPolygon = turf.lineString(lnglats) // 转为turf.js的Polygon类型
const turfExtent = turf.bbox(turfPolygon) // 获取turfPolygon的边界框
// 在turfPolygon中按网格取样点,网格间距8米
const turfSamplePoints = turf.pointGrid(turfExtent, 0.08, {
units: 'kilometers',
// mask: turfPolygon,
});
// 将turf取样点转为Cesium的取样点
const cesiumSamplePoints = []
for (let i = 0; i < turfSamplePoints.features.length; i++) {
const coord = turfSamplePoints.features[i].geometry.coordinates;
cesiumSamplePoints.push(Cesium.Cartographic.fromDegrees(coord[0], coord[1]));
}
const terrainProvider = await Cesium.createWorldTerrainAsync(); // 获取地形服务
const updatedPositions = await Cesium.sampleTerrain(terrainProvider, 11, cesiumSamplePoints) // 计算取样点的高度
let minHeight = 8888
let maxHeight = 0
// 计算取样点的最小高度和最大高度
for (let i = 0; i < upda