小编辑:我在下面说 JPL 的 Horizons 库不是开源的。实际上,它是,它可以在这里找到:http: //naif.jpl.nasa.gov/naif/tutorials.html
2013-01-01 00:00:00 UTC,北纬0度,东纬0度,海平面高程,J2000时代的月球赤经和赤纬是多少?
可悲的是,不同的库给出的答案略有不同。转换为度数,汇总结果(RA 优先):
Stellarium: 141.9408333000, 9.8899166666 [precision: .0004166640, .0000277777]
Pyephem: 142.1278749990, 9.8274722221 [precision .0000416655, .0000277777]
Libnova: 141.320712606865, 9.76909442356909 [precision unknown]
Horizons: 141.9455833320, 9.8878888888 [precision: .0000416655, .0000277777]
我的问题:为什么?笔记:
我意识到这些差异很小,但是:
我使用 pyephem 和 libnova 来计算太阳/月亮升起/落下,这些时间对高纬度的位置非常敏感(例如,午夜太阳)。
我可以理解 JPL 的 Horizons 库不是开源的,但其他三个是开源的。不应该有人找出这些库中的差异并将它们合并吗?这是我的主要抱怨。stellarium/pyephem/libnova 库的作者在如何进行这些计算上有根本的区别,还是他们只需要合并他们的代码?
我也意识到计算不同可能还有其他原因,并且希望在纠正这些可能的错误方面提供任何帮助:
Pyephem 和 Libnova 可能正在使用日期的纪元而不是 J2000
月球足够近,以至于观察者的位置可以影响它的 RA/DEC(视差效应)。
我使用的是 Perl 的 Astro::Nova 和 Python 的 pyephem,而不是这些库的原始 C 实现。但是,如果这些差异是由使用 Perl/Python 引起的,我认为这很重要。
我的代码(带原始结果):
- 首先,Perl 和 Astro::Nova:
#!/bin/perl # 2013 年 1 月 1 日 0000 UTC 0N 0E 月亮的 RA/DEC 使用 Astro::Nova; # 1356998400 == 2013 年 1 月 1 日 0000 UTC $jd = Astro::Nova::get_julian_from_timet(1356998400); $coords = Astro::Nova::get_lunar_equ_coords($jd); print join(",",($coords->get_ra(), $coords->get_dec())),"\n"; 结果:141.320712606865,9.76909442356909
- Second, Python and pyephem:
#!/usr/local/bin/python # 2013 年 1 月 1 日 0000 UTC 0N 0E 月亮的 RA/DEC 导入 ephem;e = ephem.Observer(); e.date = '2013/01/01 00:00:00'; 月亮 = ehem.Moon(); 月亮.计算(e);打印moon.ra、moon.dec 结果:9:28:30.69 9:49:38.9
- The stellarium result (snapshot):
- The JPL Horizons result (snapshot):
[JPL Horizons 需要 POST 数据(不是真的,而是假装),所以我无法发布 URL]。
我没有链接它们(懒惰),但我相信在 stackoverflow 上有许多未解决的问题有效地减少到这个问题(精密天文库的不一致),包括我自己的一些问题。
我在玩这个东西:https ://github.com/barrycarter/bcapps/tree/master/ASTRO