2011-09-12 74 views
2

我正在寫一個Python程序,需要確定它是否是日出後或只有當前UTC時間和目標經度和緯度。我看到應用程序一直都在做這類事情,但我不知道它是如何完成的。有任何想法嗎?鑑於經緯度,我怎麼知道它是否是日光?

+3

http://mathforum.org/library/drmath/view/56478.html – agibalov

+0

這是第一個環節,我發現,但它是不夠的,只有有限結石背景像我這樣的工作。 –

+0

當然也取決於日期。 –

回答

1

只是做了一個快速的谷歌搜索,我發現this. NOAA日出/日落和太陽位置計算器的計算是基於由天文算法由Jean Meeus提出的方程。緯度+/- 72°之間的地點和緯度外10分鐘之內的日出和日落結果已經被驗證爲精確到一分鐘之內。

的計算細節的詳細解釋可以從網頁中找到,也here.

+0

單鏈接的答案可以**很容易** bit-rot。你應該*至少*在你的答案中提供一個簡短的鏈接摘要。 –

+0

海報也應該至少通過搜索引擎運行他們的問題。我試圖儘可能以有用的方式轉達這一要求。 – smulholland2

+0

如果你認爲這個問題不好,那麼一個不好的答案是*不是適當的回答。 –

1

算法的完整佈局here

不是很多,真正增加。引用文檔中的10點將其分解爲簡單的重現步驟,可以真正以任何語言實現。

0

你需要的東西,只是工作™?使用優越的語言。你知道它會一直工作。你怎麼能相信122線高級天體物理?你不能。但是你總是可以信任PHP。

>>> def is_day(lat, lon): # optinally adjust zenith (currently 96) at the end of the line 
... return subprocess.check_output(["php","-r","""date_default_timezone_set("GMT");\n$a=date_sunrise(time(),SUNFUNCS_RET_DOUBLE,{0},{1},{2},0);\n$b=date_sunset(time(),SUNFUNCS_RET_DOUBLE,{0},{1},{2},0);\n$t=date("H")+date("i")/60+date("s")/3600;\necho($a<$b?($t>$a&&$t<$b):($t>$a||$t<$b))?"day":"night";""".format(lat,lon,96)])=="day" 
... #                                                                                ^^ optionally adjust zenith here 
... 
>>> is_day(-33,151) # Sydney 
True 
>>> is_day(0,0) # Some hundred km off the coast of Africa 
False 
>>> __import__("datetime").datetime.utcnow() 
datetime.datetime(2012, 2, 10, 22, 29, 30, 365019) 
>>> 
相關問題