การคำนวณเวลาพระอาทิตย์ขึ้น / พระอาทิตย์ตกในขณะที่พิจารณาภูมิประเทศ


11

ฉันต้องการคำนวณเวลาพระอาทิตย์ขึ้นและตกดินเป็นเวลาหนึ่งปีเต็มสำหรับตำแหน่งที่ระบุโดยคำนึงถึงสภาพภูมิประเทศ บางทีพระอาทิตย์ขึ้น / ตกดินไม่ใช่คำศัพท์ที่ถูกต้อง แต่สิ่งที่ฉันต้องการคือเวลาที่ดวงอาทิตย์ขึ้นเหนือขอบฟ้าและเวลาที่มันลดลงต่ำกว่าเส้นขอบฟ้าโดยคำนึงถึงเนินเขาทุกแห่ง

ฉันกำลังใช้ QGIS หรือ GRASS ฉันสามารถใช้ r.horizon เพื่อสร้างมุมมองขอบฟ้าจากจุดเฉพาะ แต่ฉันไม่แน่ใจว่าจะไปจากที่นั่นจนถึงเวลาพระอาทิตย์ขึ้น / ตกได้อย่างไร


เสียงเหมือนมุมมองแบบย้อนกลับ ... ผู้สังเกตการณ์ (ดวงอาทิตย์) สามารถมองเห็นตำแหน่งใดในมุมมองนั้นจากนั้นใช้สิ่งนั้นเพื่อชดเชยเวลาพระอาทิตย์ขึ้น / ชุดมาตรฐาน นั่นเป็นคำถามที่ดีมาก
Michael Stimson

คำตอบ:


2

ฉันติดตั้งแพคเกจephem python ในระบบ GNU / Debian Linux และฉันสามารถใช้ที่ Python Console ของ QGIS ฉันสร้างผู้สังเกตการณ์หนึ่งจุดใกล้กับทะเลสาบยูทาห์ (สหรัฐอเมริกา) และคำนวณการขึ้นและลงของดวงอาทิตย์ในวัน '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. )

หลังจากทำงานที่ Python Console ของ QGIS ผลลัพธ์ก็คือ:

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

สัญญาและมีประโยชน์ แต่ไม่คำนึงถึงภูมิประเทศ ขอบฟ้าที่มองเห็นได้จากด้านในของหุบเขานั้นไม่เหมือนกับขอบฟ้าที่แท้จริง (ไม่ได้รับการปกป้อง)
ตัวอักษร

@RichardLaw คุณสามารถตั้งค่าภูมิประเทศด้วยวิธีการ 'ขอบฟ้า'
xunilk

1
ดูเหมือนว่าวิธีขอบฟ้าเป็นเพียงการตั้งค่ามุมขอบฟ้าเดียวสำหรับขอบฟ้าทั้งหมดหรือไม่ ถ้าเราคำนึงถึงสภาพภูมิประเทศแล้วเส้นขอบฟ้าก็ไม่คงที่ ดังนั้นมุมของเส้นขอบฟ้าจะแตกต่างกันสำหรับมุมแอซิมัทแต่ละอันที่คำนวณ โมดูล r.horizon จะส่งออกมุมไปยังขอบฟ้าสำหรับราบที่แตกต่างกัน มันจะไม่เป็นตัวเลขเดียว (เช่น 5 องศา) แต่เป็นชุดข้อมูลของชุดระดับความสูงสำหรับแอซิมัททุกแห่ง (ระดับความสูง 5 องศาที่ 180 องศาแอซิมัท, 6 องศาสูงที่ 185 องศาแอซิมัท 7 องศาสูงที่ 190 องศา azimuth ฯลฯ )
Stu

1

คุณสามารถใช้ห้องสมุดเช่น PyEphem เพื่อค้นหาสถานที่ที่กำหนดระดับความสูงวันเวลา (และดาวเคราะห์) มุม azimut และระดับความสูงของดวงอาทิตย์


คุณสามารถแนะนำการใช้สิ่งนี้ได้หรือไม่? คำถามดั้งเดิมไม่ได้กล่าวถึงของงูหลามโดยนัย แต่ OP อาจสามารถหยิบมันขึ้นมาได้ถ้าตัวอย่างนั้นง่ายพอ
Michael Stimson

0

คุณสามารถใช้ python สักเล็กน้อยเพื่อทำสิ่งนี้ แต่คุณต้องสร้างพจนานุกรมหรือตารางก่อนจากตำแหน่งผู้สังเกตการณ์ของคุณไปจนถึงมุมมองของโลกแห่งความเป็นจริง สิ่งนี้จะต้องอยู่ที่ช่วง 1 องศาโดยที่ 0 = จริงทิศเหนือและสำหรับแต่ละองศาให้มุมของขอบฟ้า สิ่งนี้มาจาก r.horizon ของคุณ

จากนั้นคุณสามารถใช้pyephemเพื่อ a) สร้างobserverที่ละติจูดลองจิจูดและความสูงของผู้สังเกตการณ์ของคุณและสำหรับแต่ละนาทีของวันที่กำหนดให้ใช้เพื่อคำนวณตำแหน่งที่ปรากฏของดวงอาทิตย์ซึ่งจะได้รับค่าสี่ค่า ra, dec, alt และ az

จากนั้นสำหรับแต่ละค่าเวลาคุณสามารถเปรียบเทียบ alt กับค่าจากตารางระดับความสูงที่ราบสูงและเมื่อค่าสูงกว่าค่าในตารางคุณจะสามารถเห็นดวงอาทิตย์

เป็นไปได้ที่คุณจะพบบางจุดที่ในวันหนึ่งดวงอาทิตย์ขึ้นในหุบเขาและจากนั้นผ่านไปนอกไซต์ด้านหลังภูเขาจากนั้นปรากฏขึ้นอีกครั้งหรืออีกด้านหนึ่งของภูเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.