Calcolo del tempo di alba / tramonto considerando la topografia


11

Voglio calcolare i tempi di alba e tramonto per un anno intero per una data località tenendo conto della topografia. Forse alba / tramonto non sono i termini giusti, ma quello che voglio è l'ora in cui il sole sorge sopra l'orizzonte e l'ora in cui scende sotto l'orizzonte, tenendo conto di eventuali colline.

Sto usando QGIS o GRASS. Posso usare r.horizon per generare l'angolo dell'orizzonte da un punto specifico, ma non sono sicuro di come arrivare da lì agli orari di alba / tramonto.


Sembra un punto di vista inverso ... a quale angolo l'osservatore (sole) può vedere la posizione, quindi usarla come offset rispetto all'alba / ai tempi stabiliti standard. Questa è un'ottima domanda.
Michael Stimson,

Risposte:


2

Ho installato il pacchetto ephem python nel mio sistema GNU / Debian Linux e, potrei usarlo nella console Python di QGIS. Ho creato un osservatore per un punto vicino allo Utah Lake (USA) ed è stato calcolato il sorgere e il tramonto del sole per il giorno "2010/6/21". La sceneggiatura era:

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

Dopo l'esecuzione sulla console Python di QGIS, il risultato è stato:

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

Questa è la risposta

Nota di modifica :

Definire un nuovo orizzonte (ad esempio 5 gradi):

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

il risultato è:

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

Grazie per questo, sembra un pezzo del puzzle. Sembra che potrei usare PyEphem per calcolare l'azimut e gli angoli di altitudine del sole in un determinato momento? Come posso quindi usarlo per trovare l'ora in cui il sole sorge sopra / tramonta sotto l'orizzonte? (Tenendo conto della topografia, suppongo che i tempi di tramonto / alba che il pacchetto ephem sta producendo assumano una terra perfettamente liscia.)
Stu,

2
Forse una combinazione di r.horizon e PyEphem avrebbe funzionato? Qualche idea su come usare i due insieme? GRASS ha un modulo r.sun, che posso usare per calcolare il numero di ore di luce solare diretta in una data posizione in un dato giorno, tenendo conto della topografia. Questo sembra quasi fare quello che voglio, ma non sembra emettere il tempo effettivo di inizio / fine della luce solare diretta.
Stu,

Promettente e utile, ma non tiene conto della topografia. L'orizzonte visibile dall'interno di una valle non è lo stesso dell'orizzonte vero (non oscurato).
alphabetasoup,

@RichardLaw È possibile impostare la topografia con il metodo "orizzonte".
xunilk,

1
Sembra che il metodo dell'orizzonte stia semplicemente impostando un singolo angolo dell'orizzonte per l'intero orizzonte? Se prendiamo in considerazione la topografia, l'orizzonte non è perfettamente piatto. Quindi, l'angolo rispetto all'orizzonte sarà diverso per ogni diverso azimut che viene calcolato. Il modulo r.horizon emetterà l'angolo all'orizzonte per ogni diverso azimut. Non sarà un singolo numero (ad es. 5 gradi), ma piuttosto un set di dati di una serie di elevazioni per tutti gli azimut (elevazione di 5 gradi a 180 gradi di azimut, elevazione di 6 gradi a 185 gradi di azimut, elevazione di 7 gradi a 190 gradi azimutali, ecc.)
Stu,

1

Puoi usare una libreria come PyEphem per trovare, per una data posizione, elevazione, giorno, tempo (e) (e pianeta;) gli angoli azimut e altitudine del sole.


Puoi suggerire un'implementazione di questo? La domanda originale non menziona implicitamente Python, ma l'OP potrebbe essere in grado di prenderlo se l'esempio è abbastanza semplice.
Michael Stimson,

0

Puoi usare un po 'di pitone per farlo, ma prima devi generare un dizionario o una tabella, dalla posizione dei tuoi osservatori, dell'angolo rispetto all'orizzonte del mondo reale. Questo dovrebbe essere a dire intervalli di 1 grado con 0 = nord vero e per ogni grado dando l'angolo dell'orizzonte. Questo può venire dal tuo r.horizon.

È quindi possibile, utilizzare pyephemper a) creare una observeralla latitudine, longitudine e altitudine del proprio osservatore e per ogni minuto di un determinato giorno utilizzarlo per calcolare le posizioni apparenti dei soli, questi sarebbero dati come quattro valori, ra, dec, alt e az.

Quindi per ogni valore temporale puoi confrontare l'alt con il valore della tabella di elevazione in quell'azimut e quando l'alt è maggiore del valore nella tabella sarai in grado di vedere il sole.

È anche possibile che tu possa trovare alcuni punti in cui, in un dato giorno, il sole sorge in una valle e poi passa fuori dal sito dietro una montagna per poi riapparire sopra o dall'altra parte della montagna.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.