Cálculo de la hora del amanecer / atardecer considerando la topografía

11

Quiero calcular las horas de salida y puesta del sol durante un año completo para una ubicación dada teniendo en cuenta la topografía. Quizás amanecer / atardecer no son los términos correctos, pero lo que quiero es el momento en que el sol sale por encima del horizonte, y el momento en que cae por debajo del horizonte, teniendo en cuenta las colinas.

Estoy usando QGIS o GRASS. Puedo usar r.horizon para generar el ángulo del horizonte desde un punto específico, pero no estoy seguro de cómo llegar desde allí hasta las horas de salida / puesta del sol.

Stu
fuente
Suena como una cuenca visual inversa ... en qué ángulo puede ver la ubicación el observador (sol) y luego usarlo como un desplazamiento de las horas estándar de salida / puesta del sol. Esa es una muy buena pregunta.
Michael Stimson

Respuestas:

2

Instalé el paquete ephem python en mi sistema GNU / Debian Linux y pude usarlo en la consola Python de QGIS. Creé un observador para un punto cerca del lago Utah (EE. UU.) Y se calculó la salida y puesta del sol para el día '2010/6/21'. El guión fue:

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

Después de ejecutar en la Consola Python de QGIS, el resultado fue:

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

Esta es la respuesta.

Nota de edición :

Definición de un nuevo horizonte (por ejemplo, 5 grados):

.
.
.
obs.horizon = '5'

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

el resultado es:

>>>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 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
xunilk
fuente
Gracias por esto, parece una pieza del rompecabezas. Parece que podría usar PyEphem para calcular los ángulos de acimut y altitud del sol en un momento determinado. ¿Cómo puedo usar eso para encontrar el momento en que el sol sale por encima / se pone por debajo del horizonte? (Teniendo en cuenta la topografía, supongo que las horas de puesta de sol / salida del sol que emite el paquete ephem están asumiendo una tierra perfectamente lisa)
Stu
2
¿Quizás alguna combinación de r.horizon y PyEphem funcionaría? ¿Alguna idea sobre cómo usar los dos juntos? GRASS tiene un módulo r.sun, que puedo usar para calcular la cantidad de horas de luz solar directa en un lugar determinado en un día determinado, teniendo en cuenta la topografía. Eso parece hacer casi lo que quiero, pero no parece emitir el tiempo real en que comienza / se detiene la luz solar directa.
Stu
Prometedor y útil, pero no tiene en cuenta la topografía. El horizonte visible desde el interior de un valle no es el mismo que el horizonte verdadero (despejado).
alphabetasoup
@RichardLaw Puede configurar la topografía con el método 'horizonte'.
xunilk
1
¿Parece que el método del horizonte solo establece un ángulo de horizonte único para todo el horizonte? Si tomamos en cuenta la topografía, el horizonte no es perfectamente plano. Entonces, el ángulo hacia el horizonte será diferente para cada azimut diferente que se calcula. El módulo r.horizon emitirá el ángulo hacia el horizonte para cada azimut diferente. No será un solo número (por ejemplo, 5 grados), sino un conjunto de datos de una serie de elevaciones para todos los acimutes (5 grados de elevación a 180 grados de acimut, 6 grados de elevación a 185 grados de acimut, 7 grados de elevación a 190 grados azimut, etc.)
Stu
1

Podría usar una biblioteca como PyEphem para encontrar, para una ubicación, elevación, día, hora (s) (y planeta) determinados, los ángulos azimutal y de altitud del sol.

usuario71991
fuente
¿Puedes sugerir una implementación de esto? La pregunta original no menciona a Python implícitamente, pero el OP podría ser capaz de retomarlo si el ejemplo es lo suficientemente simple.
Michael Stimson el
0

Puede usar un poco de python para hacer esto, pero primero necesita generar un diccionario o una tabla, desde la posición de sus observadores, del ángulo al horizonte del mundo real. Esto tendría que ser a intervalos de 1 grado con 0 = norte verdadero y para cada grado dando el ángulo del horizonte. Esto puede provenir de su r.horizon.

A continuación, puede utilizar pyephema) crear una observera la latitud, longitud y altitud de su observador y, por cada minuto de un día determinado, utilizarla para calcular las posiciones aparentes de los soles, estos se darían como cuatro valores, ra, dec, alt y az.

Luego, para cada valor de tiempo, puede comparar la alt con el valor de la tabla de elevación en ese acimut y cuando la alt sea mayor que el valor en la tabla, podrá ver el sol.

Incluso es posible que pueda encontrar algunos puntos donde, en un día determinado, el sol sale en un valle y luego pasa fuera del sitio detrás de una montaña y luego vuelve a aparecer o al otro lado de la montaña.

Steve Barnes
fuente