지형을 고려하여 주어진 위치에서 1 년 동안의 일출 및 일몰 시간을 계산하고 싶습니다. 아마도 일출 / 일몰이 올바른 용어는 아니지만, 내가 원하는 것은 태양이 수평선 위로 떠오르는 시간과 수평선 아래로 떨어지면서 언덕을 고려한 시간입니다.
QGIS 또는 GRASS를 사용하고 있습니다. r.horizon을 사용하여 특정 지점에서 수평선 각도를 생성 할 수 있지만 거기에서 일출 / 일몰 시간까지 도달하는 방법을 잘 모르겠습니다.
지형을 고려하여 주어진 위치에서 1 년 동안의 일출 및 일몰 시간을 계산하고 싶습니다. 아마도 일출 / 일몰이 올바른 용어는 아니지만, 내가 원하는 것은 태양이 수평선 위로 떠오르는 시간과 수평선 아래로 떨어지면서 언덕을 고려한 시간입니다.
QGIS 또는 GRASS를 사용하고 있습니다. r.horizon을 사용하여 특정 지점에서 수평선 각도를 생성 할 수 있지만 거기에서 일출 / 일몰 시간까지 도달하는 방법을 잘 모르겠습니다.
답변:
GNU / Debian Linux 시스템에 ephem python 패키지를 설치했으며 QGIS의 Python Console에서 사용할 수 있습니다. 나는 미국 유타 호수 근처의 지점에 대한 관찰자를 만들었고 '2010/6/21'일의 일출과 일몰 태양을 계산했습니다. 스크립트는 다음과 같습니다
import ephem
#defining an observer
obs = ephem.Observer()
#defining position
long = '-112.092807'
lat = '40.135114'
obs.long = ephem.degrees(long)
obs.lat = ephem.degrees(lat)
print "long = ", obs.long, "lat = ", obs.lat
#defining date
date = '2010/6/21'
obs.date = ephem.Date(date)
#defining an astronomic object; Sun in this case
sun = ephem.Sun(obs)
r1 = obs.next_rising(sun)
s1 = obs.next_setting(sun)
print "rising sun (UTC time): ", r1
print "setting sun (UTC time): ", s1
r1_lt = ephem.Date(r1 - 6 * ephem.hour) #local time
(y, mn, d, h, min, s) = r1_lt.tuple()
print "rising sun: (local time): {:.2f}".format( h + min/60. + s/3600. )
s1_lt = ephem.Date(s1 - 6 * ephem.hour) #local time
(y, mn, d, h, min, s) = s1_lt.tuple()
print "setting sun (local time): {:.2f}".format( h + min/60. + s/3600. )
QGIS의 Python 콘솔에서 실행 한 결과는 다음과 같습니다.
>>>execfile(u'/home/zeito/pyqgis_scripts/ephem.py'.encode('UTF-8'))
long = -112:05:34.1 lat = 40:08:06.4
rising sun (UTC time): 2010/6/21 11:58:58
setting sun (UTC time): 2010/6/21 03:01:14
rising sun: (local time): 5.98
setting sun (local time): 21.02
이것이 답입니다.
편집 노트 :
새로운 지평 정의 (예 : 5도) :
.
.
.
obs.horizon = '5'
sun = ephem.Sun(obs)
r1 = obs.next_rising(sun)
s1 = obs.next_setting(sun)
print "rising sun (UTC time): ", r1
print "setting sun (UTC time): ", s1
r1_lt = ephem.Date(r1 - 6 * ephem.hour) #local time
(y, mn, d, h, min, s) = r1_lt.tuple()
print "rising sun: (local time): {:.2f}".format( h + min/60. + s/3600. )
s1_lt = ephem.Date(s1 - 6 * ephem.hour) #local time
(y, mn, d, h, min, s) = s1_lt.tuple()
print "setting sun (local time): {:.2f}".format( h + min/60. + s/3600. )
결과는 다음과 같습니다.
>>>execfile(u'/home/zeito/pyqgis_scripts/ephem.py'.encode('UTF-8'))
long = -112:05:34.1 lat = 40:08:06.4
rising sun (UTC time): 2010/6/21 12:31:48
setting sun (UTC time): 2010/6/21 02:28:24
rising sun: (local time): 6.53
setting sun (local time): 20.47
PyEphem과 같은 라이브러리를 사용하여 주어진 위치, 고도, 요일, 시간 (및 행성;)의 태양의 방위각과 고도를 찾을 수 있습니다.
약간의 파이썬을 사용 하여이 작업을 수행 할 수 있지만 먼저 관찰자 위치에서 실제 세계 수평선에 대한 각도의 사전 또는 테이블을 생성해야합니다. 이것은 0 = 북쪽으로 1도 간격이어야하고 각 각도마다 수평선의 각도를 제공해야합니다. 이것은 귀하의 r.horizon에서 올 수 있습니다.
그러면 pyephem
a) observer
관찰자의 위도, 경도 및 고도에서 a를 생성 하고 주어진 하루의 1 분마다 태양의 명백한 위치를 계산하는 데 사용합니다. 그리고 az.
그런 다음 각 시간 값에 대해 alt를 해당 방위각의 표고 테이블 값과 비교할 수 있으며 alt가 테이블 값보다 클 때 태양을 볼 수 있습니다.
주어진 날에 태양이 계곡에서 떠서 산 뒤 현장을 빠져 나간 후 산의 다른 쪽이나 다시 나타나는 지점을 찾을 수도 있습니다.