我在使用pyEphem为我的位置获得准确的日出和日落时间时遇到了一些困难。我已经阅读了几个问题和答案,并查看了文档,但我仍然不完全清楚我做错了什么。这是代码:
import datetime as dt
import ephem as ep
date = dt.datetime.now().strftime("%Y/%m/%d 00:00:00")
lat, lon = [<redacted>, -1.4147]
# Use lat and lon to create ephem observer instance and update with given
# values
my_location = ep.Observer()
my_location.lat = lat
my_location.lon = lon
my_location.date = date
# Get sunrise of the current day
sunrise = my_location.next_rising(ep.Sun())
sunset = my_location.next_setting(ep.Sun())
print "Given date: {0}".format(date)
print "Detected coordinates: {0}, {1}".format(lat, lon)
print "Sunrise at {0}".format(sunrise)
print " Sunset at {0}".format(sunset)
产生此输出:
Given date: 2015/01/31 00:00:00
Detected coordinates: <redacted>, -1.4147
Sunrise at 2015/1/31 12:28:02
Sunset at 2015/1/31 22:47:39
我所期待的是在午夜(今天早上)和之后的第一个日落之后获得第一个日出的时间。现在我碰巧知道太阳在今天12:30之前出现了(我在光天化日之下上午9:30走在路上)而且我不知道自从我知道我的时区后就有了UTC的偏移量。
我错过了什么?
答案 0 :(得分:2)
如果你提供经度和纬度作为原始浮点数,那么PyEphem假设你已经完成了将它们转换为弧度的工作。 1.4147弧度的值几乎是全球的八分之一。如果你想让PyEphem为你转换度数,请尝试使用字符串来表示它们,而不是PyEphem将被强制转换:
lat, lon = [<redacted>, '-1.4147']
您可以通过将其打印出来来检查是否正确设置了值:
print my_location.lat
print my_location.lon
要求Observer
对象打印出其值,这是查明它是否已正确设置的最佳方法。
你会注意到新的Skyfield图书馆,从PyEphem的错误中学习,根本不进行自动转换,但要求将值指定为显式弧度或度数!