cesium之飞线数据获取(贝塞尔曲线转换)
最近研究了一下飞线生成的原理,找到一种实现方法。
以下:x指经度,y指纬度,h指飞线高度
原理:
1.通过两个点和飞线高度计算出控制贝塞尔曲线弧度的第三个点
2.将三个点的(y, h)传入贝塞尔曲线算法,得到一条垂直于地面的贝塞尔曲线点数组arr
3.通过两点的直线公式,获取数组arr中每个点的x值,得到空间曲线数组
代码:
//贝塞尔曲线二维转三维 返回一个三维点数组//参数: x1,y1,x2,y2,h 两点经纬度坐标和飞线高度
export functiongetBSRPoints (x1,y1,x2,y2,h) {
let point1= [y1, 0]
let point2= [(y2+y1)/2, h]
let point3 = [y2, 0]
let arr=getBSR(point1, point2, point3)
let arr3d=[]for (let i inarr) {
let x= (x2-x1)*(arr[i][0]-y1)/(y2-y1) + x1
arr3d.push([x, arr[i][0], arr[i][1]])
}returnarr3d
}//生成贝塞尔曲线
functiongetBSR (point1, point2, point3) {var ps = [{ x: point1[0], y: point1[1] }, { x: point2[0], y: point2[1] }, { x: point3[0], y: