基于cesium实现根据基础点坐标、方位角、俯仰角、距离,计算目标点经纬度高度。

Cesium,已知基础点位置、方位角、俯仰角、距离,求目标点位置。

// 雷达设备的侦察数据,侦察到的目标只有方位角、俯仰角、距离,需要计算出经纬高度,在界面上显示目标
// 基于cesium实现根据基础点坐标、方位角、俯仰角、距离,计算目标点经纬度高度。
// 示例: calcTargetPosition(120, 30, 1000, -45, -45, 1000);
function offsetFromHeadingPitchRange(lonDegrees, latDegrees, height, azimuthDegrees, pitchDegrees, distance) {
  let heading = Cesium.Math.toRadians(azimuthDegrees);
  let pitch = Cesium.Math.toRadians(pitchDegrees);
  pitch = Cesium.Math.clamp(pitch,-Cesium.Math.PI_OVER_TWO,Cesium.Math.PI_OVER_TWO);
  heading = Cesium.Math.zeroToTwoPi(heading) - Cesium.Math.PI_OVER_TWO;
  const pitchQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Y,-pitch);
  const headingQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z,-heading);
  const rotQuat = Cesium.Quaternion.multiply(headingQuat,pitchQuat,headingQuat);
  const rotMatrix = Cesium.Matrix3.fromQuaternion(rotQuat);
  const offset = Cesium.Cartesian3.clone(Cesium.Cartesian3.UNIT_X);
  Cesium.Matrix3.multiplyByVector(rotMatrix, offset, offset);
  Cesium.Cartesian3.multiplyByScalar(offset, distance, offset);
  const basePointCartesian3 = Cesium.Cartesian3.fromDegrees(lonDegrees, latDegrees, height);
  const transform = Cesium.Transforms.eastNorthUpToFixedFrame(basePointCartesian3);
  const result = Cesium.Matrix4.multiplyByPoint(transform, offset, new Cesium.Cartesian3());
  const targetPointCartographic = Cesium.Cartographic.fromCartesian(result);
  const targetPointLongitude = Cesium.Math.toDegrees(targetPointCartographic.longitude);
  const targetPointLatitude = Cesium.Math.toDegrees(targetPointCartographic.latitude);
  const targetPointHeight = targetPointCartographic.height;
  // 经度、纬度、高度、空间坐标笛卡尔坐标
  return [targetPointLongitude, targetPointLatitude, targetPointHeight, result];
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值