지형을 고려하면서 일출 / 일몰 시간 계산


11

지형을 고려하여 주어진 위치에서 1 년 동안의 일출 및 일몰 시간을 계산하고 싶습니다. 아마도 일출 / 일몰이 올바른 용어는 아니지만, 내가 원하는 것은 태양이 수평선 위로 떠오르는 시간과 수평선 아래로 떨어지면서 언덕을 고려한 시간입니다.

QGIS 또는 GRASS를 사용하고 있습니다. r.horizon을 사용하여 특정 지점에서 수평선 각도를 생성 할 수 있지만 거기에서 일출 / 일몰 시간까지 도달하는 방법을 잘 모르겠습니다.


관측자 (태양)가 위치를 볼 수있는 각도에서 반전 된 것처럼 들리며 표준 일출 / 설정 시간에 대한 오프셋으로 사용합니다. 아주 좋은 질문입니다.
Michael Stimson

답변:


2

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을 사용하여 태양의 방위각과 고도 각도를 계산할 수있는 것 같습니다. 그러면 태양이 수평선 위로 올라가거나 수평선 아래로 올라 오는 시간을 찾기 위해 어떻게 사용합니까? (지형을 고려할 때, ephem 패키지가 출력하는 일몰 / 일출 시간이 완벽하게 매끄러운 지구를 가정한다고 가정합니다.)
Stu

2
r.horizon과 PyEphem의 일부 조합이 효과가 있습니까? 이 둘을 함께 사용하는 방법에 대한 생각이 있습니까? GRASS에는 r.sun 모듈이 있는데, 지형을 고려하여 주어진 날의 특정 위치에서 직사광선 시간을 계산하는 데 사용할 수 있습니다. 그것은 내가 원하는 것을 거의하는 것처럼 보이지만 직접 직사광선이 시작 / 정지하는 실제 시간을 출력하지는 않습니다.
Stu

유망하고 유용하지만 지형을 고려하지는 않습니다. 계곡 내부에서 보이는 수평선은 실제 수평선과 동일하지 않습니다.
alphabetasoup

@RichardLaw 'horizon'방법으로 지형을 설정할 수 있습니다.
xunilk

1
수평선 방법은 전체 수평선에 대해 단일 수평선 각도를 설정하는 것 같습니다. 지형을 고려하면 수평선이 완벽하게 평평하지는 않습니다. 따라서 수평선에 대한 각도는 계산되는 각 방위각에 따라 다릅니다. r.horizon 모듈은 각 방위각에 대한 각도를 수평선으로 출력합니다. 단일 숫자 (예 : 5도)가 아니라 모든 방위각에 대한 일련의 고도 데이터 세트 (180도 방위에서 5도 고도, 185도 방위에서 6도 고도, 190에서 7도 고도) 방위각 등)
Stu

1

PyEphem과 같은 라이브러리를 사용하여 주어진 위치, 고도, 요일, 시간 (및 행성;)의 태양의 방위각과 고도를 찾을 수 있습니다.


이것의 구현을 제안 할 수 있습니까? 원래 질문은 파이썬에 대해 암시 적으로 언급하지 않지만 예제가 충분히 간단한 경우 OP가 그것을 선택할 수 있습니다.
Michael Stimson

0

약간의 파이썬을 사용 하여이 작업을 수행 할 수 있지만 먼저 관찰자 위치에서 실제 세계 수평선에 대한 각도의 사전 또는 테이블을 생성해야합니다. 이것은 0 = 북쪽으로 1도 간격이어야하고 각 각도마다 수평선의 각도를 제공해야합니다. 이것은 귀하의 r.horizon에서 올 수 있습니다.

그러면 pyephema) observer관찰자의 위도, 경도 및 고도에서 a를 생성 하고 주어진 하루의 1 분마다 태양의 명백한 위치를 계산하는 데 사용합니다. 그리고 az.

그런 다음 각 시간 값에 대해 alt를 해당 방위각의 표고 테이블 값과 비교할 수 있으며 alt가 테이블 값보다 클 때 태양을 볼 수 있습니다.

주어진 날에 태양이 계곡에서 떠서 산 뒤 현장을 빠져 나간 후 산의 다른 쪽이나 다시 나타나는 지점을 찾을 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.