基于cesium实现根据基础点坐标、方位角、俯仰角、距离,计算目标点经纬度高度。
【代码】基于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];
}

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)