2010-11-02 14 views
7

He visto los ejemplos aquí usando ephem para calcular el amanecer y el ocaso, y tengo ese funcionamiento excelente.Calcula "Mediodía solar" usando efem, traduciendo a la hora local

Me meto en problemas cuando trato de calcular el punto medio entre esas dos veces. Aquí es lo que tengo:

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) 

me sale:

amanecer: 11/02/2010 12:47:40 GMT
la puesta del sol: 11/02/2010 23:24:25 GMT
mediodía : 5: 18: 22.679044

Ahí es donde estoy atascado. Soy un principiante de Python y francamente no soy un programador en general.

¡Cualquier sugerencia sería bienvenida!

Respuesta

7

mediodía solar es no la media de amanecer y atardecer (ver equation of time para la explicación). El paquete tiene ephemmethods for getting transit times que se debe utilizar en su lugar:

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

Tenga en cuenta que el mediodía de hoy es 13 segundos más tarde (a su ubicación) que la media de la salida y la puesta del sol.

(La línea de código ephem.date((sunrise + sunset)/2) muestra cómo se puede manipular fácilmente las fechas en el paquete ephem, si se tratara de lo que hay que hacer.)

+0

Su cálculo de la salida del sol no "trabajo" si eres lo suficientemente al norte (o sur) que el sol no se levantó hoy ... (por ejemplo, hoy en día es de 8 de julio de ., pero el último amanecer fue el 17 de mayo :-) – thebjorn

+0

Sí, veo el problema: 'ephem.AlwaysUpError: 'Sun' aún está por encima del horizonte en 2011/7/8 00: 04: 58' –

0

El promedio de dos números es la suma de los números divididos entre dos, no dividiendo la longitud de la luz del día por dos. Eso también podría funcionar si se agrega que a la o.previous_rising (sol), pero que debe ser el mismo que tomar media directa (no debería importar que somos objetos de fecha y hora averageing)

0

Soy consciente de que este fue respondida hace mucho tiempo. Pero a partir de la respuesta para aquellos que pueden usar cualquier código o no entienden muy bien Python, existe la explicación simple para el propósito de la Ecuación del Tiempo. Su tránsito solar medio (mediodía) ocurre en su ubicación longitudinal. Esto significa que al conocer su longitud puede encontrar su tránsito solar medio simplemente dividiendo su longitud por 15.0 y restando ese valor de 12, lo que dará como resultado GMT o UTC si lo prefiere, para dar horas de tiempo decimal. Tu verdadero tránsito solar es el resultado de restar la ecuación de tiempo de la media. Normalmente, deberá calcular esto de todos modos para obtener los horarios de salida y puesta del sol como se muestra en la fórmula de wikipedia. Pero gracias por la información del paquete de Python ya que estoy teniendo un problema con el paquete sunpy. Hay un gran programa de bitbucket aquí https://bitbucket.org/cmcqueen1975/sundials/wiki/Home