地形を考慮しながら日の出/日の入り時間を計算する


11

地形を考慮して、特定の場所の1年間の日の出と日没の時間を計算します。おそらく日の出/日の入りは正しい用語ではありませんが、私が望むのは、太陽が地平線から昇る時間と、丘を考慮して地平線を下回る時間です。

QGISまたはGRASSを使用しています。r.horizo​​nを使用して特定のポイントから水平角を生成できますが、そこから日の出/日の入り時刻に到達する方法がわかりません。


逆視界のように聞こえます...どの角度で観測者(太陽)が位置を見ることができ、標準の日の出/設定時間へのオフセットとしてそれを使用します。それは非常に良い質問です。
マイケルスティムソン

回答:


2

GNU / Debian Linuxシステムにephem pythonパッケージをインストールしました。QGISのPythonコンソールで使用できます。私はユタ湖(米国)の近くの地点にオブザーバーを作成し、「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パッケージが出力されていることを日没/日の出時間は完全に滑らかな地球を想定していると仮定しています。)
スチュ

2
おそらく、r.horizo​​nとPyEphemのいくつかの組み合わせが機能するでしょうか?2つを一緒に使用する方法についての考えはありますか?GRASSにはモジュールr.sunがあります。このモジュールを使用して、特定の場所での特定の日の直射日光の時間数を計算し、地形を計算できます。それはほとんど私が望むことをするように思えますが、直射日光が開始/停止する実際の時間を出力するようには見えません。
スチュ

有望で便利ですが、地形を考慮していません。谷の内側から見える地平線は、真の地平線と同じではありません(隠されていない)。
alphabetasoup

@RichardLaw「horizo​​n」メソッドで地形を設定できます。
-xunilk

1
地平線法は、地平線全体に対して単一の地平線角度を設定しているように見えますか?地形を考慮すると、地平線は完全に平坦ではありません。そのため、水平線に対する角度は、計算されるさまざまな方位角ごとに異なります。r.horizo​​nモジュールは、各方位角の水平線に対する角度を出力します。単一の数値(5度など)ではなく、すべての方位角の一連の仰角のデータセット(方位角180度で5度、方位角185度で6度、190度で7度)度の方位角、など)
ステュ

1

PyEphemのようなライブラリを使用して、特定の場所について、標高、日、時間(および惑星;)の太陽の方位角と高度角を見つけることができます。


これの実装を提案できますか?元の質問では暗黙的にpythonについて言及していませんが、例が十分に単純な場合、OPはpythonを選択できる可能性があります。
マイケルスティムソン

0

これを行うには少しのpythonを使用できますが、最初に、観測者の位置から、現実世界の地平線が向いているように見える角度の辞書またはテーブルを生成する必要があります。これは、0 =真北で1度間隔で、各角度で水平線の角度を与える必要があります。これは、r.horizo​​nから取得できます。

次に、pyephema)を使用してobserver、観測者の緯度、経度、高度で作成し、特定の日の1分ごとに、太陽の見かけの位置を計算します。これらは、ra、dec、altの4つの値として与えられます。とaz。

次に、各時間値について、その方位角で高度と仰角テーブルの値を比較できます。また、高度がテーブルの値よりも大きい場合は、太陽を見ることができます。

特定の日に、太陽が谷で昇り、山の後ろの場所から出て、山の向こう側または向こう側に再び現れるいくつかのポイントを見つけることさえ可能です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.