을 제공합니다. 첫 번째 것은 에펜 (ephem)을 사용하여 적경을 계산하고 Meeus의 Astronomical Algorithms에서 그리니치 평균 항성석을 얻는 수식을 사용합니다.이 시간은 경도와 함께 지역 평균 항성으로 변환 될 수 있습니다. pyephem 항성시 내가 처음 <code>ephem</code>을 사용하고 문제가 내가 시간 각도에서 태양 시간을 결정하기 위해 몇 가지 스크립트를 작성했습니다 oberver.sidereal_time의 출력()</p> <p>을 이해하는 데 문제가 예기치 않은 결과를
import sys
from datetime import datetime, time, timedelta
import ephem
def hour_angle(dt, longit, latit, elev):
obs = ephem.Observer()
obs.date = dt.strftime('%Y/%m/%d %H:%M:%S')
obs.lon = longit
obs.lat = latit
obs.elevation = elev
sun = ephem.Sun()
sun.compute(obs)
# get right ascention
ra = ephem.degrees(sun.g_ra)
# get sidereal time at greenwich (AA ch12)
jd = ephem.julian_date(dt)
t = (jd - 2451545.0)/36525
theta = 280.46061837 + 360.98564736629 * (jd - 2451545) \
+ .000387933 * t**2 - t**3/38710000
# hour angle (AA ch13)
ha = (theta + longit - ra * 180/ephem.pi) % 360
return ha
def main():
if len(sys.argv) != 6:
print 'Usage: hour_angle.py [YYYY/MM/DD] [HH:MM:SS] [longitude] [latitude] [elev]'
sys.exit()
else:
dt = datetime.strptime(sys.argv[1] + ' ' + sys.argv[2], '%Y/%m/%d %H:%M:%S')
longit = float(sys.argv[3])
latit = float(sys.argv[4])
elev = float(sys.argv[5])
# get hour angle
ha = hour_angle(dt, longit, latit, elev)
# convert hour angle to timedelta from noon
days = ha/360
if days > 0.5:
days -= 0.5
td = timedelta(days=days)
# make solar time
solar_time = datetime.combine(dt.date(), time(12)) + td
print solar_time
if __name__ == '__main__':
main()
이
내가 일부 데이터를 연결하면 내가 기대하는 출력을 제공 : 내가 쓴> python hour_angle_ephem.py 2012/11/16 20:34:56 -122.2697 37.8044 3.0
2012-11-16 12:40:54.697115
두 번째 스크립트는 같은 방법으로 적경을 계산하지만, 로컬 명백한을 얻을 수 ephem의 sidereal_time()를 사용 항시적인 시간.
import sys
from datetime import datetime, time, timedelta
import math
import ephem
def solartime(observer, sun=ephem.Sun()):
sun.compute(observer)
# sidereal time == ra (right ascension) is the highest point (noon)
t = observer.sidereal_time() - sun.ra
return ephem.hours(t + ephem.hours('12:00')).norm # .norm for 0..24
def main():
if len(sys.argv) != 6:
print 'Usage: hour_angle.py [YYYY/MM/DD] [HH:MM:SS] [longitude] [latitude] [elev]'
sys.exit()
else:
dt = datetime.strptime(sys.argv[1] + ' ' + sys.argv[2], '%Y/%m/%d %H:%M:%S')
longit = float(sys.argv[3])
latit = float(sys.argv[4])
elev = float(sys.argv[5])
obs = ephem.Observer()
obs.date = dt.strftime('%Y/%m/%d %H:%M:%S')
obs.lon = longit
obs.lat = latit
obs.elevation = elev
solar_time = solartime(obs)
print solar_time
if __name__ == '__main__':
main()
예상치 못한 결과가 나옵니다.
python hour_angle_ephem2.py 2012/11/16 20:34:56 -122.2697 37.8044 3.0
9:47:50.83
AFAIK 두 스크립트 사이의 유일한 차이는 로컬 평균 항성시의 첫번째 염기 시간 각도 고려 지구의 장동 소요 로컬 명백 항성시 두 번째 염기 시간 각도 반면 , 나는 그것이 매우 작은 요인이어야한다고 생각한다. 대신 약 3 시간의 차이가 있습니다. 아무도 내게 무슨 일이 일어 났는지 설명 할 수 있습니까?
참고 : ([은'solartime() '함수는 내 대답에서입니다] http://stackoverflow.com/a/13425515/ 그 다음은 당신이 기대에 가까운 값을 반환 찾아야한다 4279). 그것을 사용하는 것이 좋습니다. 그러나 [라이센스는] (http://creativecommons.org/licenses/by-sa/3.0/) – jfs
btw와 같은 적절한 참조를 제공해야합니다. 대답] (http://stackoverflow.com/a/13425515/4279) float를 사용하는 경우 명시 적으로 경도에 라디안을 사용해야한다고 말합니다. – jfs
실망 스럽지만 라이센스를 읽지 못했습니다. 나는 네 대답을 upvoted. – mattexx