如何用Java結(jié)合經(jīng)緯度位置計(jì)算目標(biāo)點(diǎn)的日出日落時(shí)間詳解
前言
隨著城市化進(jìn)程的加速,城市環(huán)境與人類生活的聯(lián)系日益緊密。城市不僅承載著居住、工作、休閑等多種功能,也是人類文明發(fā)展的重要標(biāo)志。在城市規(guī)劃和管理中,對(duì)自然光照條件的考量顯得尤為重要,因?yàn)樗苯佑绊懙骄用竦纳钯|(zhì)量、能源消耗、建筑節(jié)能設(shè)計(jì)以及城市景觀等多個(gè)方面。日出日落時(shí)間作為自然光照變化的基本參數(shù),其計(jì)算與分析對(duì)于城市發(fā)展具有深遠(yuǎn)的意義。
一、城市化與自然光照
城市化進(jìn)程中,高樓大廈的密集建設(shè)在一定程度上影響了自然光照的分布。城市熱島效應(yīng)、光污染以及日照不足等問題日益凸顯,這些問題不僅影響居民的日常生活,還可能對(duì)居民的身心健康產(chǎn)生不利影響。因此,對(duì)城市日出日落時(shí)間的精確計(jì)算和分析,可以幫助城市規(guī)劃者更好地理解城市內(nèi)部光照條件的變化,從而制定出更加合理的城市規(guī)劃方案。
二、能源管理與環(huán)境保護(hù)
隨著全球能源危機(jī)的加劇和環(huán)境保護(hù)意識(shí)的提高,城市能源管理越來越受到重視。日出日落時(shí)間的計(jì)算對(duì)于太陽能發(fā)電、城市照明系統(tǒng)等能源管理領(lǐng)域具有重要意義。通過精確的日出日落時(shí)間,可以優(yōu)化太陽能板的布局和使用,提高太陽能發(fā)電效率,減少對(duì)傳統(tǒng)能源的依賴。同時(shí),合理的照明系統(tǒng)設(shè)計(jì)可以減少能源浪費(fèi),降低城市光污染,保護(hù)城市生態(tài)環(huán)境。
三、建筑設(shè)計(jì)與城市規(guī)劃
在建筑設(shè)計(jì)和城市規(guī)劃中,日出日落時(shí)間是評(píng)估建筑物日照條件的重要依據(jù)。合理的日照分析可以幫助設(shè)計(jì)師和規(guī)劃者優(yōu)化建筑布局,確保建筑物在不同季節(jié)都能獲得充足的自然光照,提高室內(nèi)環(huán)境質(zhì)量,減少能源消耗。此外,日出日落時(shí)間的分析還可以用于評(píng)估城市公共空間的日照條件,為城市綠化、廣場(chǎng)設(shè)計(jì)等提供科學(xué)依據(jù)。
四、居民生活質(zhì)量
居民的生活質(zhì)量與城市的光照條件密切相關(guān)。充足的自然光照可以提升居民的心情,減少季節(jié)性情緒障礙的發(fā)生,同時(shí)也有助于提高居民的工作效率。因此,對(duì)城市日出日落時(shí)間的計(jì)算分析,可以幫助城市規(guī)劃者和建筑師設(shè)計(jì)出更加人性化的城市空間,提升居民的生活質(zhì)量。
五、旅游與文化活動(dòng)
城市日出日落時(shí)間的計(jì)算分析對(duì)于旅游業(yè)和文化活動(dòng)也具有重要意義。日出日落時(shí)分往往是城市景觀最為迷人的時(shí)候,準(zhǔn)確的日出日落時(shí)間可以為旅游規(guī)劃和文化活動(dòng)安排提供參考,吸引更多的游客和參與者。
六、科學(xué)研究與教育
日出日落時(shí)間的計(jì)算分析不僅是城市規(guī)劃和建筑設(shè)計(jì)的需要,也是科學(xué)研究和教育的重要內(nèi)容。通過對(duì)日出日落時(shí)間的研究,可以加深人們對(duì)地球自轉(zhuǎn)、公轉(zhuǎn)以及大氣折射等現(xiàn)象的理解,提高公眾的科學(xué)素養(yǎng)。
綜上所述,城市日出日落時(shí)間的計(jì)算分析在城市規(guī)劃、能源管理、建筑設(shè)計(jì)、居民生活質(zhì)量提升、旅游業(yè)發(fā)展以及科學(xué)研究等多個(gè)領(lǐng)域都發(fā)揮著重要作用。隨著技術(shù)的進(jìn)步和數(shù)據(jù)獲取能力的提高,對(duì)日出日落時(shí)間的計(jì)算分析將更加精確和便捷,為城市可持續(xù)發(fā)展提供強(qiáng)有力的支持。本文即在此背景下產(chǎn)生,博文主要采用Java編程語言,重點(diǎn)講解如何基于目標(biāo)點(diǎn)的經(jīng)緯度,比如已知某城市的經(jīng)緯度坐標(biāo),需要求解該地點(diǎn)的日出和日落時(shí)間,文章首先介紹一些包含了日出和日落信息的服務(wù)網(wǎng)站,然后重點(diǎn)介紹如何Java中進(jìn)行信息的求解,希望對(duì)各位朋友所幫助。
一、應(yīng)用示例
在正式介紹計(jì)算方法之前,首先我們來介紹一些包含了日出和日落信息的網(wǎng)站信息,拋磚引玉,幫助大家對(duì)它的應(yīng)用場(chǎng)景有一些直觀的印象。當(dāng)然,如果有更好的使用場(chǎng)景,也歡迎各位朋友在評(píng)論區(qū)留言告訴不才。
1、天安門升旗時(shí)間
眾所周知,天安門廣場(chǎng)國旗升降的具體時(shí)間根據(jù)北京的日出日落時(shí)間來確定的,由北京天文臺(tái)天文學(xué)家林亨專門計(jì)算的。因此如果你也想去天安門看一場(chǎng)升旗儀式,請(qǐng)一定要看好時(shí)間,同時(shí)定好鬧鐘,否則就會(huì)錯(cuò)誤哦。這里以2024年12月的天安門升旗儀式的一個(gè)web應(yīng)用為例,就很清晰的描述了12月的升旗日歷,升國旗日歷。
通過這個(gè)日歷就可以看到在12月中每一天的日出和日落時(shí)間,作為北半球的城市,太陽現(xiàn)在離北回歸線越來越遠(yuǎn),這是初中的地理知識(shí)。當(dāng)?shù)搅硕寥蘸螅粘龅臅r(shí)間就會(huì)變?cè)?,而日落的時(shí)間就會(huì)變遲。
2、湖南省日出日落信息
與城市的日出日落時(shí)間相類似,我們可以來看一下其它省份的日出日落信息。當(dāng)然,對(duì)于一些直轄市來說,其經(jīng)緯度位置相關(guān),因此如果某省的幅員比較遼闊,比如我國的內(nèi)蒙古,它的經(jīng)度跨度就比較大,因此其日出日落時(shí)間相差一定比較大。
這里以長沙市為例,這里可以看到,12月18日,長沙日出時(shí)間是07點(diǎn)13,而日落時(shí)間是17:35。通過對(duì)比北京市和長沙市,北京是7點(diǎn)30日出,比長沙日出晚17分鐘。北京的日落時(shí)間是16:41,日落時(shí)間比長沙早54分鐘,將近1個(gè)小時(shí)。
二、JAVA日出日落計(jì)算
本節(jié)將重點(diǎn)分享如何使用JAVA來進(jìn)行日出日落的計(jì)算。為了可以滿足全球不同時(shí)區(qū)的時(shí)間計(jì)算,不僅需要考慮經(jīng)緯度位置,同時(shí)需要結(jié)合我們的時(shí)區(qū)信息來進(jìn)行計(jì)算。這里我們將分享幾種計(jì)算日出日落的方法。通過介紹,您可以掌握如何準(zhǔn)確的獲取相關(guān)的日出日落時(shí)間。
1、在線API
如果沒有編程能力,那么可以選用在線API,可以在互聯(lián)網(wǎng)上搜索一些在線的API來進(jìn)行接口調(diào)用。當(dāng)然,取決于不同的接口服務(wù)商,他們會(huì)在接口那收取一定的費(fèi)用,或者調(diào)用的時(shí)候有一定的延時(shí)。這里分享一個(gè)在線的日出日落計(jì)算API。
在線API的使用方式如下:
大家可以在瀏覽器或者客戶端中進(jìn)行調(diào)用,也可以使用HttpClient這樣的工具來進(jìn)行調(diào)用。下面以Web界面為例:
https://api.sunrise-sunset.org/json?lat=28.201916&lng=112.968047&tzid=Asia/Chongqing
得到的結(jié)果如下:
{"results": {"sunrise":"7:12:51 AM", "sunset":"5:36:44 PM", "solar_noon":"12:24:47 PM", "day_length":"10:23:53", "civil_twilight_begin":"6:48:23 AM", "civil_twilight_end":"6:01:12 PM", "nautical_twilight_begin":"6:19:03 AM", "nautical_twilight_end":"6:30:32 PM", "astronomical_twilight_begin":"5:50:16 AM", "astronomical_twilight_end":"6:59:18 PM"}, "status":"OK", "tzid":"Asia/Chongqing"}
這里的坐標(biāo)位置是長沙,可以看到通過在線API調(diào)用后得到的日出時(shí)間是早上7點(diǎn)12分51秒。與之前截圖的日出時(shí)間稍微有點(diǎn)出入。日落時(shí)間是下午的5點(diǎn)36分。這個(gè)是比較準(zhǔn)確的。
2、使用Java進(jìn)行計(jì)算
在一些特殊的應(yīng)用場(chǎng)景或者是在內(nèi)網(wǎng)環(huán)境中,要如何進(jìn)行日出日落的計(jì)算呢?既然是在內(nèi)網(wǎng),與互聯(lián)網(wǎng)是彼此隔離的,因此無法直接調(diào)用在線API的形式。需要我們提供離線的計(jì)算方式。以Java為例,要如何來實(shí)現(xiàn)這個(gè)計(jì)算的需求呢?這里首先使用一個(gè)三方庫來進(jìn)行調(diào)用。這里使用的是com.luckycatlabs.SunriseSunsetCalculator。
首先,我們?cè)赑om.xml中引入以下依賴:
<!-- 增加日出和日落計(jì)算包 add by 夜郎king in 2024.12.17 begin --> <dependency> <groupId>com.luckycatlabs</groupId> <artifactId>SunriseSunsetCalculator</artifactId> <version>1.2</version> </dependency> <!-- 增加日出和日落計(jì)算包 add by 夜郎king in 2024.12.17 end -->
引入了這個(gè)計(jì)算包之后就可以進(jìn)行日出和日落的計(jì)算,這里依然以長沙為例,示例代碼如下:
/** * - 測(cè)試長沙日出日落 */ @Test public void TestChangsha() { Location location = new Location("28.201916", "112.968047"); SunriseSunsetCalculator calculator = new SunriseSunsetCalculator(location, "Asia/Chongqing"); Calendar date = Calendar.getInstance(); String officialSunrise = calculator.getOfficialSunriseForDate(date); Calendar officialSunset = calculator.getOfficialSunsetCalendarForDate(date); System.out.println(officialSunrise); System.out.println(officialSunset); System.out.println(calculator.getOfficialSunsetForDate(date)); }
首先需要根據(jù)長沙的經(jīng)緯度來進(jìn)行創(chuàng)建位置對(duì)象。然后創(chuàng)建SunriseSunsetCalculator對(duì)象,在構(gòu)造對(duì)象的過程中,傳入位置和時(shí)區(qū)信息。關(guān)于時(shí)區(qū)信息,可以通過之前的系列博客介紹來進(jìn)行獲取。傳入時(shí)區(qū)是為了更好的生成本地時(shí)間對(duì)應(yīng)的日出和日落時(shí)間。在控制臺(tái)中運(yùn)行以上代碼后,可以看到以下的信息輸出。
可以看到,經(jīng)過庫的計(jì)算之后得到的日出時(shí)間是7點(diǎn)14,而日落時(shí)間是17點(diǎn)36。對(duì)比觀察之前在線API和網(wǎng)上的日歷表可以發(fā)現(xiàn),經(jīng)過庫計(jì)算出來的日出日落時(shí)間,基本上是一致的。由此說明,可以在生產(chǎn)環(huán)境中來使用這種服務(wù)。
三、總結(jié)
以上就是本文的主要內(nèi)容,博文主要采用Java編程語言,重點(diǎn)講解如何基于目標(biāo)點(diǎn)的經(jīng)緯度,比如已知某城市的經(jīng)緯度坐標(biāo),需要求解該地點(diǎn)的日出和日落時(shí)間,文章首先介紹一些包含了日出和日落信息的服務(wù)網(wǎng)站,然后重點(diǎn)介紹如何Java中進(jìn)行信息的求解。文章首先講解了進(jìn)行日照時(shí)間計(jì)算的一些必要性和實(shí)際使用場(chǎng)景,通過這些場(chǎng)景的介紹,可以讓大家為什么要做這個(gè)事。然后以兩個(gè)實(shí)際的案例入手,深入我們?nèi)粘I钪械膬蓚€(gè)關(guān)于日出和日落時(shí)間計(jì)算的情形。然后分別介紹基于在線API的求解方法和基于Java的離線計(jì)算方法。作為一名技術(shù)工程師,我們可以自己來進(jìn)行相關(guān)的實(shí)現(xiàn),這樣不僅能進(jìn)行性能的提升,同時(shí)也可以減少不必要的費(fèi)用。行文倉促,難免有許多不足之處,如有不足,在此懇請(qǐng)各位專家博主在評(píng)論區(qū)留言批評(píng)指正,不勝感激。
到此這篇關(guān)于如何用Java結(jié)合經(jīng)緯度位置計(jì)算目標(biāo)點(diǎn)的日出日落時(shí)間的文章就介紹到這了,更多相關(guān)Java計(jì)算目標(biāo)點(diǎn)日出日落時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于BufferedReader讀取文件指定字符集問題
這篇文章主要介紹了關(guān)于BufferedReader讀取文件指定字符集問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12解決JMap抓取heap使用統(tǒng)計(jì)信息報(bào)錯(cuò)的問題
這篇文章主要介紹了解決JMap抓取heap使用統(tǒng)計(jì)信息報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12java字符串?dāng)?shù)組進(jìn)行大小排序的簡單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄猨ava字符串?dāng)?shù)組進(jìn)行大小排序的簡單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09Springboot整合hutool驗(yàn)證碼的實(shí)例代碼
在 Spring Boot 中,你可以將 Hutool 生成驗(yàn)證碼的功能集成到 RESTful API 接口中,這篇文章主要介紹了Springboot整合hutool驗(yàn)證碼,需要的朋友可以參考下2024-08-08解決java調(diào)用python代碼返回值中文亂碼問題
這篇文章主要介紹了解決java調(diào)用python代碼返回值中文亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Java實(shí)現(xiàn)Html轉(zhuǎn)Pdf的方法
這篇文章主要介紹了Java實(shí)現(xiàn)Html轉(zhuǎn)Pdf的方法,實(shí)例分析了java基于ITextRenderer類操作頁面及系統(tǒng)自帶字體生成pdf文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07RestTemplate get請(qǐng)求攜帶headers自動(dòng)拼接參數(shù)方式
這篇文章主要介紹了RestTemplate get請(qǐng)求攜帶headers自動(dòng)拼接參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07