Cesium 计算两个经纬度的中心点坐标,并计算出两个点的角度朝向

最近项目有一个需求

cesium 地球上生成一条线,在线的每两个点之间生成一个中心坐标点,在这个中心坐标点上画一个箭头,箭头的朝向是 每组两个经纬度的 第二个经纬度

  1. 先计算两个经纬度点之间的中心坐标点
/**
 * 计算两个点之间的中心点坐标
 * @param point1 第一个点的坐标[long,lat]
 * @param point2 第二个点的坐标[long,lat]
 * @returns 返回中心点
 */
export function twoToCenter(point1: any, point2: any) {
  
  //坐标转换
  let pointNew1 = Cesium.Cartesian3.fromDegrees(point1[0], point1[1])
  
  let pointNew2 = Cesium.Cartesian3.fromDegrees(point2[0], point2[1])

  //计算两个点的中心坐标
  let centerPoint = Cesium.Cartesian3.lerp(pointNew1, pointNew2, 0.5, new Cesium.Cartesian3())
  
  return  centerPoint
}
  1. 在计算中心坐标点的角度朝向,并生成箭头
let coordItem = [[lng1,lat1],[lng2,lat2]]
//获取两个点之间的中心点坐标
let centerPoint = twoToCenter(coordItem[0],coordItem[1])
//通过 turf 计算两个点的方向向量
let angle = turf.rhumbBearing(coordItem[0],coordItem[1])
//转换成cesium的角度
const angleInRadians = Cesium.Math.toRadians(-angle + 90)

let arrowEntity = viewer.entities.add({
    position: centerPoint,
    billboard: {
        image: image,//箭头图标,也可以是canvas,canvans可以改变样式和颜色
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
    }
})

arrowEntity.billboard.rotation = angleInRadians
viewer.zoomTo(viewer.entities)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值