您对高度和方位角的理解听起来是正确的!对于南纬30°的人来说,南天极确实位于南部地平线上方30°,正如您所描述的那样。
但是我们可以对您的代码进行一两个修复。
首先,拼写错误。您正在寻找的将度数转换为弧度的函数被命名ephem.degrees()
(注意复数) - 如果您尝试ephem.degree
作为函数调用,那么您将得到异常:
TypeError: 'float' object is not callable
因为ephem.degree
实际上是浮点数 0.0174532925199 因为那是一个度数的弧度。而且您不能像调用函数一样调用浮点数!解决这个问题,我们会为您的示例获得正确且有效的代码:
az = float(ephem.degrees('180'))
alt = float(ephem.degrees('30'))
ra, dec = obs.radec_of(az,alt)
print ra, dec
→ 12:30:10.05 -89:53:54.7
但是我们可以让代码更简单!
首先, 的返回值ephem.degrees()
已经是一个浮点数,所以float()
围绕它的调用实际上是没有必要的;你可以说:
az = ephem.degrees('180')
alt = ephem.degrees('30')
并且这两个值作为radec_of()
. 事实上,你可以做得更好:因为radec_of()
函数知道方位角和高度传统上以度为单位,你可以将字符串交给函数本身,它会假设你的字符串中的数字是以度为单位的。因此,如果我们愿意,我们可以完全消除az
andalt
变量,然后说:
ra, dec = obs.radec_of('180', '30')
最后,您可能想知道为什么我们返回的 RA 和赤纬并不完全在南极,即使它们很接近。
第一个原因是 PyEphem 考虑了大气折射,它提高了低空物体在地平线以上的视高度。如果我们告诉Observer
物体忽略大气影响(通过告诉它我们居住的地方没有空气——大气压力为零),那么返回值将更接近南极:
obs.pressure = 0
ra, dec = obs.radec_of('180', '30')
print ra, dec
→ 12:24:25.48 -89:55:15.9
显然,这让我们更接近。剩下一两个涉及进动甚至章动的问题,我们需要解决这些问题才能真正将偏角降低到完整的 –90°,但是当我可以更好地可视化角度时,我将不得不在早上查看它们!