2011-10-05 14 views
9

Ho una query sui risultati forniti dal modulo PyEphem relativo alle query di Observer() e gli effetti dell'elevazione. Capisco da un paio di fonti (come ad esempio http://curious.astro.cornell.edu/question.php?number=388) che l'elevazione dell'osservatore ha un effetto marcato sul tempo del tramonto. Tuttavia nel codice seguente, mi vedo accanto a nessuna differenza:Risultati per Observer() apparentemente non conteggiano gli effetti di elevazione in PyEphem

import ephem 

emphemObj = ephem.Observer() 
emphemObj.date = '2011/08/09' 
emphemObj.lat = '53.4167' 
emphemObj.long = '-3' 
emphemObj.elevation = 0 

ephemResult = ephem.Sun() 
ephemResult.compute(emphemObj) 
print "Sunset time @ 0m: " + str(emphemObj.previous_rising(ephemResult)) 

emphemObj.elevation = 10000 
ephemResult.compute(emphemObj) 
print "Sunset time @ 10000m: " + str(emphemObj.previous_rising(ephemResult)) 

ottengo l'output:

Sunset time @ 0m: 2011/8/8 04:38:34 
Sunset time @ 10000m: 2011/8/8 04:38:34 

Sono abbastanza sicuro che sto facendo qualcosa di sbagliato, piuttosto che essendo questo un bug, ma dopo aver provato un certo numero di modi diversi, temo di continuare a ottenere gli stessi risultati. Qualcuno sa cosa sto sbagliando qui?

Ho postato questo su https://launchpad.net/pyephem già, ma non ho avuto risposta. Spero di non aver frainteso fondamentalmente lo scopo della funzione di elevazione ...

+0

Se si duplica l'esempio in questo articolo collegato, all'equatore a 12.000 metri, si ottiene lo stesso risultato? Se è così, allora forse non hanno ancora implementato i problemi di elevazione. – wberry

+0

Non sono sicuro al 100% di aver provato 12.000 ma ho certamente provato altri (molto) valori più alti. Il tempo segnalato da previous_rising cambia, il che mi porta a credere che il codice di elevazione stia facendo qualcosa. Spero solo che non sia solo la contabilità della rifrazione atmosferica invece dell'effetto 'orizzonte'. – Smingos

risposta

6

Il elevation di un osservatore indica l'elevazione sopra il livello del mare della loro posizione, ad esempio l'altitudine di Flagstaff, in Arizona. Ma si presume che non solo l'osservatore e il loro telescopio o binocolo sia questa distanza sopra il livello del mare; si presume che il terreno - e quindi l'orizzonte - siano a questa altitudine. Quindi un aumento di elevation non ti dà alcun vantaggio rispetto all'orizzonte, perché l'orizzonte si sposta con te quando ti sposti in una città a più alta quota.

Dopo pochi minuti con una matita e taccuino giallo di carta, sembra che l'angolo in basso verso l'orizzonte hza è legato al raggio terrestre r e l'altezza dal suolo h come segue:

hza = - acos(r/(h + r)) 

Quindi, sulla scia vostro esempio di cui sopra:

import math 
height = 10000 
hza = - math.acos(ephem.earth_radius/(height + ephem.earth_radius)) 
emphemObj.horizon = hza 
print "Sunrise time @ 10000m: " + str(emphemObj.previous_rising(ephemResult)) 

ottengo l'output:

Sunrise time @ 10000m: 2011/8/8 04:08:18 

(Si noti che "alba" va con previous_rising() e "tramonto" va con next_setting()!)

+0

Grazie Brandon! Ho passato così tanto tempo a cercare di capire il problema, non mi ero fermato a pensare se fosse effettivamente un problema. Ha senso quando ci penso ... Comunque, il calcolo di cui sopra sarà senza dubbio utile per me quando c'è una prominenza locale significativa. – Smingos

+0

Oh, cara, ho appena notato che avevo etichettato il precedente_rising come ora del tramonto! :-) Sono contento che non ce l'abbia fatta nel codice vero e proprio! – Smingos