2010-11-02 6 views
7

Ho visto gli esempi qui usando Ephem per calcolare l'alba e il tramonto, e farlo funzionare alla grande.Calcola "Solar Noon" usando ephem, traducendo in ora locale

I problemi si verificano quando provo a calcolare il punto medio tra queste due volte. Ecco quello che ho:

import datetime 
import ephem 

o = ephem.Observer() 
o.lat, o.long, o.date = '37.0625', '-95.677068', datetime.datetime.utcnow() 
sun = ephem.Sun(o) 
print "sunrise:", o.previous_rising(sun), "UTC" 
print "sunset:",o.next_setting(sun), "UTC" 
print "noon:",datetime.timedelta((o.next_setting(sun)-o.previous_rising(sun))/2) 

ottengo:

alba: 2010/11/02 12:47:40 UTC
tramonto: 2010/11/02 23:24:25 UTC
mezzogiorno : 5: 18: 22.679044

Ecco dove sono bloccato. Sono un principiante pitone e francamente non un gran programmatore in generale.

Qualsiasi suggerimento sarebbe il benvenuto!

risposta

7

mezzogiorno solare è non la media di alba e tramonto (vedere equation of time per la spiegazione). Il pacchetto ha ephemmethods for getting transit times che si dovrebbe usare invece:

>>> import ephem 
>>> o = ephem.Observer() 
>>> o.lat, o.long = '37.0625', '-95.677068' 
>>> sun = ephem.Sun() 
>>> sunrise = o.previous_rising(sun, start=ephem.now()) 
>>> noon = o.next_transit(sun, start=sunrise) 
>>> sunset = o.next_setting(sun, start=noon) 
>>> noon 
2010/11/6 18:06:21 
>>> ephem.date((sunrise + sunset)/2) 
2010/11/6 18:06:08 

noti che oggi a mezzogiorno è di 13 secondi più tardi (nella posizione) rispetto alla media di alba e tramonto.

(La riga di codice ephem.date((sunrise + sunset)/2) mostra come si potrebbe facilmente manipolare le date nel pacchetto ephem, se fosse la cosa giusta da fare.)

+0

Il calcolo del sorgere del sole non "funziona" se sei abbastanza lontano a nord (o sud) che il sole non è salito oggi ... (ad esempio oggi è l'8 luglio ., ma l'ultima alba era il 17 maggio :-) – thebjorn

+0

Sì, vedo il problema: 'ephem.AlwaysUpError: 'Sun' è ancora sopra l'orizzonte al 2011/7/8 00: 04: 58' –

0

La media di due numeri è la somma dei numeri divisa per due, non dividendo la lunghezza della luce del giorno per due. Che potrebbe anche funzionare se si aggiunge che al o.previous_rising (sole), ma che dovrebbe essere lo stesso di prendere diretto medio (non dovrebbe importare che siamo oggetti datetime averageing)

0

Mi rendo conto che questo è stato risposto molto tempo fa. Ma dalla risposta per coloro che possono usare qualsiasi codice o non capiscono abbastanza Python, c'è la semplice spiegazione per lo scopo dell'Equazione del Tempo. Il tuo transito solare medio (mezzogiorno) si verifica nella tua posizione longitudinale. Ciò significa che conoscendo la tua longitudine puoi trovare il tuo transito solare medio dividendo la tua longitudine di 15.0 e sottraendo quel valore da 12, che sarà un risultato in GMT o UTC se preferisci, per dare ore al decimale. Il tuo vero transito solare è il risultato della sottrazione dell'equazione del tempo dalla media. Normalmente dovresti comunque calcolare questo per ottenere gli orari di alba e tramonto, come mostrato nella formula di wikipedia. Ma grazie per le informazioni sul pacchetto Python dato che ho un po 'di problemi con il pacchetto sunpy. C'è un ottimo programma su bitbucket qui https://bitbucket.org/cmcqueen1975/sundials/wiki/Home