Cesium中两个点之间地形的高低分析
-
tip:利用两个点之间做插值运算出多个点然后再利用地形坐标查询获取高度,可以绘制出区间内的高低走势。
-
关键代码:
-
1、点之间做插值运算
const startPoint = car3ToLatLon(points[0])
const endPoint = car3ToLatLon(points[1])
const pointSum = this.pointsNum; //取样点个数
let heightArr = []
let pts:[number, number][] = []
let offset,x,y;
for (let i = 0; i < pointSum; ++i) {
offset = i / (pointSum - 1);
//做插值
x = Cesium.Math.lerp(startPoint.lon, endPoint.lon, offset);//插值
y = Cesium.Math.lerp(startPoint.lat, endPoint.lat, offset);//插值
pts.push([x, y]);
}
- 2、做地形高度查询
// 查询地图的地形高度
const terrainProvider= Cesium.createWorldTerrain({
requestVertexNormals: true
})
const positions = pts.map((d: [number, number])=> Cesium.Cartographic.fromDegrees(...d))
//根据地形计算某经纬度的高度
var promise:any = Cesium.sampleTerrainMostDetailed(terrainProvider, positions);
(<any>Cesium).when(promise, ()=> {
const heightArr = positions.map(d => ({
hei: d.height,
lon: Cesium.Math.toDegrees(d.longitude),
lat: Cesium.Math.toDegrees(d.latitude)
}))
console.log(heightArr)//插值的经纬度以及高度
})