基于SpringBoot和Leaflet集成在線天氣服務的區縣當前天氣WebGIS實戰

目錄

前言? ? ??

一、需求描述

1、功能需求

2、技術實現流程

二、SpringBoot后臺實現

1、控制層實現

2、區縣數據返回

三、WebGIS前端實現

1、區位信息展示

?2、天氣信息展示

四、成果展示

1、魔都上海

2、蜀地成都

3、湖南桂東

五、總結


前言? ? ??

????????在當今數字化時代,地理信息系統(WebGIS)作為一種強大的空間信息展示與分析工具,已經廣泛應用于各個領域。它不僅能夠直觀地呈現地理數據,還能結合實時信息為用戶提供更加豐富和動態的體驗。天氣信息作為與人們日常生活息息相關的重要數據,其與WebGIS的結合更是具有巨大的應用價值。本文將深入探討如何基于SpringBoot框架和Leaflet庫,集成在線天氣服務,構建一個展示區縣當前天氣的WebGIS系統,旨在通過實戰案例為相關開發者提供參考和借鑒。

????????隨著互聯網技術的飛速發展,人們對信息的獲取和交互方式提出了更高的要求。傳統的天氣預報服務雖然已經能夠提供較為準確的天氣信息,但其展示形式往往較為單一,缺乏直觀性和交互性。而WebGIS技術的出現,為天氣信息的展示帶來了新的思路和方法。通過將天氣數據與地理信息相結合,用戶可以在地圖上直觀地查看不同地區的天氣情況,并且能夠根據自己的需求進行交互操作,如放大、縮小、查詢特定區域的天氣等。這種結合不僅提高了天氣信息的可用性,也為用戶帶來了更加便捷和個性化的體驗。

????????在本實戰項目中,我們將詳細介紹如何利用SpringBoot和Leaflet集成在線天氣服務,實現區縣當前天氣的展示。我們將從系統需求分析、技術選型、后端開發、前端設計以及系統的測試與優化等多個方面進行闡述,逐步引導讀者完成整個系統的開發過程。通過本項目的實踐,讀者不僅能夠掌握SpringBoot和Leaflet在WebGIS開發中的應用方法,還能夠深入理解如何將天氣數據與地理信息進行有效結合,為后續開發類似的地理信息應用奠定堅實的基礎。讓我們一起踏上這場WebGIS與天氣服務融合的實戰之旅,探索其中的技術奧秘和應用價值。

一、需求描述

????????區縣作為我國行政區劃的基本單位,在氣象服務方面具有重要的意義。不同區縣的地理環境、氣候特點各異,對于天氣信息的需求也各不相同。因此,構建一個能夠展示區縣當前天氣的WebGIS系統,不僅能夠滿足公眾對于本地天氣的關注,還能夠為政府部門、企業等提供決策支持,例如在災害天氣預警、農業生產規劃、交通管理等方面發揮重要作用。通過對區縣天氣數據的實時監測和分析,可以更好地了解天氣變化趨勢,提前采取相應的措施,減少天氣對人們生活和經濟活動的影響。?

1、功能需求

????????支持在地圖上對區縣區域范圍進行展示,同時在Web界面上對天氣實況和生活指數。需要提供全國區縣的列表展示,支持按照區縣名稱進行模糊查詢。在之前的博文中,我們對如何使用百度天氣進行查詢,但是沒有一個可展示的Web界面對返回成果進行展示。

2、技術實現流程

????????如上圖是一個簡單的基于百度天氣的在線查詢案例,PostGIS獲取區縣Geometry完全基于本地離線倉庫實現查詢。天氣查詢接口需要依賴百度的天氣接口,因此需要網絡環境支持,如果服務不支持聯網,那么需要考慮其它的構建方式,比如使用單向網閘進行數據單向導入等。?

二、SpringBoot后臺實現

????????SpringBoot作為當前流行的Java開發框架,以其簡潔的配置和強大的功能得到了廣大開發者的青睞。它能夠快速搭建起一個穩定、高效的后端服務,為WebGIS系統的開發提供了堅實的基礎。通過SpringBoot,我們可以方便地集成各種第三方服務和庫,實現天氣數據的獲取、處理和存儲等功能。同時,SpringBoot的微服務架構也使得系統的擴展性和可維護性得到了極大的提升,能夠更好地應對復雜的業務需求和高并發的訪問場景。本節將重點介紹如何使用SpringBoot來進行后端的PostGIS數據范圍查詢和天氣查詢服務。

1、控制層實現

????????為了演示集成使用,這里不做特別復雜的轉換也封裝,也不對后臺接口返回的數據進行再次包裝,將原始數據進行展示。直接在SpringBoot中的Controller中進行直接調用。核心方法如下:

/**
* - 跳轉區縣天氣
* @return
*/
@RequiresPermissions("eq:weather:view")
@GetMapping("/weather/{id}")
public String weather(@PathVariable("id") Long id,ModelMap mmap) {mmap.put("areaId", id);return prefix + "/weather";
}@RequiresPermissions("eq:weather:data")
@PostMapping("/weather/{id}")
@ResponseBody
public AjaxResult weatherData(@PathVariable("id") Long id) {Area area = areaService.getById(id);HttpResponse<String> result = baiduWeatherServcie.getWeather(String.valueOf(area.getAreaCode()), "all", BAIDU_CLIENT_AK);return AjaxResult.success().put("data", result.getBodyToString());
}

2、區縣數據返回

????????再來看一下從后臺請求百度天氣接口的數據返回示例,如下:

????????在百度的天氣接口中直接返回的數據包含當前實時天氣、生活指數、位置信息、未來24小時天氣、未來一周(七天)的天氣等。將數據返回給前端以后,后續就可以基于Leaflet來進行相關信息的展示。 將在下一節中進行重點介紹。

三、WebGIS前端實現

????????Leaflet是一個輕量級的開源JavaScript庫,專門用于開發交互式地圖應用。它具有簡潔的API、高效的性能和良好的兼容性,能夠輕松地在網頁中嵌入地圖,并實現地圖的基本操作,如縮放、平移、標記等。Leaflet還提供了豐富的插件支持,可以方便地擴展地圖的功能,如添加天氣圖層、繪制地理要素等。通過與SpringBoot的結合,Leaflet可以作為前端展示的核心工具,將后端獲取的天氣數據以直觀的方式呈現在地圖上,為用戶提供良好的視覺體驗。本節將重點介紹如何使用Leaflet來對區縣區域范圍以及區縣的天氣信息進行展示。

1、區位信息展示

????????主要使用Leaflet對區縣的行政區域范圍Geometry進行展示,在后臺使用SpringBoot調用PostGIS調取空間數據表信息,將結果以Geojson的形式進行返回。獲取Geojson的方法在之前的系列博文中均有所介紹,在此不再進行贅述。這里介紹如何在Leaflet中進行區位信息展示。

function previewArea(gid,name){var myStyle = {color:"red",weight:5,"opacity":0.6};$.ajax({  type:"get",  url:prefix + "/geojson/" + gid,  data:{},  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){var areaLayer = L.geoJSON(JSON.parse(result.data),{style:myStyle}).addTo(mymap);var myIcon = L.divIcon({className: 'my-div-icon',iconSize: 100});showLayerGroup.clearLayers();showLayerGroup.addLayer(areaLayer);mymap.fitBounds(areaLayer.getBounds());//中心點位L.marker(areaLayer.getBounds().getCenter(), { icon: myIcon}).addTo(showLayerGroup);}},error:function(){$.modal.alertWarning("獲取空間信息失敗");}});
}

?2、天氣信息展示

????????為了展示方便,在地圖界面上左邊展示區縣行政范圍,在右邊展示實時天氣信息和生活指數信息。而天氣信息和生活指數信息通過調用第三方接口進行獲取。在這里需要通過接口對數據進行準換,將數據回寫到頁面中。首先在頁面中定義以下html網頁,用于展示天氣實時信息,代碼如下:

<div class="ibox" style="overflow: auto;"><div class="panel panel-primary"><div class="panel-heading"><span id="location"></span>&nbsp;&nbsp;天氣實況數據</div><div class="panel-body"><p id="nowInfo"></p></div></div><table class="table table-bordered white-bg" ><thead><tr><th>生活指數</th><th>指數概要</th><th width="60%">指數說明</th></tr></thead><tbody id="indexData"></tbody></table>
</div>

????????接下來就是將通過接口返回的數據調用DOM綁定到頁面上,如下圖所示:

function showWeather(){$.ajax({  type:"post",  url:prefix + "/weather/" + [[${areaId + ''}]],  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){debugger;console.log(result.data);var weatherData = JSON.parse(result.data);var location = weatherData.result.location;var locData = location.province+"," + location.city + "," + location.name;$("#location").html(locData);var now = weatherData.result.now;var wInfo = now.text +";氣溫:" + now.temp + "(℃),體感溫度:" +now.feels_like + ",相對濕度:" + now.rh ;wInfo += "%," +now.wind_dir + now.wind_class + ",云量:" + now.clouds + "%,1小時累計降水量(mm):" + now.prec_1h + ",能見度"+ now.vis + "米。";wInfo += "空氣質量指數:" + now.aqi + ",pm2.5濃度:" + now.pm25 + "μg/m3,pm10濃度:" + now.pm10 + "μg/m3,";wInfo += "二氧化氮濃度:"+now.no2 + "μg/m3,二氧化硫濃度:" + now.so2 + "μg/m3,臭氧濃度:" + now.o3+ "μg/m3," ;wInfo += "一氧化碳濃度:" + "μg/m3。<hr/><span style='float:right;'>數據更新時間:" + now.uptime + "</font>"; $("#nowInfo").html(wInfo);var indexDataInfo = "";for(var i = 0 ;i<weatherData.result.indexes.length;i++){var _idxData = weatherData.result.indexes[i];indexDataInfo += "<tr><td>" + _idxData.name + "</td><td>" + _idxData.brief + "</td><td>" + _idxData.detail + "</td></tr>";}$("#indexData").html(indexDataInfo);}},error:function(){$.modal.alertWarning("獲取信息失敗");}});}

????????以上就是使用Leaflet對區縣城市信息進行WebGIS前端展示的實現。最后我們來看一下實際效果。

四、成果展示

????????本節對相關區縣的天氣實況進行展示,篇幅有限不能逐一展開,這里選取一些城市作為實例。如有關注的重點城市也可以私聊。

1、魔都上海

????????上海市,上海市,長寧區??天氣實況數據:晴;氣溫:35(℃),體感溫度:38,相對濕度:55%,東風1級,云量:0%,1小時累計降水量(mm):0,能見度27600米。空氣質量指數:35,pm2.5濃度:14μg/m3,pm10濃度:24μg/m3,二氧化氮濃度:15μg/m3,二氧化硫濃度:5μg/m3,臭氧濃度:109μg/m3,一氧化碳濃度:μg/m3。?

????????不得不說,上海的天氣也是比較熱辣的。

2、蜀地成都

????????四川省,成都市,雙流??天氣實況數據:陰;氣溫:26(℃),體感溫度:28,相對濕度:77%,北風1級,云量:95%,1小時累計降水量(mm):0,能見度18700米。空氣質量指數:36,pm2.5濃度:16μg/m3,pm10濃度:36μg/m3,二氧化氮濃度:21μg/m3,二氧化硫濃度:6μg/m3,臭氧濃度:49μg/m3,一氧化碳濃度:μg/m3。?

????????天府之國,天氣還是比較舒服的。?

3、湖南桂東

????????暑假來臨,湖南全省氣溫每天都是熱辣滾燙,郴州桂東絕對還是不錯的。在眾多的38度39當中屬于比較涼爽的存在了。

????????湖南省,郴州市,桂東??天氣實況數據:晴;氣溫:30(℃),體感溫度:32,相對濕度:51%,西北風2級,云量:14%,1小時累計降水量(mm):0,能見度6900米。空氣質量指數:35,pm2.5濃度:19μg/m3,pm10濃度:35μg/m3,二氧化氮濃度:8μg/m3,二氧化硫濃度:39μg/m3,臭氧濃度:82μg/m3,一氧化碳濃度:μg/m3。?

????????整體來說,比成都稍微熱一點,但是在湖南省內還是比較涼爽的。不知道您當前所在是哪個城市?天氣溫度又如何呢? 歡迎留言交流。

五、總結

????????以上就是本文的主要內容,在本實戰項目中,我們將詳細介紹如何利用SpringBoot和Leaflet集成在線天氣服務,實現區縣當前天氣的展示。我們將從系統需求分析、技術選型、后端開發、前端設計以及系統的測試與優化等多個方面進行闡述,逐步引導讀者完成整個系統的開發過程。通過本項目的實踐,讀者不僅能夠掌握SpringBoot和Leaflet在WebGIS開發中的應用方法,還能夠深入理解如何將天氣數據與地理信息進行有效結合,為后續開發類似的地理信息應用奠定堅實的基礎。行文倉促,定有不足之處,歡迎各位朋友在評論區批評指正,不勝感激。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87734.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87734.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87734.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

文心開源:文心大模型4.5系列全面開放,AI普惠時代加速到來

一場由4240億參數模型領銜的開源盛宴&#xff0c;正在重塑中國AI生態的底層邏輯 2025年6月30日&#xff0c;百度如約宣布全面開源其旗艦產品——文心大模型4.5系列。一次性開源10款模型&#xff0c;覆蓋從4240億參數的MoE多模態巨無霸到輕巧的0.3B端側模型&#xff0c;并同步開…

【運算放大器專題】基礎篇

1.1 運算放大器是放大了個寂寞嗎&#xff1f;—初識運算放大器 為了解決震蕩問題&#xff0c;人為加了一些補償網絡之后導致的高頻特性差 1.2歐姆定律和獨立源 1正弦2方波3脈沖 電壓源是平行于i軸的橫線 1.3有伴源和運放緩沖器 有伴指的是有電阻&#xff0c;有伴是壞事&#…

英偉達 jetson nano 從NFS啟動,使用英偉達提供的rootfs根文件系統

0、目標 為了方便驅動階段的開發&#xff0c;并且使用英偉達提供的上層應用&#xff0c;這里希望使jetson nano 從NFS啟動&#xff0c;同時使用英偉達提供的rootfs根文件系統。 1、硬件準備 確保jetson nano 板子和開發主機之間使用網線進行連接&#xff08;保持板子和開發主…

廣州華銳互動:以創新科技賦能教育,開啟沉浸式學習?

在教育領域&#xff0c;廣州華銳互動致力于打破傳統教學的局限性&#xff0c;為師生們帶來全新的沉浸式學習體驗。廣州華銳互動通過開發 VR 虛擬教學課件&#xff0c;將抽象的知識轉化為生動、逼真的虛擬場景&#xff0c;讓學生能夠身臨其境地感受知識的魅力 。比如在歷史課上&…

Grok 4 最新技術評測與發布指南

TL;DR&#xff1a;馬斯克跳過Grok 3.5直接發布Grok 4&#xff0c;計劃在7月4日后上線&#xff0c;專注編程模型優化&#xff0c;這次"極限迭代"能否讓馬斯克在AI軍備競賽中翻盤&#xff1f; &#x1f4cb; 文章目錄 &#x1f680; Grok 4發布概況&#x1f3c6; Grok…

為什么音視頻通話需要邊緣加速

? 主要原因 ? 降低傳輸延遲 用戶與邊緣節點之間通常1-2跳即可完成連接&#xff0c;避免跨國、跨運營商長鏈路傳輸 保障音視頻信令、媒體流快速到達&#xff0c;控制端到端延遲 ? 提升弱網環境下的連接穩定性 邊緣節點具備鏈路優化、丟包補償、轉發中繼功能 即使在WiFi切…

小架構step系列05:Springboot三種運行模式

1 概述 前面搭建工程的例子&#xff0c;運行的是一個桌面程序&#xff0c;并不是一個Web程序&#xff0c;在這篇中我們把它改為Web程序&#xff0c;同時從啟動角度看看它們的區別。 2 Web模式 2.1 桌面例子 回顧一下前面的例子&#xff0c;其pom.xml的配置如下&#xff1a;…

LoRaWAN的設備類型有哪幾種?

LoRaWAN&#xff08;Long Range Wide Area Network&#xff09;是一種專為物聯網&#xff08;IoT&#xff09;設備設計的低功耗、長距離通信協議。它根據設備的功能和功耗需求&#xff0c;將設備分為三種類型&#xff1a;Class A、Class B 和 Class C。每種設備類型都有其獨特的…

三維目標檢測|Iou3D 代碼解讀一

本文對OpenPCDet項目中的iou3d模塊中的iou3d_nms_kernel.cu代碼進行解讀&#xff0c;本次解決的函數是box_overlap&#xff0c;它的輸入是兩個包圍盒&#xff0c;輸出是兩個包圍盒在bev下的重疊面積&#xff0c;計算流程是 確定box_a和box_b的四個角落坐標 從包圍盒中提取坐標值…

探索實現C++ STL容器適配器:優先隊列priority_queue

前引&#xff1a; 在算法競賽中&#xff0c;選手們常常能在0.01秒內分出勝負&#xff1b;在實時交易系統中&#xff0c;毫秒級的延遲可能意味著數百萬的盈虧&#xff1b;在高并發服務器中&#xff0c;每秒需要處理數萬條不同優先級的請求——這些系統背后&#xff0c;都隱藏著同…

一、Dify 私有部署、本地安裝教程(LInux-openeuler)

官網&#xff1a;Dify AI Plans and Pricing 1.找到下載的位置。 2.可以切換文檔為中午文檔。 3.本次安裝使用Docker Compose 安裝&#xff0c;可以大致看一下文檔描述的配置信息要求。 4.各個版本信息&#xff0c;本次下載1.5.1版本&#xff0c;你也可以選擇安裝其他版本。 …

GASVM+PSOSVM+CNN+PSOBPNN+BPNN軸承故障診斷

一、各算法基本原理與技術特點 1. GASVM&#xff08;遺傳算法優化支持向量機&#xff09; 原理&#xff1a; 利用遺傳算法&#xff08;GA&#xff09;優化SVM的超參數&#xff08;如懲罰因子 C C C 和核函數參數 g g g&#xff09;。遺傳算法通過模擬自然選擇機制&#xff…

Python實例練習---魔法方法

&#xff08;主頁有對應知識點^V^&#xff09; 【練習要求】 針對知識點Python面向對象的魔法方法安排的本實例。要求實現&#xff1a;用__init__魔法方法定義書的長&#xff0c;寬&#xff0c;高&#xff0c;最后用__str__輸出返回值 【重要步驟提示】 定義class書類 2、使…

【從0-1的CSS】第3篇:盒子模型與彈性布局

文章目錄 盒子模型內容區content內邊距padding邊框border外邊距margin元素的寬度高度box-sizing屬性content-box&#xff1a;設置的width和height就是內容區的width和heightborder-box:設置的width和height是context padding border的width和height 彈性布局Flex容器的屬性fl…

設置LInux環境變量的方法和區別_Ubuntu/Centos

Linux環境變量可以通過export實現&#xff0c;也可以通過修改幾個文件來實現 1 通過文件設置LInux環境變量 首先是設置全局環境變量&#xff0c;對所有用戶都會生效 /etc/profile&#xff1a;該文件為系統的每個用戶設置環境信息&#xff0c;當用戶登錄時&#xff0c;該文件…

python緩存裝飾器實現方案

寫python的時候突然想著能不能用注解于是就寫了個這個 文章目錄 原始版改進點 原始版 import os import pickle import hashlib import inspect import functoolsdef _generate_cache_filename(func, *args, **kwargs):"""生成緩存文件名的內部函數""…

使用 java -jar xxxx.jar 運行 jar 包報錯: no main manifest attribute

1、問題描述 在Linux服務器上本想運行一下自己寫的一個JAR&#xff0c;但是報錯了&#xff01; no main manifest attribute, in first-real-server-1.0-SNAPSHOT.jar 2、解決辦法 在自己的Spring項目的啟動類&#xff08;xxx.xxx.xxx.XXXXApplication&#xff09;所在的Mo…

信號與槽的總結

信號與槽的總結 QT中的信號與Linux的信號對比 1&#xff09;信號源 2&#xff09;信號的類型 3&#xff09;信號的處理方式 QT信號與Linux信號的深度對比分析 一、信號源對比 QT信號 用戶定義信號 &#xff1a;由開發者通過 signals:關鍵字在QObject派生類中顯式聲明 cl…

Python Mitmproxy詳解:從入門到實戰

一、Mitmproxy簡介 Mitmproxy是一款開源的交互式HTTPS代理工具&#xff0c;支持攔截、修改和重放HTTP/HTTPS流量。其核心優勢在于&#xff1a; 多平臺支持&#xff1a;兼容Windows、macOS、Linux三端工具&#xff1a;提供命令行(mitmproxy)、Web界面(mitmweb)、數據流處理(mi…

刷題筆記--串聯所有單詞的子串

題目&#xff1a;1、我的寫法&#xff08;超時&#xff09;從題面自然想到先用回溯算法把words的全排列先算出來&#xff0c;然后遍歷字符串s一次將符合條件的位置加入結果全排列計算所有可能字符串算法寫法&#xff1a;這是一個模板用于所有全排列算法的情況&#xff0c;本質思…