尝试一通过计算经纬度算中间点纬
// 计算斜率直线
calculateSlopeLine(options){
const { positions } = options
let k= positions[1][1]-positions[0][1]/positions[1][0]-positions[0][0]
let b=positions[0][1]-k*positions[0][0]
return {k,b}
}
calculateSectionLine(options) {
for(let i=0;i<section;i++){
let x=positions[0][0]+i*sec
let y=k*x+b
let point=Cesium.Cartographic.fromCartesian(Cesium.Cartesian3.fromDegrees(x,y))
}
}
打出的点显示有问题
尝试二 根据cesium 距离计算点位multiplyByScalar
// 起点和终点的经纬度
var startPoint = Cesium.Cartesian3.fromDegrees(positions[0][0], positions[0][1]);
var endPoint = Cesium.Cartesian3.fromDegrees(positions[1][0], positions[1][1]);
// 计算两点之间的方向向量
var direction = Cesium.Cartesian3.subtract(endPoint, startPoint, new Cesium.Cartesian3());
// 计算两点间的间隔距离
var distance = Cesium.Cartesian3.distance(startPoint, endPoint)
var interval = distance / section;
for(let i=0;i<section;i++){
var point2 = Cesium.Cartesian3.add(startPoint,
Cesium.Cartesian3.multiplyByScalar(direction, interval * i, new Cesium.Cartesian3()), new Cesium.Cartesian3())
console.log(startPoint,direction,interval,i,distance,point2);
}
计算出的距离很大,横向排布
尝试三 利用cesium lerp 方法取间隔点,
async calculateSectionLine(options) {
const { positions,section } = options
this.drawSectionLine(options)
let len=positions[1][0]-positions[0][0]
let sec=len/section
const {k,b}= this.calculateSlopeLine(options)
// 起点和终点的经纬度
var startPoint = Cesium.Cartesian3.fromDegrees(positions[0][0], positions[0][1]);
var endPoint = Cesium.Cartesian3.fromDegrees(positions[1][0], positions[1][1]);
// 计算两点之间的方向向量
var direction = Cesium.Cartesian3.subtract(endPoint, startPoint, new Cesium.Cartesian3());
// 计算两点间的间隔距离
var distance = Cesium.Cartesian3.distance(startPoint, endPoint)
var interval = distance / section;
let position_arr=[]
for(let i=0;i<section;i++){
// let x=positions[0][0]+i*sec
// let y=k*x+b
// var point2 = Cesium.Cartesian3.add(startPoint,
// Cesium.Cartesian3.multiplyByScalar(direction, interval * i, new Cesium.Cartesian3()), new Cesium.Cartesian3())
let offset = i / (section - 1)
let point2 = Cesium.Cartesian3.lerp(startPoint, endPoint, offset, new Cesium.Cartesian3())
let point=Cesium.Cartographic.fromCartesian(point2)
position_arr.push(point)
}
let cc=await myCesium.mapUtils.getHeigthByPositions(position_arr)
return cc.map(e=>e.height)
}
结果和取的点相同