JavaScript 实现大地坐标系转换为空间直角坐标系(BLH→XYZ)

本文介绍了如何使用JavaScript在大地测量学中,根据WGS84椭球参数,将大地坐标(B/L/H)转换为大地空间直角坐标(X/Y/Z)的计算过程,并提供了实际的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

参考文章:使用Matlab对大地测量学中的大地坐标和大地空间直角坐标进行相互转换

相关文章:JavaScript 实现空间直角坐标系转换为大地坐标系(XYZ→BLH)

在相同的坐标基准下,将大地坐标系转换为大地空间直角坐标系的公式为:
在这里插入图片描述

上式中:N为卯酉圈曲率半径;a为地球椭球的长半轴;b为地球椭球的短半轴

二、实现代码

// 原始数据:B,L,H (角度制)
var mainData = [
    [23.10000000,113.1666667,10],
    [23.11666667,113.1833333,10],
    [23.13333333,113.2000000,10],
    [23.15000000,113.2166667,10],
    [23.16666667,113.2333333,10]
]
// 定义坐标系椭球参数对象
let wgs84 = {
    a: 6378137,                     //长半径,单位m
    b: 6356752.3142451795,          //短半径
    f: 1/298.257223563,             //扁率
}
var square = num => num*num         //快速计算平方
let d2r = Math.PI / 180;            //弧度 = 角度 * Math.PI / 180

/*  
*   RE:Reference Ellipsoid(参考椭球体)
*   data: 一个存放数据的对象
*/  
function BLHtoXYZ (RE,data){
    let B = data.B;
    let L = data.L;
    let H = data.H;

    let e2 = (square(RE.a)-square(RE.b))/(square(RE.a));
    let N = RE.a/Math.sqrt(1-e2*square(Math.sin(B*d2r)));
    let X = (N+H)*Math.cos(B*d2r)*Math.cos(L*d2r);
    let Y = (N+H)*Math.cos(B*d2r)*Math.sin(L*d2r);
    let Z = (N*(1-e2)+H)*Math.sin(B*d2r);
    let result = {X:X,Y:Y,Z:Z};     //将结果保存到result对象中
    return result;
}
// 读取、处理数据
var outputResult =[];
for (var i=0;i<mainData.length;i++){
    let BLH = {
        B: mainData[i][0],
        L: mainData[i][1],
        H: mainData[i][2],
    };
    let XYZ = BLHtoXYZ(wgs84,BLH);
    let opXYZ = [XYZ.X,XYZ.Y,XYZ.Z];
    outputResult.push(opXYZ);
}
// 将结果输出到控制台
for (let i=0;i<outputResult.length;i++){
    console.log(outputResult[i])
}

得到数据:
在这里插入图片描述

三、最后

在计算之后,我将第一条数据在matlab上也算了一次,没有太大的出入。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值