Рассчитайте «Солнечный полдень» с помощью эфема, переведя по местному времени - PullRequest
8 голосов
/ 03 ноября 2010

Я посмотрел здесь примеры использования ephem для вычисления восхода и захода солнца, и это прекрасно работает.

У меня возникают проблемы, когда я пытаюсь вычислить среднюю точку между этими двумя разами.Вот что у меня есть:

import datetime
import ephem

o = ephem.Observer()
o.lat, o.long, o.date = '37.0625', '-95.677068', datetime.datetime.utcnow()
sun = ephem.Sun(o)
print "sunrise:", o.previous_rising(sun), "UTC"
print "sunset:",o.next_setting(sun), "UTC"
print "noon:",datetime.timedelta((o.next_setting(sun)-o.previous_rising(sun))/2)

Я получаю:

восход: 2010/11/2 12:47:40 UTC
закат: 2010/11/2 23:24:25 UTC
полдень: 5: 18: 22.679044

Вот где я застрял.Я новичок в Python и, честно говоря, не очень программист в целом.

Любые предложения приветствуются!

Ответы [ 3 ]

8 голосов
/ 06 ноября 2010

Солнечный полдень не среднее значение восхода и захода солнца (см. уравнение времени для объяснения).В пакете ephem есть методы для получения времени транзита , которые вы должны использовать вместо этого:

>>> import ephem
>>> o = ephem.Observer()
>>> o.lat, o.long = '37.0625', '-95.677068'
>>> sun = ephem.Sun()
>>> sunrise = o.previous_rising(sun, start=ephem.now())
>>> noon = o.next_transit(sun, start=sunrise)
>>> sunset = o.next_setting(sun, start=noon)
>>> noon
2010/11/6 18:06:21
>>> ephem.date((sunrise + sunset) / 2)
2010/11/6 18:06:08

Обратите внимание, что сегодня полдень на 13 секунд позже (в вашем местоположении), чем среднее значение восхода солнцаи закат.

(Строка кода ephem.date((sunrise + sunset) / 2) показывает, как вы могли бы легко манипулировать датами в пакете ephem, если бы это было правильно.)

0 голосов
/ 29 апреля 2013

Я понимаю, что на это ответили давно. Но из ответа для тех, кто может использовать любой код или не совсем понимает Python, есть простое объяснение для целей уравнения времени. Ваш средний солнечный транзит (полдень) происходит в вашем продольном местоположении. Это означает, что, зная вашу долготу, вы можете найти свой средний солнечный транзит, просто поделив свою долготу на 15,0 и вычтя это значение из 12, что будет результатом в GMT или UTC, если вы предпочитаете, чтобы дать часы с десятичным временем. Ваш истинный солнечный транзит является результатом вычитания уравнения времени из среднего значения. Обычно вам необходимо вычислить это в любом случае, чтобы получить время восхода и захода солнца, как показано в формуле Википедии. Но спасибо за информацию о пакете Python, так как у меня есть небольшие проблемы с пакетом Sunpy. На bitbucket есть отличная программа https://bitbucket.org/cmcqueen1975/sundials/wiki/Home

0 голосов
/ 03 ноября 2010

Среднее из двух чисел - это сумма чисел, деленная на два, а не деления длины дневного света на два. Это также может сработать, если вы добавите это к o.previous_rising (sun), но это должно быть то же самое, что и прямое среднее (не должно иметь значения, что мы усредняем объекты datetime)

...