Я работаю над алгоритмом, который определяет текущий азимут и высоту Солнца, в данном месте, дате и времени. Мне это нужно для моего проекта автоматической двухосной калибровки солнечной энергии.
Я использую библиотеку Astropy.
Вот мой код:
from astropy.coordinates import get_sun, AltAz, EarthLocation
import astropy.coordinates as coord
from astropy.time import Time
import astropy.units as u
import time
#location set to a city of Kielce, Poland
loc = coord.EarthLocation(lon=20.628569 * u.deg, lat=50.866077 * u.deg)
my_time = Time.now()
sun = coord.get_sun(my_time)
print(sun)
print("Location:", loc)
print("Time/date: ", my_time)
print("--------DEGREES--------")
while True:
#line below causes wrong results
my_time = my_time + 15 * u.min
#line below works fine and displays correct results
#my_time = Time.now()
sun = coord.get_sun(my_time)
altaz = coord.AltAz(location=loc, obstime=my_time)
current_altitude = get_sun(my_time).transform_to(altaz).alt
current_azimuth = get_sun(my_time).transform_to(altaz).az
geo = loc.geodetic
print("Time: ", my_time)
print("Loc. lat.: ", geo.lat)
print("Loc. lon.: ", geo.lon)
print("Sun alt.: ", current_altitude.degree)
print("Sun az.: ", current_azimuth.degree)
print("---------------------------------------------------")
input()
Когда яиспользуя ...
my_time = Time.now()
Алгоритм работает нормально. Я тестировал результаты в течение последних 48 часов, и это всегда давало правильные ответы. Я использовал веб-сайт SunCalc.org , чтобы проверить, работает ли он правильно.
Что мне нужно сделать, это определить положение солнца на каждые 15 минут, начиная с текущей даты и часа, чтобыхранить его в каком-то массиве. Но я не могу этого сделать, поскольку увеличение времени приводит к неверным вычислениям. Вот пример неправильных результатов (вывод оболочки Python):
---------------------------------------------------
Time: 2019-10-23 15:08:33.073504
Loc. lat.: 50d51m57.8772s
Loc. lon.: 20d37m42.8484s
Sun alt.: 2.3219705846241796
Sun az.: 248.6310211206791
---------------------------------------------------
Time: 2019-10-23 15:23:33.073504
Loc. lat.: 50d51m57.8772s
Loc. lon.: 20d37m42.8484s
Sun alt.: 0.09371196329584214
Sun az.: 251.5553099977351
---------------------------------------------------
Time: 2019-10-23 15:38:33.073504
Loc. lat.: 50d51m57.8772s
Loc. lon.: 20d37m42.8484s
Sun alt.: -2.172539131558753
Sun az.: 254.45000928004316
---------------------------------------------------
Я на 100% уверен, что это неправильно, так как закат должен произойти в 17:30. Я начал использовать Python вчера с небольшим опытом программирования (немного на C и C ++), поэтому, пожалуйста, поймите.
Спасибо!