使用dec / ra计算月下位置的混淆



我需要计算给定日期/时间的视方位角和仰角以及月下纬度/纬度。我得到的az/el角度通常与其他来源(MoonCalc.org,地平线等(一致,但对于月下纬度/纬度没有很好的比较来源。更重要的是,我怀疑使用 dec/ra 值得到的纬度/纬度,因为ra在很长一段时间内几乎没有变化。

这是我正在拨打的基本电话:

roc.date='2018/1/1 01:00:00'
moon=ephem.Moon(roc)
print('rocMoonTest: %s UTC-4, lat/lon = %0.4f [+N], %0.4f [+E]' %
(roc.date, math.degrees(roc.lat), math.degrees(roc.lon)))
print('Moon dec/ra     = %s [+N], %s [+W]' % (moon.dec, moon.ra ))
print('Moon a_dec/a_ra = %s [+N], %s [+W]' % (moon.a_dec, moon.a_ra ))
print('Moon g_dec/g_ra = %s [+N], %s [+W]' % (moon.g_dec, moon.g_ra ))
print('Moon az/el      = %0.4f, %0.4f' %
(math.degrees(moon.az), math.degrees(moon.alt)))

然后我每 3 小时迭代一次。 下面是输出:

rocMoonTest: 2018/1/1 01:00:00 UTC-4, lat/lon = 43.0000 [+N], -78.0000 [+E]
Moon dec/ra     = 18:53:07.1 [+N], 5:43:03.33 [+W]
Moon a_dec/a_ra = 19:22:21.3 [+N], 5:39:38.43 [+W]
Moon g_dec/g_ra = 19:22:44.7 [+N], 5:40:41.41 [+W]
Moon az/el      = 105.3953, 43.0670
rocMoonTest: 2018/1/1 04:00:00 UTC-4, lat/lon = 43.0000 [+N], -78.0000 [+E]
Moon dec/ra     = 19:07:55.4 [+N], 5:49:00.24 [+W]
Moon a_dec/a_ra = 19:32:24.2 [+N], 5:47:42.22 [+W]
Moon g_dec/g_ra = 19:32:35.1 [+N], 5:48:45.29 [+W]
Moon az/el      = 169.5907, 65.8406
rocMoonTest: 2018/1/1 07:00:00 UTC-4, lat/lon = 43.0000 [+N], -78.0000 [+E]
Moon dec/ra     = 19:13:15.7 [+N], 5:54:49.89 [+W]
Moon a_dec/a_ra = 19:41:07.2 [+N], 5:55:47.50 [+W]
Moon g_dec/g_ra = 19:41:05.5 [+N], 5:56:50.65 [+W]
Moon az/el      = 246.5737, 49.4664

正如预期的那样,并通过az/el角度验证,随着地球自转,月球从东向西摆动,并在这段时间内达到峰值高度。 但是,各种dec/ra值都没有显著变化。在这 6 小时的跨度内,我希望看到 ra 大约 6 小时的变化。显然,当我使用这些 ra 值中的任何一个来计算经度时,我得到了错误的答案。dev/ra的参考系似乎没有随地球旋转。但是,文档表明我应该期待它。

有人愿意解释我在理解各种正确扬升变量时哪里出错了,以及计算月下纬度/纬度的最直接方法是什么?请注意,我宁愿避免使用将表观 az/el 位置旋转为大地纬度/纬度的方法。

测量"右升"不是针对地球的旋转表面进行的,而是针对天空的固定恒星进行的——它是一种经度,但其原点是星图上的点,其中两个伟大的"天空赤道",地球的赤道和"太阳系的赤道",黄道(这不是真正的太阳系赤道,因为它是地球轨道的平面, 而不是所有行星轨道的加权平均值(,交叉。

由于他们的穿越点本身会随着岁月的流逝而移动,因此右升的系统每年都略有不同,并且在几个世纪和几千年之间也非常不同。因此,右升和赤纬(天纬(总是必须相对于某个日期指定,例如B1950或J2000。

现在有一个固定的RA和dec坐标系,它不会移动,ICRS,它的方向类似于J2000,但使用类星体的位置定义,类星体(我们假设(在我们物种的生命周期内不会移动。

关于您问题的这一部分

计算月下纬度/纬度最直接的方法是什么?

这是我计算月下点的代码。

greenwich = ephem.Observer()
greenwich.lat = "0"
greenwich.lon = "0"
greenwich.date = datetime.utcnow()
#add Moon Sub Solar Point
moon = ephem.Moon(greenwich)
moon.compute(greenwich.date)
moon_lon = math.degrees(moon.ra - greenwich.sidereal_time() )
# map longitude value from -180 to +180 
if moon_lon < -180.0 :
moon_lon = 360.0 + moon_lon 
elif moon_lon > 180.0 :
moon_lon = moon_lon - 360.0
moon_lat = math.degrees(moon.dec)
print "moon Lon:",moon_lon, "Lat:",moon_lat

希望有帮助。 我也使用相同的方法来计算亚太阳点。 对我来说效果很好。

编辑:是的...格林威治的纬度设置为零,因为对于此计算来说根本不重要。

您可以通过查看其他链接来加强您对这种方法方向的思考:

计算亚太阳点

这给出了基本相同的解决方案,但对于sub_solar_point,也来自利亚姆肯尼迪(他在那里为格林威治给出了一个非零的 Lat(,以及布兰登·罗德斯的回答,他用 python 包装了 xephem 库给我们 pyephem,直到最近还在积极维护它。 Brandon 现在更专注于他的下一个迭代,一个名为 skyfield 的纯 python 库,它使用最新的可用星历表和更直观的 API。

https://pypi.org/project/skyfield/

https://rhodesmill.org/skyfield/installation.html

虽然我现在不能贡献它,但我是否可以建议比较pyephem和skyfield的结果,也许在一两个matplotlib图中,IOW,天空场的结果有多大不同/改进?

最新更新