cesium 两个点绘制的直线中间打点 计算出的中间点不对

尝试一通过计算经纬度算中间点纬

 // 计算斜率直线
    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)
    
    }

结果和取的点相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值