计算子太阳能点

时间:2013-06-23 15:42:29

标签: pyephem

我刚开始使用PyEphem。我的当前任务是,给定日期和时间计算地球上具有latitude-longitude值的子太阳点。我将深入研究PyEphem来解决这个问题,但如果有人已经这样做了,我会很感激示例代码。

2 个答案:

答案 0 :(得分:0)

我无法测试今天早上的实际代码,但是:赤纬φ的物体应该始终位于地球上具有纬度φ,因此纬度编号由身体的.dec属性(或.a_dec.g_dec根据您的应用程序直接提供给您)。

现在,经度怎么样?

想象一下这种情况,我认为必须每天大约发生一次,当格林威治在0°经度抬头时,看到天空中0°右上方的直线正上升。在那个时刻,正确提升θ的天空中的一个身体会俯视经度θ,假设经度为正向东方,就像PyEphem一样。< / p>

现在,如果格林威治正在抬头看到一条非正确的提升线呢?然后在我看来,我们只需要从身体的正确提升中减去它以获得经度,因为随着时间的推移和地球的转动以及正确的提升线越过格林威治,并且更大更大的右提升分配给它们,任何特定的身体将向西穿过地球,它的经度将会减弱,然后在经过西半球时变为负值。

格林威治在任何特定时刻的右上升线可以通过创建经度为0°的观察者来确定,如果我正确地回想起快速参考,则要求它.sidereal_time()。所以我认为身体下方的经度可能是:

lon = body.ra - greenwich.sidereral_time()

我今天稍后会对此进行快速测试,看看是否有合理的数字出来。

答案 1 :(得分:0)

我去寻找与OP相同的答案。许多帖子“提到”PyEphem是如何走的,但没有提供实际的例子。

这是我计算subsolar点的工作示例。将所有内容映射到-180到+ 180度之间的经度。

greenwich = ephem.Observer()
greenwich.lat = "0"
greenwich.lon = "0"
greenwich.date = datetime.utcnow()
sun = ephem.Sun(greenwich)
sun.compute(greenwich.date)
sun_lon = math.degrees(sun.ra - greenwich.sidereal_time() )
if sun_lon < -180.0 :
  sun_lon = 360.0 + sun_lon 
elif sun_lon > 180.0 :
  sun_lon = sun_lon - 360.0
sun_lat = math.degrees(sun.dec)
print "Subsolar Point Sun Lon:",sun_lon, "Lat:",sun_lat

我不是PyEphem的专家,可能有更好的方法 - 但到目前为止,我的测试对我的目的有用。

P.S。是的..上面的格林威治实际上并没有设置为实际的纬度/经度...它实际上只需要0.0的经度来获得我们需要的适当的恒星时间。