Astrometría en Python con PyEphem: hora de elevación y puesta de sol

A raíz de un artículo sobre Astrometría en Python con PyEphem, me dispuse a explorar las bondades que presenta este paquete (módulo, librería). En Debian lo instalé con ‘easy_install’ y pude usarlo directamente en la Python Console de QGIS. Aunque el artículo referido anteriormente es muy útil, para complementar los ejemplos de uso es aconsejable la documentación en línea de PyEphem.

El caso que se contempla a continuación es la determinación de la hora de elevación y puesta del sol para un punto determinado de la corteza terrestre. El procedimiento pasa por definir un observador, asignarle posición (un punto cerca del lago Utah en USA), fecha (21 de junio de 2010) y definir un objeto astronómico (en este caso el sol). Los métodos ‘next_rising’ y ‘next_setting’ se emplean para determinar las horas de salida y puesta de sol para el día siguiente, en formato UTC, para después transformarla en hora local.

Como por defecto la librería asume un horizonte con grado cero (‘0:00:00’), se prueba también con uno de 5 grados para observar como varían los valores según la topografía.

El código usado es el siguiente:

import ephem

#defining an observer
obs = ephem.Observer()

#defining position
long = '-112.092807'
lat = '40.135114'

obs.long = ephem.degrees(long)
obs.lat = ephem.degrees(lat)

print "long = ", obs.long, "lat = ", obs.lat

#defining date
date = '2010/6/21'

obs.date = ephem.Date(date)

#defining an astronomic object; Sun in this case
sun = ephem.Sun(obs)

r1 = obs.next_rising(sun)
s1 = obs.next_setting(sun)

print "rising sun (UTC time): ", r1
print "setting sun (UTC time): ", s1

r1_lt = ephem.Date(r1 - 6 * ephem.hour) #local time 

(y, mn, d, h, min, s) = r1_lt.tuple()

print "rising sun: (local time): {:.2f}".format( h + min/60. + s/3600. )

s1_lt = ephem.Date(s1 - 6 * ephem.hour) #local time

(y, mn, d, h, min, s) = s1_lt.tuple()

print "setting sun (local time): {:.2f}".format( h + min/60. + s/3600. )

obs.horizon = '5'

sun = ephem.Sun(obs)

r1 = obs.next_rising(sun)
s1 = obs.next_setting(sun)

print "horizon at 5 degrees"
print "rising sun (UTC time): ", r1
print "setting sun (UTC time): ", s1

r1_lt = ephem.Date(r1 - 6 * ephem.hour) #local time 

(y, mn, d, h, min, s) = r1_lt.tuple()

print "rising sun: (local time): {:.2f}".format( h + min/60. + s/3600. )

s1_lt = ephem.Date(s1 - 6 * ephem.hour) #local time

(y, mn, d, h, min, s) = s1_lt.tuple()

print "setting sun (local time): {:.2f}".format( h + min/60. + s/3600. )

y produce en la Python Console de QGIS:

>>>execfile(u'/home/zeito/pyqgis_scripts/ephem.py'.encode('UTF-8'))
long =  -112:05:34.1 lat =  40:08:06.4
rising sun (UTC time):  2010/6/21 11:58:58
setting sun (UTC time):  2010/6/21 03:01:14
rising sun: (local time): 5.98
setting sun (local time): 21.02
horizon at 5 degrees
rising sun (UTC time):  2010/6/21 12:31:48
setting sun (UTC time):  2010/6/21 02:28:24
rising sun: (local time): 6.53
setting sun (local time): 20.47

Como se puede observar, los values en tiempo local están en formato decimal por lo que pueden ser almacenados fácilmente en un ráster aprovechando, por ejemplo, los valores de dell módulo r.horizon que genera el plugin de GRASS.

Esta entrada fue publicada en Código Python, SIG, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s