执行此代码片段:
import ephem
oma=ephem.Observer()
oma.lat='50.7975189'
oma.lon='4.3579155'
oma.elevation=114.43
oma.epoch=ephem.now()
sun=ephem.Sun(oma)
print "object transit time: ",sun.transit_time
print "observer next transit time: ", oma.next_transit(sun)
这给出了以下输出:
object transit time: 2012/9/5 11:41:03
observer next transit time: 2012/9/5 11:41:06
因此,Sun对象的时间与为Sun观察者计算的时间之间存在3秒的差异。哪两个最可靠?如果我们将这些值与本地计算值进行比较,则观察者的下一个传输时间最接近。
如果我们对火星进行相同的计算:
import ephem
oma=ephem.Observer()
oma.lat='50.7975189'
oma.lon='4.3579155'
oma.elevation=114.43
oma.epoch=ephem.now()
mars=ephem.Mars(oma)
print "object transit time: ",mars.transit_time
print "observer next transit time: ", oma.next_transit(mars)
这给出了以下输出:
object transit time: 2012/9/5 15:05:32
observer next transit time: 2012/9/5 15:05:32
所以没有区别。
致以最诚挚的问候,
大理石
答案 0 :(得分:1)
要确定哪个函数最准确,只需将它们提供的两次进入观察者的compute()
函数,并在方位角恰好为180°时查看最接近真实运输时刻的土地:
import ephem
oma = ephem.Observer()
oma.lat, oma.lon = '50.7975189', '4.3579155'
oma.elevation = 114.43
sun = ephem.Sun()
for t in ('2012/9/5 11:41:03',
'2012/9/5 11:41:06'):
oma.date = t
sun.compute(oma)
print 'azimuth at', t, 'was', sun.az
此脚本的输出显示较新的11:41:06
函数的next_transit()
时间可提供更准确的结果:
azimuth at 2012/9/5 11:41:03 was 179:58:45.4
azimuth at 2012/9/5 11:41:06 was 179:59:49.5
旧.transit_time
属性的准确度较低是当前PyEphem文档建议始终使用next_transit()
进行所有传输计算的原因。 (这意味着除了地球卫星之外的所有东西,.transit_time
无论如何都会切换到不同的算法。)
事实上,目前的文件甚至没有提到要求.next_transit
非地球卫星甚至可能,并且该属性仅用于古老的向后兼容性。
两种功能都以相同的方式工作:通过猜测时间,检查当时的方位角,然后一遍又一遍地改进他们的猜测直到他们喜欢答案。最新的next_transit()
函数可以做得更好,所以你应该使用它。
两个函数给你相同的火星答案的原因只是巧合 - 如果你将在9月5日以后的其他日期对火星运行功能,你会看到不同的答案出来。这完全取决于函数进行一系列猜测的顺序,以及最后的猜测是否恰好靠近在一起或相隔很远。并且,我敢打赌他们的答案即使在9月5日也没有真正匹配 - 他们只是匹配到第二,这就是所有显示的!如果您通过打印每个答案的repr(float(…))
来显示这两个答案的全精度Julian日期,那么您无疑会发现在小数点以下的分歧方式超出了一秒的分辨率能够显示的你。
这是否涵盖了您的所有疑虑?
答案 1 :(得分:0)
这是因为transit_time不适合观察者。
我改进并更改了您的代码:
from ephem import Observer, Sun, now
oma=Observer()
oma.lat='50.7975189'
oma.lon='40.3579155'
oma.elevation=114.43
oma.epoch=now()
sun=Sun(oma)
print "object transit time: ",sun.transit_time
print "observer next transit time: ", oma.next_transit(sun)
这给出了:
object transit time: 2012/9/6 09:16:48
observer next transit time: 2012/9/7 09:16:27
现在,为什么有一天差异(或-11秒)将lon从4改为40? 什么单位是那些lon和lat在ephem中表达的?我想这不是这个问题的一部分。