pyephem
pyephem copied to clipboard
Endless computation of previous_rising/previous_setting for Sun at elevation
Parametrs: 2015/6/27 22:57:57.947291 65.7959 -123.7879
def nightMask(day, time, lat, lon):
sun_height = 90000
observer = ephem.Observer()
observer.lat, observer.lon, observer.elevation = str(lat), str(lon), sun_height
observer.date = day + ' ' + time
# print(day, time, lat, lon)
try:
if observer.previous_rising(ephem.Sun()).datetime() > observer.previous_setting(ephem.Sun()).datetime():
return False
else:
return True
except:
return None
Ephem version: 4.1.3. UPD: Updated to 4.1.4, still not working.
- northern hemisphere
- 0.8° latitude from the land of the midnight sun,
- 90km(?) elevation,
- six days after the summer solstice.
Although it will not fix the library problem, simpler logic would be return observer.<sun below horizon>()
Yeah. I've used something like this before
sun = ephem.Sun()
sun.compute(observer)
return sun.alt < 0
But I'm intrested in time after sunset. So I have to use observer.previous_rising()
anyway...
that function nightMask(...) returns True if the time arguments represent a time between the previous sunset, and that previous sunset's subsequent rising, which is essentially the same information that sun.alt < 0 returns. there is no difference unless there is an issue with the sun not being a point; even if that is an issue, sun.alt could be compared to a small negative number, e.g. half the angular width of the sun, to get the same information.