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, вообще не выполняет автоматического преобразования, но требует, чтобы значения были указаны в явном виде в радианах или градусах!

Другие вопросы по тегам