Topoğrafyayı düşünürken gün doğumu / gün batımı zamanını hesaplama


11

Topografyayı dikkate alarak belirli bir konum için bir yıl boyunca güneşin doğuş ve batış zamanlarını hesaplamak istiyorum. Belki gün doğumu / gün batımı doğru terimler değildir, ama istediğim şey güneşin ufkun üzerine çıktığı zaman ve herhangi bir tepeyi hesaba katarak ufkun altına düştüğü zamandır.

QGIS veya GRASS kullanıyorum. Belirli bir noktadan ufuk açısını oluşturmak için r.horizon'u kullanabilirim, ancak oradan gündoğumu / günbatımı zamanlarına nasıl ulaşacağımdan emin değilim.


Ters bir görüş alanı gibi görünüyor ... gözlemci (güneş) konumu hangi açıda görebiliyorsa, bunu standart gün doğumu / ayarlanan zamanlara bir ofset olarak kullanabilir. Bu çok iyi bir soru.
Michael Stimson

Yanıtlar:


2

Ephem python paketini GNU / Debian Linux Sistemime kurdum ve QGIS'in Python Konsolunda kullanabilirim. Utah Gölü'nün (ABD) yakınında bir nokta için bir gözlemci oluşturdum ve '2010/6/21' günü için güneşin ve batan güneşin hesaplanmasıydı. Senaryo şuydu:

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 Konsolu'nda çalıştıktan sonra sonuç şuydu:

>>>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

Cevap bu.

Notu düzenleme :

Yeni bir ufuk tanımlamak (örneğin 5 derece):

.
.
.
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. )

sonuç:

>>>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

Bunun için teşekkür ederim, bulmacanın bir parçası gibi görünüyor. Görünüşe göre, belirli bir zamanda güneşin azimut ve irtifa açılarını hesaplamak için PyEphem kullanabilir miyim? Daha sonra bunu güneşin ufkun üstüne çıktığı / ufuktan battığı zamanı bulmak için nasıl kullanabilirim? (Topografyanın muhasebesi, ephem paketinin çıktığı gün batımı / gün doğumu zamanlarının mükemmel bir dünya olduğunu varsayıyorum.)
Stu

2
Belki de r.horizon ve PyEphem'in bir kombinasyonu işe yarayabilir? İkisini birlikte nasıl kullanacağınıza dair bir fikrin var mı? GRASS'ın belirli bir günde belirli bir yerde doğrudan güneş ışığının saat sayısını hesaplamak için kullanabileceğim bir r.sun modülü var. Bu neredeyse istediğimi yapıyor gibi görünüyor, ancak doğrudan güneş ışığının başladığı / durduğu gerçek zamanı çıktı gibi görünmüyor.
Stu

Umut verici ve kullanışlı, ancak topografyayı dikkate almaz. Bir vadinin içinden görünen ufuk, gerçek ufukla aynıdır (sağlanmamış).
alphabetasoup

@RichardLaw Topografyayı 'horizon' yöntemiyle ayarlayabilirsiniz.
xunilk

1
Ufuk yöntemi, tüm ufuk için tek bir ufuk açısı oluşturuyor gibi mi görünüyor? Topografyayı dikkate alırsak, ufuk tam olarak düz değildir. Böylece, ufka açı, hesaplanan her farklı azimut için farklı olacaktır. R.horizon modülü, her farklı azimut için ufka açı gönderir. Tek bir sayı olmayacak (örneğin 5 derece), daha ziyade tüm azimutlar için bir dizi yükselti veri kümesi (180 derece azimutta 5 derece yükseklik, 185 derece azimutta 6 derece yükseklik, 190'da 7 derece yükseklik) derece azimut, vb.)
Stu

1

Belirli bir yer, yükseklik, gün, saat (ve gezegen;) için güneşin azimut ve yükseklik açılarını bulmak için PyEphem gibi bir kütüphane kullanabilirsiniz.


Bunun uygulanmasını önerebilir misiniz? Orijinal soru, python'dan dolaylı olarak bahsetmez, ancak örnek yeterince basitse OP onu alabilir.
Michael Stimson

0

Bunu yapmak için biraz python kullanabilirsiniz, ancak önce gözlemcilerinizden gerçek dünya ufkuna olan açının olduğu gibi bir sözlük veya tablo oluşturmanız gerekir. Bunun, 0 = gerçek kuzey ile 1 derece aralıklarla olması ve her dereceye göre ufuk açısını vermesi gerekir. Bu r.horizon'unuzdan gelebilir.

Daha sonra, pyephema) ile observergözlemcinizin enlemini, boylamını ve yüksekliğini oluşturmak için kullanabilirsiniz ve belirli bir günün her dakikası için, görünen güneş konumlarını hesaplamak için kullanabilirsiniz, bunlar dört değer olarak verilir, ra, dec, alt ve az.

Daha sonra her bir zaman değeri için alt'ı o azimuttaki yükseklik tablosundaki değerle karşılaştırabilirsiniz ve alt tablodaki değerden daha büyük olduğunda güneşi görebilirsiniz.

Hatta belirli bir günde, güneşin bir vadide doğup daha sonra bir dağın arkasından siteden çıkıp daha sonra yeniden dağın veya diğer tarafının göründüğü bazı noktalar bulabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.