Учитывая широту и долготу, как я могу определить дневной свет?

Я пишу программу на Python, которая должна определить, наступает он после восхода солнца или нет, учитывая только текущее время в формате UTC, а также целевую широту и долготу. Я постоянно вижу, как приложения делают такие вещи, но я понятия не имею, как это делается. Любые идеи?


person Daniel Quinn    schedule 12.09.2011    source источник
comment
mathforum.org/library/drmath/view/56478.html   -  person Andrey Agibalov    schedule 12.09.2011
comment
Это была первая ссылка, которую я нашел, но этого было недостаточно для кого-то с ограниченным опытом в области вычислений, вроде меня.   -  person Daniel Quinn    schedule 12.09.2011
comment
Конечно, зависит и от даты.   -  person Tom Zych    schedule 07.11.2015
comment
связанные: Расчет времени рассвета и заката с помощью PyEphem   -  person jfs    schedule 07.11.2015
comment
связанные: Расчет восхода / захода солнца   -  person jfs    schedule 07.11.2015


Ответы (4)


Вот чья-то реализация расчета восхода / захода солнца в Python: http://michelanders.blogspot.com/2010/12/calulating-sunrise-and-sunset-in-python.html

person Acorn    schedule 12.09.2011
comment
Именно то, что мне нужно! Большое спасибо. - person Daniel Quinn; 12.09.2011

Полная схема алгоритма находится здесь

На самом деле особо нечего добавить. 10 пунктов в процитированном документе разбивают его на простые для воспроизведения шаги, которые действительно могут быть реализованы на любом языке.

person nimbusgb    schedule 12.09.2011

Просто сделав быстрый поиск в Google, я нашел это. Расчеты в NOAA Калькуляторы восхода / захода солнца и положения Солнца основаны на уравнениях из астрономических алгоритмов Жана Миуса. Было подтверждено, что результаты восхода и захода солнца являются точными с точностью до минуты для местоположений между +/- 72 ° широты и в пределах 10 минут за пределами этих широт.

Подробное объяснение деталей расчета можно найти на этой странице, а также здесь.

person smulholland2    schedule 12.09.2011
comment
Одинарные ссылки могут легко поменяться. Вы должны хотя бы дать краткое изложение ссылки в своем ответе. - person Joachim Sauer; 12.09.2011
comment
Плакаты также должны хотя бы запускать свои вопросы через поисковую систему. Я пытался передать это требование как можно более полезным образом. - person smulholland2; 12.09.2011
comment
Если вы думаете, что вопрос плохой, то плохой ответ - это не правильный ответ. - person Joachim Sauer; 12.09.2011
comment
На самом деле, я наткнулся на эту ссылку в собственном поиске, и вы правы, это именно то, что мне нужно, только в Javascript. Я надеялся, что существует модуль Python для чего-то вроде этого, вместо того, чтобы переписывать его на основе этого. - person Daniel Quinn; 12.09.2011

Вам нужно что-то, что просто работает ™? Используйте превосходный язык. И ты знаешь, что это всегда сработает. Как можно доверять 122 направлениям передовой астрофизики? Вы не можете. Но вы всегда можете доверять PHP.

>>> def is_day(lat, lon): # optinally adjust zenith (currently 96) at the end of the line
...   return subprocess.check_output(["php","-r","""date_default_timezone_set("GMT");\n$a=date_sunrise(time(),SUNFUNCS_RET_DOUBLE,{0},{1},{2},0);\n$b=date_sunset(time(),SUNFUNCS_RET_DOUBLE,{0},{1},{2},0);\n$t=date("H")+date("i")/60+date("s")/3600;\necho($a<$b?($t>$a&&$t<$b):($t>$a||$t<$b))?"day":"night";""".format(lat,lon,96)])=="day"
...   #                                                                                                                                                                                                                                                                                                                             ^^ optionally adjust zenith here
... 
>>> is_day(-33,151) # Sydney
True
>>> is_day(0,0) # Some hundred km off the coast of Africa
False
>>> __import__("datetime").datetime.utcnow()
datetime.datetime(2012, 2, 10, 22, 29, 30, 365019)
>>> 
person Community    schedule 10.02.2012