杜春艷 成卓
摘要:大氣環(huán)境問題日益嚴(yán)重,為了實(shí)時監(jiān)測大氣環(huán)境數(shù)據(jù),利用微服務(wù)架構(gòu)搭建前后端模塊,設(shè)計(jì)了大氣環(huán)境監(jiān)測系統(tǒng)。系統(tǒng)包含七大功能模塊:大氣環(huán)境監(jiān)測模塊、天氣查詢模塊、疫情防控模塊、定位模塊、用戶管理模塊、實(shí)時光照強(qiáng)度監(jiān)測模塊以及圖像采集模塊,對這些模塊分別進(jìn)行了設(shè)計(jì)和實(shí)現(xiàn)。測試結(jié)果表明,該系統(tǒng)能夠很好地監(jiān)測大氣環(huán)境數(shù)據(jù)。
關(guān)鍵詞:微服務(wù);大氣環(huán)境監(jiān)測;功能模塊
中圖分類號:TP311 文獻(xiàn)標(biāo)志碼:A 文章編號:1008-1739(2021)11-68-6
0引言
工業(yè)飛速發(fā)展使得人們生活水平日益提高,也使得環(huán)境污染日益加劇,尤其是大氣污染,污染源增加、污染范圍不斷擴(kuò)大,嚴(yán)重影響了人們的身體健康和國家的長遠(yuǎn)發(fā)展。根據(jù)2020年2月11日聯(lián)合國環(huán)境規(guī)劃署、聯(lián)合國人居署及瑞士空氣質(zhì)量技術(shù)公司IQAir共同發(fā)布的全球最大的空氣質(zhì)量數(shù)據(jù),匯集4 000多個貢獻(xiàn)者提供的實(shí)時空氣污染數(shù)據(jù),觸達(dá)用戶超過1500萬人,覆蓋全球7000多個城市。全球每年有700萬人死于空氣污染,其中65萬是兒童。
建立健全高效的大氣環(huán)境監(jiān)測系統(tǒng),可以實(shí)時檢測整個區(qū)域,分析區(qū)域空氣質(zhì)量整體狀況和變化趨勢、實(shí)時發(fā)布整個區(qū)域的空氣質(zhì)量。而且隨著監(jiān)測數(shù)據(jù)的積累,可以進(jìn)一步開展大數(shù)據(jù)分析和深度挖掘,或者污染起源解析、聚類分析等科研應(yīng)用。從而實(shí)現(xiàn)城市區(qū)域大氣污染濃度的時空動態(tài)變化趨勢分析,對污染源起到最大程度的監(jiān)管作用,為環(huán)境執(zhí)法的決策提供直接依據(jù),所以建立此系統(tǒng)是非常必要的。
1關(guān)鍵技術(shù)
1.1 Spring Cloud
Spring Cloud是一個基于Spring Boot實(shí)現(xiàn)的服務(wù)治理工具包,在微服務(wù)架構(gòu)中用于管理和協(xié)調(diào)服務(wù),是一系列框架的有序集合,利用Spring Boot的開發(fā)和便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如配置中心、消息總線、負(fù)載均衡等,都可以用Spring Boot的開發(fā)風(fēng)格做到一鍵啟動和部署。
Spring Cloud將目前各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來,通過Spring Boot風(fēng)格進(jìn)行再封裝,屏蔽復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者留出一套簡單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。
1.2 Spring Boot
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置,就能創(chuàng)建一個獨(dú)立的、產(chǎn)品級別的Spring應(yīng)用。SpringBoot的核心思想就是約定大于配置,多數(shù)Spring Boot應(yīng)用只需要很少的Spring配置。采用Spring Boot可以大大簡化開發(fā)模式,所有需要集成的常用框架,Spring Boot都有對應(yīng)的組件支持。
1.3 layui與EChalns
layui是一款采用自身模塊規(guī)范編寫的前端uI框架,遵循原生HTML/CSS/JS的書寫與組織形式,對使用者的能力要求比較低。layui的外在極簡卻功能豐富,從核心代碼到API都經(jīng)過精心打磨,無需各種前端工具的復(fù)雜配置,非常適合頁面的快速開發(fā)。
ECharts是一個使用JavaScript實(shí)現(xiàn)的開源可視化庫,可以流暢運(yùn)行在PC和移動設(shè)備上,兼容當(dāng)前大部分瀏覽器,可以提供直觀、交互豐富的數(shù)據(jù)可視化圖表。
2系統(tǒng)功能與設(shè)計(jì)
大氣環(huán)境監(jiān)測系統(tǒng)主要有七大功能模塊,分別是定位模塊、大氣環(huán)境監(jiān)測模塊、天氣模塊、疫情防控模塊、用戶模塊、實(shí)時光照強(qiáng)度監(jiān)測模塊和圖像采集模塊,每個模塊分為前端與后端2個部分,整個系統(tǒng)的功能模塊結(jié)構(gòu)如圖1所示。
2.1定位模塊功能設(shè)計(jì)
2.1.1前端功能設(shè)計(jì)
在頁面中使用HTML5中地理定位API獲取當(dāng)前所在位置的經(jīng)緯度,傳遞給后端。
2.1.2定位模塊后端功能設(shè)計(jì)
為了提供更準(zhǔn)確的服務(wù),很多網(wǎng)站都會獲取用戶當(dāng)前所在的地理位置。該系統(tǒng)的核心功能之一就是獲取當(dāng)前所在地理位置,確定所在城市。
目前比較常用的獲取地理位置的方法有2種:一種是通過本機(jī)IP地址獲取,利用IP地址去查詢特定數(shù)據(jù)庫,該數(shù)據(jù)庫是經(jīng)過長時間的數(shù)據(jù)累積而成,經(jīng)過比較之后可以從數(shù)據(jù)庫中提取相應(yīng)的地理位置信息;另一種方法是使用HTML5中地理定位API獲取當(dāng)前所在位置的經(jīng)緯度,然后將抽象的經(jīng)緯度轉(zhuǎn)換成可讀的有意義的真正的用戶地理位置信息,系統(tǒng)采用的是第2種HTML5方法。
2.2大氣環(huán)境監(jiān)測模塊功能設(shè)計(jì)
2.2.1前端功能設(shè)計(jì)
用戶登錄成功后進(jìn)入大氣環(huán)境查詢平臺的大氣環(huán)境監(jiān)測頁面,導(dǎo)航欄中向用戶展示了城市大氣環(huán)境監(jiān)測的簡要信息,包括日期、星期、城市以及空氣質(zhì)量指數(shù)(AQI)。
頁面初始化地理位置為北京市,用戶可點(diǎn)擊定位按鈕更改地理位置,獲取當(dāng)前所在城市大氣環(huán)境監(jiān)測各項(xiàng)數(shù)據(jù),也可通過在搜索框中搜索,得到所需城市的大氣環(huán)境監(jiān)測數(shù)據(jù)。由于大氣環(huán)境監(jiān)測站點(diǎn)并不是在所有城市都有分布,所以在搜索框中輸入關(guān)鍵字時會出現(xiàn)城市提示,只能輸入在搜索框下?lián)碛刑崾镜某鞘小?/p>
在頁面的主體部分用表格展示了城市大氣環(huán)境中6種污染物在大氣環(huán)境中的濃度、當(dāng)前大氣中的主要污染物以及AQI。為了方便觀察各污染物濃度變化,在頁面中以折線圖的方式將近15天SO2、NO2、CO、O3、PM2.5、PM10、PM2.5、PM10和空氣質(zhì)量指數(shù)濃度變化予以展示。
2.2.2后端功能設(shè)計(jì)
本系統(tǒng)的核心數(shù)據(jù)管理之一是大氣環(huán)境監(jiān)測數(shù)據(jù)信息管理,用戶能在前端看到城市的大氣環(huán)境監(jiān)測數(shù)據(jù)。用戶發(fā)送大氣環(huán)境監(jiān)測請求之后,大氣環(huán)境監(jiān)測功能開始運(yùn)作。系統(tǒng)獲取當(dāng)日大氣環(huán)境監(jiān)測數(shù)據(jù)以及近15天大氣環(huán)境監(jiān)測數(shù)據(jù)。成功獲取大氣環(huán)境監(jiān)測數(shù)據(jù)之后將數(shù)據(jù)寫入數(shù)據(jù)庫,當(dāng)用戶再次發(fā)送大氣環(huán)境監(jiān)測請求時,不需要重新獲取大氣數(shù)據(jù)。
用戶執(zhí)行定位功能,系統(tǒng)重新獲取當(dāng)前所在城市的大氣環(huán)境監(jiān)測數(shù)據(jù)以及當(dāng)前城市近15天大氣環(huán)境監(jiān)測數(shù)據(jù)。成功獲取大氣環(huán)境監(jiān)測數(shù)據(jù)之后將數(shù)據(jù)寫入數(shù)據(jù)庫,當(dāng)用戶重新發(fā)送定位請求時,不需要重新獲取大氣數(shù)據(jù)。如果當(dāng)前定位城市未建立大氣環(huán)境監(jiān)測站點(diǎn),則會將城市修改為當(dāng)前城市所在地的省會城市。
用戶在輸入框中輸入所需要的城市時,由于并不是所有城市都建立了大氣環(huán)境監(jiān)測站點(diǎn),所以查詢的城市是有限制的。在用戶輸入時會出現(xiàn)提示,防止用戶輸入的城市沒有大氣環(huán)境監(jiān)測站點(diǎn),無法獲取大氣環(huán)境監(jiān)測數(shù)據(jù)。輸入合法城市之后,系統(tǒng)會獲取當(dāng)前所查找城市的大氣環(huán)境監(jiān)測數(shù)據(jù)以及當(dāng)前查找城市近15天大氣環(huán)境監(jiān)測數(shù)據(jù),成功獲取大氣環(huán)境監(jiān)測數(shù)據(jù)之后將數(shù)據(jù)寫入數(shù)據(jù)庫,當(dāng)用戶再次查詢該城市時,不需要重新獲取大氣數(shù)據(jù)。
2.3天氣模塊功能設(shè)計(jì)
2.3.1前端功能設(shè)計(jì)
點(diǎn)擊天氣查詢后進(jìn)入大氣環(huán)境查詢平臺的天氣信息查詢頁面,導(dǎo)航欄中向用戶展示了城市天氣的簡要信息,包括城市、天氣、最高氣溫、最低氣溫以及空氣質(zhì)量等級。獲取當(dāng)前所在城市天氣情況的各項(xiàng)數(shù)據(jù),也可通過在搜索框中搜索,以得到所查詢的城市的天氣情況。
在頁面的主體部分用表格展示了城市實(shí)時氣溫、天氣、日溫、夜溫、風(fēng)向、風(fēng)力等級、風(fēng)速、空氣濕度、空氣質(zhì)量以及出行建議。為了方便觀察,了解氣溫變化,在頁面中以折線圖的方式將近15天每天最高氣溫與最低氣溫,空氣濕度變化予以展示。
2.3.2后端功能設(shè)計(jì)
天氣數(shù)據(jù)信息管理也是本系統(tǒng)的核心數(shù)據(jù)管理之一,系統(tǒng)后端實(shí)時獲取天氣數(shù)據(jù),然后進(jìn)行相關(guān)處理之后存入數(shù)據(jù)庫,前端頁面才有數(shù)據(jù)可以展示。
用戶發(fā)送天氣查詢請求之后,天氣功能開始運(yùn)作。成功獲取天氣數(shù)據(jù)之后將數(shù)據(jù)寫入數(shù)據(jù)庫,當(dāng)用戶再次發(fā)送天氣查詢請求時,不需要重新獲取天氣數(shù)據(jù)。
用戶點(diǎn)擊定位按鈕,執(zhí)行定位功能成功之后系統(tǒng)獲取到當(dāng)前所在城市,系統(tǒng)重新獲取當(dāng)前所在城市的天氣數(shù)據(jù)以及當(dāng)前城市近15天的天氣數(shù)據(jù)。成功獲取天氣數(shù)據(jù)之后將數(shù)據(jù)寫入數(shù)據(jù)庫,當(dāng)用戶重新發(fā)送定位請求時,不需要重新獲取天氣數(shù)據(jù)。
2.4疫情防控模塊功能設(shè)計(jì)
2.4.1前端功能設(shè)計(jì)
點(diǎn)擊“全民戰(zhàn)‘疫”后進(jìn)入最新疫情信息顯示頁面,向用戶展示最新的疫情資訊報(bào)道,國內(nèi)外最新的詳細(xì)疫情信息,包括現(xiàn)存確診人數(shù)、累計(jì)確診人數(shù)、現(xiàn)存疑似人數(shù)、累計(jì)治愈人數(shù)、累計(jì)死亡人數(shù)、現(xiàn)存重癥人數(shù)、新增疑似人數(shù)、相比昨天現(xiàn)存確診人數(shù)、相比昨天累計(jì)確診人數(shù)、相比昨天新增治愈人數(shù)、相比昨天新增死亡人數(shù)以及相比昨天現(xiàn)存的重癥人數(shù)。
2.4.2后端功能設(shè)計(jì)
疫情信息管理是本系統(tǒng)的數(shù)據(jù)管理之一,系統(tǒng)后端獲取到了當(dāng)天疫情數(shù)據(jù),數(shù)據(jù)包括疫情資訊以及國內(nèi)外疫情數(shù)據(jù),然后存入數(shù)據(jù)庫,前端頁面才有數(shù)據(jù)可以展示。
3功能實(shí)現(xiàn)
3.1用戶模塊前端登錄頁面、注冊頁面實(shí)現(xiàn)
3.1.1頁面分析
頁面基于前端框架layui,配合HTML5、CSS、JavaScript共同設(shè)計(jì)完成的,追求簡單、直觀實(shí)用。登錄頁面是平臺啟動打開的初始頁面,用來輸入用戶名與密碼。若用戶未使用過平臺,則需要進(jìn)入注冊頁面進(jìn)行新用戶注冊。用戶可在注冊頁面自定義用戶名,輸入密碼以及確認(rèn)密碼。頁面效果如圖2和圖3所示。
3.1.2頁面實(shí)現(xiàn)
登錄頁面的主要功能是將用戶名與密碼提交給后端。頁面使用input標(biāo)簽接收用戶輸入的用戶名與密碼,使用form表單封裝數(shù)據(jù)。為form添加action="/userLogin"響應(yīng),點(diǎn)擊登錄button之后,表單將以post的方式帶著表單中的數(shù)據(jù)一起發(fā)起請求。
注冊頁面的主要功能是將新用戶的注冊信息提交給后端。頁面使用input標(biāo)簽接收用戶輸入的用戶名、密碼以及確認(rèn)密碼,編寫js代碼,使用layui的表單校驗(yàn)功能判斷用戶所輸入的用戶名是否符合規(guī)定以及2次輸入的密碼是否一致。使用form表單包裝數(shù)據(jù),為form添加action="/userRegister"響應(yīng),點(diǎn)擊立即提交button之后,表單將以post的方式帶著表單中的數(shù)據(jù)一起發(fā)起請求。
3.2大氣環(huán)境監(jiān)測模塊前端頁面實(shí)現(xiàn)
3.2.1頁面分析
用戶登陸成功之后,第一個頁面是大氣環(huán)境監(jiān)測頁面,主要展示城市大氣環(huán)境監(jiān)測數(shù)據(jù),近15天空氣中6種污染物在大氣中的濃度變化以折線圖形式展示,頁面效果如圖4所示。
3.2.2頁面實(shí)現(xiàn)
由于用戶登錄信息保存在cookie中,編寫js代碼從cookie中獲取用戶登錄信息。若cookie中存在登錄信息,修改頁面標(biāo)簽將請登錄修改為該用戶的用戶名。后端定義首次訪問城市為首都北京,由于頁面使用Thymeleaf模板引擎,可以使用${}獲取request域中的大氣環(huán)境監(jiān)測數(shù)據(jù)并在相應(yīng)位置顯示,使用layui表格組件,展示完整大氣環(huán)境監(jiān)測數(shù)據(jù)。
使用隱藏input標(biāo)簽接收6種大氣污染物歷史含量列表,編寫js文件使用echags將數(shù)據(jù)列表轉(zhuǎn)換為圖表。
用戶點(diǎn)擊定位按鈕,頁面利用HTML5地理位置屬性,獲取當(dāng)前地理位置經(jīng)緯度,攜帶經(jīng)緯度信息發(fā)送ajax請求給后端。在ajax執(zhí)行成功之后的回調(diào)函數(shù)中,大氣環(huán)境監(jiān)測數(shù)據(jù)已經(jīng)更新。通過ID獲取指定標(biāo)簽,修改其內(nèi)容,完成頁面重新渲染。
用戶在查詢框中輸入城市名,由于大氣環(huán)境監(jiān)測站點(diǎn)有地區(qū)限制,需要提醒用戶所輸入的城市是否存在站點(diǎn),并給出城市提示。當(dāng)用戶在input中輸入時,監(jiān)聽用戶所輸入的內(nèi)容,攜帶此內(nèi)容發(fā)送ajax請求到后端,在ajax執(zhí)行成功之后的回調(diào)函數(shù)中遍歷后端返回?cái)?shù)據(jù),不為空則緊貼輸入框下動態(tài)添加標(biāo)簽顯示城市提示信息,輸入框失去焦點(diǎn)后,刪除所有提示標(biāo)簽。為搜索按鈕綁定onclick事件,用戶輸入合法城市后點(diǎn)擊搜索按鈕會發(fā)起攜帶搜索信息的ajax請求,在ajax執(zhí)行成功之后的回調(diào)函數(shù)中,大氣環(huán)境監(jiān)測數(shù)據(jù)已經(jīng)更新。通過ID獲取指定標(biāo)簽,修改其內(nèi)容,完成頁面重新渲染。
3.3天氣模塊前端頁面實(shí)現(xiàn)
3.3.1頁面分析
天氣頁面實(shí)時展示城市天氣數(shù)據(jù),未來7天的天氣預(yù)報(bào)以及將近15天的最高氣溫、最低氣溫和空氣濕度變化以折線圖形式展示,頁面效果如圖5所示。
3.3.2頁面實(shí)現(xiàn)
用戶點(diǎn)擊左側(cè)天氣標(biāo)簽之后,頁面跳轉(zhuǎn)至天氣頁面。由于用戶登錄信息保存在cookie中,編寫js代碼從cookie中獲取用戶登錄信息,若cookie中存在登錄信息,修改頁面標(biāo)簽將請登錄修改為該用戶的用戶名。后端定義首次訪問城市為首都北京,由于頁面使用Thymeleaf模板引擎,可以使用${}獲取request域中的天氣數(shù)據(jù)并在相應(yīng)位置顯示,使用layui表格組件,展示詳細(xì)天氣數(shù)據(jù)。編寫js文件遍歷七日天氣預(yù)報(bào)信息列表,動態(tài)添加li標(biāo)簽展示天氣預(yù)報(bào)信息。將此部分的display屬性設(shè)置為影藏,點(diǎn)擊7目標(biāo)簽選項(xiàng),將今日詳細(xì)天氣數(shù)據(jù)列表display屬性修改為行藏,將天氣預(yù)報(bào)模塊display屬性修改為展示。點(diǎn)擊今日標(biāo)簽選項(xiàng),將今日詳細(xì)天氣數(shù)據(jù)列表display屬性修改為顯示,將天氣預(yù)報(bào)模塊display屬性修改為隱藏。
使用隱藏input標(biāo)簽接收歷史最高氣溫、最低氣溫和空氣濕度數(shù)據(jù)列表,編寫js文件使用echarts將數(shù)據(jù)列表轉(zhuǎn)換為圖表。
用戶點(diǎn)擊定位按鈕,頁面利用HTML5地理位置屬性,獲取當(dāng)前地理位置經(jīng)緯度,攜帶經(jīng)緯度信息發(fā)送ajax請求給后端。在ajax執(zhí)行成功之后的回調(diào)函數(shù)中,天氣數(shù)據(jù)已經(jīng)更新。通過ID獲取指定標(biāo)簽,修改其內(nèi)容,完成頁面重新渲染。
用戶在查詢框中輸入城市名,為搜索按鈕綁定onclick事件,用戶輸入城市后點(diǎn)擊搜索按鈕會發(fā)起攜帶搜索信息的ajax請求,在ajax執(zhí)行成功之后的回調(diào)函數(shù)中,大氣環(huán)境監(jiān)測數(shù)據(jù)已經(jīng)更新。通過ID獲取指定標(biāo)簽,修改其內(nèi)容,完成頁面重新渲染。
3.4用戶模塊前端個人信息頁面實(shí)現(xiàn)
3.4.1頁面分析
用戶在信息管理頁面可以補(bǔ)全用戶信息以及修改密碼等除用戶名外的所有信息。頁面效果如圖6所示。
3.4.2頁面實(shí)現(xiàn)
用戶在注冊時只定義了用戶名與密碼,用戶在登錄成功之后可以進(jìn)一步完善用戶信息。使用input標(biāo)簽接收用戶輸入,編寫js代碼使用layui表單校驗(yàn)組件,校驗(yàn)用戶所輸入的各項(xiàng)數(shù)據(jù)是否符合規(guī)定。使用form表單封裝所有數(shù)據(jù),為表單綁定action響應(yīng)函數(shù),用于點(diǎn)擊提交按鈕,表單以post方式提交數(shù)據(jù)。
用戶信息修改,若用戶已補(bǔ)全用戶信息,再次訪問此頁面是會顯示全部用戶信息。用戶修改完數(shù)據(jù)之后。使用form表單封裝所有數(shù)據(jù),為表單綁定action響應(yīng)函數(shù),用于點(diǎn)擊提交按鈕,表單以post方式提交修改后的數(shù)據(jù)。
3.5疫情防控模塊前端頁面實(shí)現(xiàn)
3.5.1頁面分析
全民戰(zhàn)“疫”頁面主要展示最新疫情相關(guān)新聞報(bào)道、國內(nèi)最新疫情數(shù)據(jù)信息以及國外疫情數(shù)據(jù)信息,頁面效果如圖7所示。
3.5.2頁面實(shí)現(xiàn)
后端已經(jīng)將疫情新聞列表存放在request域中,在頁面js代碼中通過[[${}]]獲取疫情新聞列表,遍歷列表動態(tài)添加lib標(biāo)簽,展示新聞信息。編寫js代碼使用layui表格組件,展示我國詳細(xì)疫情數(shù)據(jù)和國外詳細(xì)疫情數(shù)據(jù)。
3.6后端圖像采集微服務(wù)實(shí)現(xiàn)
本模塊將圖像采集系統(tǒng)服務(wù)器端作為一個微服務(wù)注冊到注冊中心。圖像采集服務(wù)器端利用Socket技術(shù)接收客戶端的圖像數(shù)據(jù)。將服務(wù)器集成到微服務(wù)架構(gòu)中時,使用Spring Boot改寫系統(tǒng),讓系統(tǒng)輕便簡潔。
新建一個maven module項(xiàng)目,添加注冊啟動類后在其pom文件中添加Spring Boot配置,編寫application.yml文件將服務(wù)指向注冊中心。因?yàn)樵摲?wù)器端邏輯功能已經(jīng)實(shí)現(xiàn),現(xiàn)在只需要將系統(tǒng)邏輯移植在本Spring Boot項(xiàng)目中。
3.6.1功能分析
圖像采集服務(wù)器端由3個主要功能組成:圖像獲取、圖像顯示以及圖像保存。系統(tǒng)安卓端與服務(wù)器端通過Socket進(jìn)行數(shù)據(jù)傳遞。安卓端設(shè)有一個圖像數(shù)據(jù)緩沖區(qū),在緩沖區(qū)滿后將緩沖區(qū)中的數(shù)據(jù)發(fā)送至服務(wù)器端。服務(wù)器端判斷接收的數(shù)據(jù)是否為一幀完整的圖片,若是則通過繪圖組件在顯示窗口進(jìn)行繪制,若不是則繼續(xù)接收。在圖像顯示過程中若有符合條件的圖像可點(diǎn)擊拍照按鈕,將該圖片保存。服務(wù)器端提供查詢功能,可按圖像名或拍照日期進(jìn)行搜索,若存在符合條件的圖像則在頁面進(jìn)行展示。
3.6.2功能實(shí)現(xiàn)
在用戶點(diǎn)擊拍照按鈕后,圖像保存功能開始運(yùn)轉(zhuǎn),圖像保存在用戶選定保存路徑,使用JFileChooser.getSelectedFile().getPath()獲取用戶選擇的路徑,使用字符串分割獲取圖像名,將相關(guān)信息封裝成實(shí)體類,直接調(diào)用mapper層方法將圖像信息保存至數(shù)據(jù)庫。
在非Controller層、Service層使用@Autowired注解需要進(jìn)行相關(guān)配置才能正常使用。首先使用@Component注解標(biāo)記工具類StatisticsUtils,然后使用@Autowired注入需要的bean,最后在工具類中編寫init()函數(shù),并使用@PostConstruct注解標(biāo)記工具類,初始化Bean。
3.7定位模塊實(shí)現(xiàn)
3.7.1功能分析
系統(tǒng)地理位置確定模塊先使用HTML5中地理定位API獲取當(dāng)前位置的經(jīng)緯度,再調(diào)用百度地圖API全球逆地理編碼,通過經(jīng)緯度確定所在城市。
地理定位是HTML5中新增的API特性,得到用戶允許后,使用JavaScript程序向?yàn)g覽器詢問用戶真實(shí)的地理位置。
全球逆地理編碼服務(wù)是一類Web API接口服務(wù),逆地理編碼服務(wù)提供將坐標(biāo)點(diǎn)(經(jīng)緯度)轉(zhuǎn)換為對應(yīng)位置信息功能。
3.7.2功能實(shí)現(xiàn)
地理位置模塊屬于大氣環(huán)境監(jiān)測模塊與天氣模塊的一個功能,用來獲取用戶當(dāng)前所在城市。用戶點(diǎn)擊定位按鈕后,頁面詢問用戶是否允許當(dāng)前應(yīng)用獲取位置信息,經(jīng)過用戶批準(zhǔn)后,頁面獲取用戶當(dāng)前位置信息(經(jīng)緯度)發(fā)送請求,后端攔截該請求之后調(diào)用全球逆地理編碼服務(wù)API獲取用戶當(dāng)前位置信息,截取其中的城市信息并返回。
4結(jié)束語
針對日益嚴(yán)重的大氣環(huán)境污染問題,利用微服務(wù)架構(gòu),設(shè)計(jì)了一個大氣環(huán)境監(jiān)測系統(tǒng),其前端展示數(shù)據(jù),后端處理存儲數(shù)據(jù)。實(shí)現(xiàn)了對大氣環(huán)境的實(shí)時監(jiān)測與結(jié)果展示,不足的是收集數(shù)據(jù)少,為了更好地監(jiān)測大氣數(shù)據(jù),下一步需要收集更多的數(shù)據(jù),完善系統(tǒng)。