Je suis en train de calculer l'azimut du soleil levant et couchant avec le code suivant:Module Python Ephem pas Conscient que la chaîne de latitude apparemment valide
import ephem
import csv
import math
def convert_angle(angle):
fields = math.modf(angle)
deg = fields[1]
min_dec = abs(fields[0]*60)
min_fields = math.modf(min_dec)
minu = min_fields[1]
sec = min_fields[0]*60
s = '\'{:2.0f}:{:2.0f}:{:2.1f}\''.format(deg,minu,sec)
return s
sun = ephem.Sun()
with open('locations.txt', 'rb') as csvfile:
rdrreader = csv.reader(csvfile, delimiter='\t', quotechar='"')
for row in rdrreader:
print row[2],row[5],row[6]
lat = convert_angle(float(row[5]))
lon = convert_angle(float(row[6]))
print lat,lon
obs = ephem.Observer()
obs.lat = lat
obs.lon = lon
rising = obs.next_rising(sun)
print('Visual sunrise: %s' % rising)
Le script est mécontent de ma mise en forme:
ipdb> c
'60:47:31.2' '-161:52:35.5'
> /Users/mmuratet/weather/solar_ephem.py(35)<module>()
34 obs = ephem.Observer()
3--> 35 obs.lat = lat
36 obs.lon = lon
ipdb> s
ValueError: 'your angle string %r does not have the format [number[:number[:number]]]'
> /Users/mmuratet/weather/solar_ephem.py(35)<module>()
34 obs = ephem.Observer()
3--> 35 obs.lat = lat
36 obs.lon = lon
et pourtant les mêmes œuvres de commande dans une console python avec couper et coller des
>>> obs.lat = '60:47:31.2'
>>> print obs
<ephem.Observer date='2015/3/3 20:00:58' epoch='2000/1/1 12:00:00' lon=-161:52:35.5 lat=60:47:31.2 elevation=0.0m horizon=0:00:00.0 temp=15.0C pressure=1010.0mBar>
Je sais qu'il doit y avoir une solution simple et évidente, mais je ne le vois pas. Toute suggestion sera appréciée.
Voici quelques données:
AK Bethel PABC 60.791987#N 161.876539#W 60.7919870 -161.876539
AK Fairbanks/Pedro Dome PAPD 65.0351238#N 147.5014222#W 65.0351238 -147.5014222