1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JavaScript 实现大地坐标系转换为空间直角坐标系(BLH→XYZ)

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

时间:2020-06-22 07:50:17

相关推荐

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

一、前言

参考文章:使用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, //长半径,单位mb: 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上也算了一次,没有太大的出入。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。