2017-12-05 6 views

Antwort

4

Es ist ein interessantes Problem und ich denke, ich habe eine gute Antwort - nun, zumindest Startpunkte.

Schauen Sie sich die tolle astropy package. Ich glaube, dass Sie die coordinates module verwenden müssen.

Etwas in dieser Richtung:

import astropy.coordinates as coord 
from astropy.time import Time 
import astropy.units as u 


loc = coord.EarthLocation(lon=0.1 * u.deg, 
          lat=51.5 * u.deg) 
now = Time.now() 

altaz = coord.AltAz(location=loc, obstime=now) 
sun = coord.get_sun(now) 

print(sun.transform_to(altaz).alt) 

Hier bekommen wir den Winkel der Sonne über dem Horizont für die 0.1 Grad Länge und Breite 51.5 Lage an der aktuellen Zeit.

FYI, .zen würde Ihnen den Zenitwinkel geben.

+0

Warum verwenden sie ihre eigene "Time" -Klasse anstelle der Standard "Datetime"? –

+0

@MarkRansom Ich denke, die 'AltAz' erwartet eine' Time() 'Instanz, aber nicht sicher - immer noch die Kräfte des Pakets zu erkunden. Vielen Dank. – alecxe

+0

Vielen Dank für Ihre schnelle Antwort Alecxe. Ich hoffe, dass dies für mich hilfreich sein wird. Nochmals vielen Dank –

3

@ alecxe Antwort ist groß, aber ich dachte, dass ich eine leichte Modifikation hinzufügen würde, die zu dem, was die ursprünglichen Frage etwas näher ist fragt (der zenithal Winkel bei einer bestimmten Zeit)

from astropy.coordinates import get_sun, AltAz, EarthLocation 
from astropy.time import Time 

sun_time = Time('2017-12-6 17:00') #UTC time 
loc = EarthLocation.of_address('Baltimore, MD') # anything the google geocoding API resolves 
altaz = AltAz(obstime=sun_time, location=loc) 

zen_ang = get_sun(sun_time).transform_to(altaz).zen 

zen_ang ist dann ein Angle Objekt - sehen Sie mehr über diese in the docs, aber im Grunde arbeiten sie wie numpy Skalare mit zugehörigen Einheiten von "Grad".

Verwandte Themen