PyEphem неправильные времена восхода и захода солнца (питон)
У меня возникли сложности с использованием 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, так как я знаю свой часовой пояс.
Что мне не хватает?
1 ответ
Если вы указываете долготу и широту в виде необработанных чисел с плавающей точкой, то PyEphem предполагает, что вы уже выполнили работу по преобразованию их в радианы. Значение 1,4147 радиан - это почти восьмая часть земного шара. Если вы хотите, чтобы PyEphem конвертировал градусы для вас, попробуйте использовать строку для их представления, вместо этого PyEphem будет вынужден конвертировать:
lat, lon = [<redacted>, '-1.4147']
Вы можете проверить правильность установки значения, распечатав его обратно:
print my_location.lat
print my_location.lon
Спрашивая Observer
объект для печати его значений - лучший способ выяснить, правильно ли он настроен.
Вы заметите, что новая библиотека Skyfield, учащаяся здесь из-за ошибки PyEphem, вообще не выполняет автоматического преобразования, но требует, чтобы значения были указаны в явном виде в радианах или градусах!