你对高度和方位角的理解是正确的!对于南纬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
和alt
变量,只需这样写:
ra, dec = obs.radec_of('180', '30')
最后,你可能会想知道为什么我们得到的赤经和赤纬虽然很接近南极,但并不是完全精确。第一个原因是PyEphem考虑了大气折射,这会提高物体在低海拔角度下相对于地平线的表观高度。如果我们让
Observer
对象忽略大气效应(通过告诉它我们所处的地方没有空气——大气压力为零),那么返回值将更接近南极:
obs.pressure = 0
ra, dec = obs.radec_of('180', '30')
print ra, dec
→ 12:24:25.48 -89:55:15.9
显然,这使我们更接近目标。还有一两个问题涉及进动和甚至章动,我们需要解决才能将赤纬实际下降到完整的-90度,但我必须在早上看角度更清晰时再去处理它们!