brandon-rhodes / pyephem

Scientific-grade astronomy routines for Python
Other
783 stars 121 forks source link

Endless computation of previous_rising/previous_setting for Sun at elevation #253

Open MADZEROPIE opened 1 year ago

MADZEROPIE commented 1 year ago

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.

drbitboy commented 1 year ago

Although it will not fix the library problem, simpler logic would be return observer.<sun below horizon>()

MADZEROPIE commented 1 year ago

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...

drbitboy commented 1 year ago

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.