Можно ли рассчитать время рассвета, сумерек и заката, используя PyEphem? Я использовал PyEphem для создания дневного и ночного времени, но я ничего не нашел на закате/сумерках/рассвете.
Расчет времени рассвета и захода солнца с использованием PyEphem
Ответ 1
Для рассвета и сумерек, см. документация pyephem относительно сумерек
Короче говоря, рассвет и сумерки выражают время, когда центр Солнца находится под определенным углом под горизонтом; угол, используемый для этого расчета, варьируется для определения "гражданских", навигационных (навигационных) и астрономических сумерек, которые используют соответственно 6, 12 и 18 градусов.
В противоположность восход солнца соответствует времени, когда край Солнца появляется (или исчезает, для заката) чуть выше/ниже горизонта (0 градусов). Следовательно, все, мирные жители, матросы и энтузиасты астрономии получают одинаковое время нарастания/установки. (см. Взлеты и настройки военно-морской обсерватории в документации pyephem).
Подводя итог, если вы правильно параметризировали pyephem.Observer
(установив его lat, long, date, time, pressure (? для высоты?) и т.д.), различные сумеречные времена ( рассвет, сумерки), а время восхода и захода солнца получается из
Observer.previous_rising()
и Observer.next_setting()
,
Посредством чего первый аргумент ephem.Sun()
и
аргумент use_center=
должен быть установлен на True
для сумеречных вычислений и
горизонт равен 0 (или 0:34, если вы учитываете преломление атмосферы) или -6, -12 или -18.
Ответ 2
Следующий script будет вычислять время восхода, захода солнца и сумерек, используя PyEphem. Комментарии должны быть адекватными, чтобы объяснить, что делает каждая часть.
import ephem
#Make an observer
fred = ephem.Observer()
#PyEphem takes and returns only UTC times. 15:00 is noon in Fredericton
fred.date = "2013-09-04 15:00:00"
#Location of Fredericton, Canada
fred.lon = str(-66.666667) #Note that lon should be in string format
fred.lat = str(45.95) #Note that lat should be in string format
#Elevation of Fredericton, Canada, in metres
fred.elev = 20
#To get U.S. Naval Astronomical Almanac values, use these settings
fred.pressure= 0
fred.horizon = '-0:34'
sunrise=fred.previous_rising(ephem.Sun()) #Sunrise
noon =fred.next_transit (ephem.Sun(), start=sunrise) #Solar noon
sunset =fred.next_setting (ephem.Sun()) #Sunset
#We relocate the horizon to get twilight times
fred.horizon = '-6' #-6=civil twilight, -12=nautical, -18=astronomical
beg_twilight=fred.previous_rising(ephem.Sun(), use_center=True) #Begin civil twilight
end_twilight=fred.next_setting (ephem.Sun(), use_center=True) #End civil twilight
Перемещение горизонта объясняет свечение, преломляющее вокруг кривизны Земли. PyEphem имеет возможность рассчитать это более точно с учетом температуры и давления, но американский астрономический альманах предпочитает игнорировать атмосферу и просто перемещать горизонт. Я имею в виду USNAA, потому что это авторитетный источник, против которого можно проверить эти виды вычислений. Вы также можете проверить ответы на сайте NOAA.
Обратите внимание, что PyEphem берет и возвращает значения в UTC время. Это означает, что вы должны конвертировать свое местное время в UTC, а затем конвертировать UTC обратно в местное время, чтобы найти ответы, которые вы, вероятно, ищете. В тот день, когда я написал этот ответ, Фредериктон, Канада, в часовом поясе ADT находился на 3 часа ниже UTC.
Для ударов, я также бросил в расчет солнечной полдень. Обратите внимание, что это дополнительный час от того, что вы ожидаете - это побочный эффект использования летнего времени.
Все это возвращает:
begin civil twilight: 2013/9/4 09:20:46
sunrise: 2013/9/4 09:51:25
noon: 2013/9/4 16:25:33
sunset: 2013/9/4 22:58:49
end civil twilight: 2013/9/4 23:29:22
Обратите внимание, что нам нужно было бы вычесть 3 часа, чтобы преобразовать их в часовой пояс ADT.
Ответ 3
Вы можете попытаться установить параметр horizon
ниже горизонта в соответствии с различными определениями сумерек/рассвет.