2013-08-09 17 views
7

Tôi mới sử dụng PyEphem và đây có lẽ là một câu hỏi đơn giản. Tôi muốn tính góc của mặt trời phía trên đường chân trời tại một điểm và ngày GPS nhất định. Mã của tôi là như sau:Cách tính góc của mặt trời phía trên đường chân trời bằng cách sử dụng pyEphem

import ephem 
import datetime 

date = datetime.datetime(2010,1,1,12,0,0) 
print "Date: " + str(date) 

obs=ephem.Observer() 
obs.lat='31:00' 
obs.long='-106:00' 
obs.date = date 
print obs 

sun = ephem.Sun(obs) 
sun.compute(obs) 
print float(sun.alt) 
print str(sun.alt) 
sun_angle = float(sun.alt) * 57.2957795 # Convert Radians to degrees 
print "sun_angle: %f" % sun_angle 

Và kết quả là:

python sunTry.py 
Date: 2010-01-01 12:00:00 
<ephem.Observer date='2010/1/1 12:00:00' epoch='2000/1/1 12:00:00' lon=-106:00:00.0 lat=31:00:00.0 elevation=0.0m horizon=0:00:00.0 temp=15.0C pressure=1010.0mBar> 
-0.44488877058 
-25:29:24.9 
sun_angle: -25.490249 

Tại sao alt tiêu cực? Vị trí GPS ở đâu đó ở Mexico và tôi đã chỉ định 12 Trưa trong thông số ngày của người quan sát. Mặt trời nên được khá nhiều trực tiếp trên không vì vậy tôi đã có thể nghĩ rằng biến alt sẽ trở lại một góc một nơi nào đó int ông khoảng 70 - 90 độ? Tôi đang thiếu gì ở đây?

Cảm ơn

Stephen

+0

Bộ nhớ của tôi hơi mờ với cách sử dụng datetime. Có thể có vấn đề múi giờ ở đó không? Có lẽ ephem và datetime là âm mưu giải thích thời gian của bạn như trong một số múi giờ khác, chẳng hạn như UTC hoặc TZ địa phương của bạn? –

Trả lời

4

Tôi tin rằng vấn đề là ở PyEphem, dates are always in UTC. Vì vậy, không có vấn đề gì múi giờ địa phương là cho lat/lon của người quan sát của bạn, nếu bạn nói với nó Noon, nó giả định bạn có nghĩa là Noon trong UTC. Điều đó có nghĩa là bạn phải vượt qua trong thời gian bạn dự định đã được chuyển đổi sang UTC.

Thời gian UTC cho "một nơi nào đó ở Mexico tại datetime.datetime(2010,1,1,12,0,0)" là khoảng datetime.datetime(2010,1,1,18,0,0).

Với ngày mới này, tôi nhận được đầu ra

sun_angle: 33.672932 

Đó dường như vẫn còn loại thấp, nhưng hợp lý hơn -25.

Nếu bạn muốn có một cách làm việc có lập trình, bạn có thể (tự chịu rủi ro) can thiệp với mô-đun pytz.

tz_mexico = pytz.timezone('America/Mexico_City') 
mexico_time = datetime.datetime(2010,1,1,12,0,0,0,tz_mexico) 
utc_time = mexico_time.astimezone(pytz.utc) 
obs.date = utc_time