Расчет времени рассвета и захода солнца с использованием 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.

Эта страница документации PyEphem содержит значительную часть из перечисленных выше, хотя я попытался как уточнить точки, которые я счел запутанными, и включить важные части этой ссылки здесь, в StackOverflow.

Ответ 3

Вы можете попытаться установить параметр horizon ниже горизонта в соответствии с различными определениями сумерек/рассвет.