从本章开始,介绍下Cesium中有关地球坐标系转换的相关内容。

在Cesium中,默认的中心天体为地球,且涉及到的地球坐标系有地心固连系和地心惯性系。

  • 地心固连系,即地固系,Cesium和STK软件里都用Fixed表示,在IERS中的正式表示为:ITRF(或ITRS)(international terrestrial reference frame)。此坐标系和我们常见的WGS84系基本一致,仅微小差别。
  • 地心惯性系,Cesium和STK软件里都用ICRF表示,也是IERS中的正式表述:ICRF(或ICRS)(international celestial reference frame)。此坐标系和我们常说的J2000惯性系有个常值矩阵的差别,也非常小。对于地心惯性系,ICRF等效为GCRS。

有关ITRF和ICRF的详细描述和转换过程请参见我之前一篇文档:ITRS/GCRS/J2000坐标系的相互转换。

从地固坐标系(ITRF)到地心惯性系(ICRF或GCRS)的坐标转换矩阵由极移,自转和岁差章动组成。

本节主要阐述Cesium的岁差章动参数(X,Y,s)的计算方式。

概括起来一句话:受计算时间的限制,采用与STK软件中的计算方式:从文件读取预先计算好的数表,然后用拉格朗日差值法插值计算。

岁差章动参数:X,Y,s

根据IERS给出的最新的岁差章动理论模型,岁差章动的矩阵计算涉及到三个参数:X,Y,s。其中,X,Y为CIP在ICRF的XY平面内的坐标,s为CIO点在XY平面的具体位置。
X,Y的数值涉及到两部分,见下式:
(X,Y)=(X,Y)IAU2006+(dX+dY)IERS(X,Y)=(X,Y)_{IAU2006}+(dX+dY)_{IERS}(X,Y)=(X,Y)IAU2006​+(dX+dY)IERS​
其中, (X,Y)IAU2006(X,Y)_{IAU2006}(X,Y)IAU2006​和sss可根据IAU2006A/B岁差章动模型求解出,另外,由于IAU2000A/B岁差章动模型没有包含地轴的高频率运动,所以要加上IERS通过观测数据给出的高频率修正项(dX+dY)IERS(dX+dY)_{IERS}(dX+dY)IERS​ 。

本节所讨论的内容就是前面的一项:(X,Y)IAU2006(X,Y)_{IAU2006}(X,Y)IAU2006​的计算。

有关X,Y的计算,根据IAU2006的岁差章动模型,主要为数千项的三角函数的级数形式,IERS Conventions(2010)给出的公式如下:

我们可以看出,有关X、Y的级数计算方式原理简单,但是系数太多。

Cesium和STK中的计算方法

在Cesium中,计算ITRF到ICRF的过程主要在前端进行的,且调用非常频繁。因此需要简单且精确的计算方式。因此如果还是采用上式的计算方式,估计满足不了计算的速度(我没测试过)。

因此,Cesium中采用了STK软件中的计算方式:预先计算好X、Y、s的数值,以一天一个点的方式存储到文件中。首次计算时,先读取文件中的系数。计算某时刻t的XYs时,从系数中找到离t最近的几天系数(根据插值阶数确定),然后采用拉格朗日插值法求解出精确数值。

以上计算方式有几方面好处:

  1. 提升计算效率:避免了对大量的三角函数的级数求和,节省了计算时间;
  2. 保证计算精度:由于X、Y、s的变化较为缓慢,因此间隔1天的采样点存储方式保证了一定的精度,再加上高阶的拉格朗日插值法,使得最终求得的数值不失真,保证原汁原味的精度(后面有论证结果)。
  3. 形式简单:采用拉格朗日插值法计算总比计算数千项的三角级数计算形式简单吧,且编程起来也容易。

STK的数据文件

STK软件中,打开目录:“C:\Program Files\AGI\STK 11\STKData\ICRF”,其中文件"IAU2006_XYS.Dat"即为X、Y、s的数据内容,其中部分内容见下图。

由数据内容可得到:

  1. 数据的历元起点时刻(TT)为2442396.5(15 Dec 1974 00:00:00 TT);
  2. 每行三个数,分别是X,Y,s,单位为角秒(arcsec);
  3. 每天一行数据,一共27426行,即27426天,对应最后一行数据的时刻为15 Jan 2050 00:00:00(TT);
  4. STK计算时使用拉格朗日插值法,默认插值阶数为9。

Cesium的数据文件

Cesium软件包中,打开目录:"\Build\Cesium\Assets\IAU2006_XYS",其中文件"IAU2006_XYS_0.json"-"IAU2006_XYS_27.json"共27个数据文件即为X、Y、s的数据内容。注意,这27个文件里的内容皆以json格式存储。

前面说过,Cesium中的XYS数据与STK中的内容一致,从15 Dec 1974 00:00:00 TT到15 Jan 2050 00:00:00(TT),每天一个数据,共27426天。在Cesium中,1000天的数据存储为一个文件,即"IAU2006_XYS_0.json"中存储1-1000天的数据;"IAU2006_XYS_1.json"中存储1001-2000天的数据;以此类推。最后一个文件"IAU2006_XYS_27.json"仅存储426天的数据。

下面为"IAU2006_XYS_0.json"中的部分数据(注释是我自己添加的):

{"version": "1.0","updated": "2008 Dec 02 20:00:00 UTC","interpolationOrder": 9,"xysAlgorithm": "SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate": 2442396.5,"stepSizeDays": 1,"startIndex": 0,"numberOfSamples": 1000,"samples": [-0.002403025022753476,           //第1天的X(radian)   -2.5083047211757836e-5,          //第1天的Y(radian)-1.721638967214743e-8,            //第1天的s(radian)-0.002402558217007106,           //第2天的X(radian)   -2.5020003017226545e-5,           //第2天的Y(radian)-1.7146589882925253e-8,          //第2天的s(radian)...                                                  //第3天的X(radian)...

从内容我们可以获知:

  1. 以json文件格式保存时,不再是一行三个参数的形式了,而是把所有天数的参数按照时间的顺序和XYs的顺序全部放到"samples"的数组中;
  2. X,Y,s的单位为弧度(radian),STK中为角秒(arcsec),仅此不同,数值都是一样的,有兴趣的读者可以自行转换一下。

计算函数与结果校对

有关XYs三个参数的读取和计算都放在模块"Iau2006XysData"中,对应的源代码文件在Cesium软件包目录中"\Source\Core\Iau2006XysData.js"。

Iau2006XysData模块里有函数computeXysRadians用于计算X、Y、s参数,但是并不能直接调用,一般是在计算ITRF到Fixed的转换矩阵时调用,内部会调用computeXysRadians,这个过程会在以后的文章中介绍。

最后,以儒略日2460000(TT)为零点,每天一个点,计算100天。分别使用SOFA软件包里的XYS06_series函数和Cesium里的函数进行计算并做比较,结果如下图。

可以看出,两者差别达到了微角秒量级,这个精度也是IAU2006岁差章动模型的精度,因此STK和Cesium这种采用拉格朗日插值法计算XYs参数的方法无计算精度的损失。

Cesium中的地球坐标系转换:岁差章动计算(XYs)相关推荐

  1. Cesium中的坐标系及转换

    在我们开始学习Entity之前,我们首先需要先学习下Cesium中的坐标系,Cesium中有多个坐标系,在进行添加Entity时经常会使用到. 一.坐标系介绍 我们先来列举下Cesium中的坐标系:W ...

  2. STK/Component/Cesium中的月球坐标系的计算

    下图中,已如某飞行器在地球惯性系(ICRS或GCRS或ICRF)中T时刻的位置,那么如何求解此飞行器T时刻在月球坐标系下的位置(速度)? 显然,这个问题涉及到两个方面,一是月球相对地球的位置(即地月的 ...

  3. Cesium中的儒略日JulianDate

    在天文和卫星轨道计算中,有关儒略日的计算是一个绕不开的话题.本章阐述下Cesium中有关儒略日的处理方法. 涉及到的时间系统,如UTC,TAI等,这里不再详细阐述,读者自行阅读专业书籍或者网上查询. ...

  4. Cesium中的相机—HeadingPitchRoll

    在Cesium中,常常使用HeadingPitchRoll三个角度来定义相机坐标系相对某基准坐标系的方位. 在详细阐述这个概念之前,先阐述在航空飞行中常用的yaw/pitch/roll. 偏航(yaw ...

  5. Cesium中笛卡尔坐标系到底是什么鬼

      使用Cesium开发三维GIS应用离不开笛卡尔坐标系,在CesiumJS中定义类型是Cartesian3,这是Cesium的基础数据类型,所有坐标最后均转换成这个类型参与三维渲染,包括屏幕坐标,地 ...

  6. GIS数据处理-cesium中模型位置设置

    GIS数据处理-cesium中模型位置设置 介绍 最近我收到不少人私信询问我,在cesium中加载3dtiles模型后如何调整模型位置,这里我就统一的介绍一下,我是怎么处理的以供大家参考. 常见模型分 ...

  7. matlab中中图像PSNR和SSIM的计算

    图像处理结果的度量 -- SNR.PSNR.SSIM 网上找了很多关于PSNR和SSIM的计算,很多结果算出来都不一样,公式都是普遍的,如下: 现在总结下造成结果差异的原因. PSNR的差异: 1.灰 ...

  8. POJ3751 时间日期格式转换【日期计算】

    时间日期格式转换 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8306   Accepted: 3829 Descript ...

  9. 【C++学习】C++中的强制转换

    C++中的强制转换 1.旧风格的强制换转换 C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Fu ...

  10. MYSQL中的日期转换

    MYSQL中的日期转换 网址: http://www.eygle.com/digest/2006/09/mysql_date_convert.html 对于每个类型拥有的值范围以及并且指定日期何时间值 ...

最新文章

  1. 1.matlab 中的axis tight,legend
  2. AndroidFFmpeg
  3. [翻译]敏捷软件开发 一 之简要介绍
  4. rss的普及需要一个容易理解的中文名字,叫“新闻源”如何?
  5. 技术动态 | 自底向上构建知识图谱全过程
  6. VMware提供的几种工作模式?
  7. python查看函数参数快捷键_python查看函数源代码快捷键_pycharm中查看源码的快捷键...
  8. win10自带sftp服务器_win10开启sftp服务器
  9. [计算机网络]十、TCP的拥塞控制和4个计时器、常用协议原理和命令
  10. 【论文阅读】Unifying Knowledge Graph Learning and Recommendation
  11. BZOJ1202 [HNOI2005]狡猾的商人(洛谷P2294)
  12. 手赚网试玩平台源码 可封装APP 带文章资讯功能 帝国cms7.5内核
  13. 2018年最新python视频教程学习建议百度云分享
  14. StoryDALL-E复现(基于预训练文本到图像Transformer的故事续编)
  15. 牛市来了,直接买币不就OK了,干嘛非要上矿机?
  16. python-今日头条
  17. Java中==与equals
  18. 手机系统版本android 8,手机如何升级到安卓8.0系统?对手机有要求吗?
  19. 边缘设备、系统及计算杂谈(10)——dapr学习之三
  20. 车辆底盘自动集中润滑系统的研究分析

热门文章

  1. Android开发语音转文字,在Android上语音转文字
  2. 真香啊,20张高清数据分析全知识地图,要学的东西全都概况了
  3. react实现简单的计算器功能。
  4. Php-SPL库中的迭代器类详解
  5. 如何开放云服务器端口
  6. mysql索引失效情况
  7. oracle 12c 自增序列
  8. 简易地图---python数据结构
  9. Win10(Windows)系统中窗口切换 最大最小化窗口等快捷键
  10. linux qt程序崩溃_Qt程式异常崩溃处理技巧(Win)