高超越 李瑋祎


摘要:微信小程序具有不占內存、使用門檻低、分享裂變能力強等優點,契合公眾氣象服務需求,為此開發了一款基于微信小程序的公眾氣象服務應用。該應用包含天氣實況、城鎮預報、預警信息、分鐘級雷達降水趨勢預報和氣象圖形產品等多個功能頁面,能夠為公眾提供更加精細化、智慧化的氣象服務。
關鍵詞:微信小程序;公眾氣象服務
中圖分類號:TP311? ? ?文獻標識碼:A
文章編號:1009-3044(2023)36-0042-00
開放科學(資源服務)標識碼(OSID)
0 引言
微信小程序是依附于微信App的應用程序,具有不占內存、使用門檻低、分享裂變能力強等優點。小程序于2017年1月9日正式上線,截至2021年,全網微信小程序數量已超700萬,小程序開發者突破300萬,日活躍用戶數量超過4.5億。微信小程序有著操作簡單、使用方便、獲取方式多種多樣等特點,且分享傳播非常方便快捷,用戶可以基于微信隨時一鍵分享,任何人都可直接打開體驗。其獲取便捷、傳播性強的特性,與公眾氣象服務在提升信息傳播速度和覆蓋面上的需求高度契合[1]。
“內蒙古天氣”公眾號原有的功能基于傳統H5技術開發與運行,傳統H5技術對于業務邏輯復雜、交互要求高的應用使用起來體驗不佳,經常出現頂部綠色進度條需等待一段時間,而小程序在使用流暢度方面更有優勢,用戶使用體驗更好。通過將小程序和公眾號結合起來使用,一個負責實現功能和服務,一個負責實現消息的推送和用戶留存,可以完美發揮小程序和公眾號各自的優勢。
為了使公眾能夠通過微信及時享受便捷的氣象服務,隨時隨地掌握由氣象部門發布的精細化氣象服務產品,同時對“內蒙古天氣”微信公眾號的功能進行擴充和完善,利用微信小程序的開發技術,研發基于微信小程序的公眾氣象服務應用,將為氣象部門構建和發展智慧氣象服務以及實現高質量氣象現代化提供有力支撐。
1 小程序的設計
1.1 功能模塊設計
小程序的服務對象定位為社會公眾,設計目標是能夠解決用戶面臨的日常生活中常見的天氣問題。小程序主要功能有:城市定位、天氣預報、天氣實況、預警信息、地點搜索、降水早知道、圖形產品等,以簡單實用的功能給公眾提供所需的氣象服務[2]。小程序包括三個主要功能模塊,分別為“預報預警”“實況監測”和“專題服務”。小程序功能模塊結構圖如圖1所示。
1)“預報預警”模塊,提供公眾日常生活所需的基本的天氣服務信息,包括“看天氣”和“查預警”兩個子模塊。其中“看天氣”模塊的功能包括當前天氣實況、空氣質量指數、預警信息提示、今明兩天天氣預報、未來24小時逐小時預報、未來15天逐日預報和城市生活氣象指數等氣象信息的展示。用戶打開小程序時默認打開的首頁就是“看天氣”模塊,該模塊通過手機定位顯示基于用戶當前位置的實時天氣信息,同時也提供地點搜索功能,用戶可查詢全國其他地方的天氣信息。“查預警”模塊的主要功能是以地圖形式展示所有全區當前生效中的預警信息,預警圖標會按照預警覆蓋范圍定位到地圖相應的位置上。除地圖形式外還支持切換到以列表方式展示全區預警,在列表界面可按照預警種類、預警等級和發布單位進行分類查詢。點擊地圖中的預警圖標或列表中的單條預警將進入預警信息詳情頁。
2)“實況監測”模塊,為公眾提供相對專業的實況監測圖形產品,使公眾對當前天氣形勢有更加直觀的了解,增強小程序的實用性。該模塊主要包括降水早知道、全區實況、衛星云圖和雷達拼圖四個展示內容。其中全區實況是以地圖形式展示實況數據,根據格點實況數據渲染色斑圖,將色斑圖疊加到地圖瓦片上。展示的圖形產品分為氣溫、降水和風速三部分,其中氣溫包括逐小時氣溫、24小時最高氣溫、24小時最低氣溫;降水包括過去1小時、3小時、6小時、12小時、24小時、48小時累計降水量;風速包括2分鐘平均風速和極大風速。衛星云圖展示內容為FY4A彩色云圖,雷達拼圖展示內容為華北、東北、西北和全國雷達拼圖。衛星云圖和雷達拼圖都可按時間進度自動連播或拖動進度條查看,也可單獨點擊查看當天各時次的圖形。
3)“專題服務”模塊,初期計劃內容為旅游氣象,提供內蒙古自治區主要旅游景點天氣實況及天氣預報服務。此模塊可以后期增加其他專題氣象服務模塊,比如在2024年十四屆冬運會氣象服務保障期間鏈接十四冬專題氣象服務網站。
4)特色功能:降水早知道,在小程序看天氣及實況監測模塊都會留有入口,該功能即分鐘級雷達降水趨勢預報。其原理是通過微信API接口獲取用戶位置信息后,使用電子地圖解析定位用戶所在位置,在地圖上疊加雷達外推數據,提供未來兩小時內的短時臨近降水預報。該預報的空間分辨率可精確到街道,時間分辨率可達分鐘級,能夠為公眾的道路交通、出行旅游提供更及時、更精細的氣象服務。
1.2 系統架構設計
系統架構根據技術流程可詳細劃分為前端顯示層、應用服務層、數據存儲層、數據處理層和基礎設施層。每一層實現其特定的核心任務,下層為上層提供數據或服務支撐[3]。
1)前端顯示層
前端顯示層即用戶操作界面,顯示系統提供的具體功能并展示相應的天氣數據,可供用戶直接進行操作,并對用戶事件作出響應。
2)應用服務層
應用服務層是實現用戶操作、面向具體應用的核心層,可對相關功能組件進行集成與封裝,包括業務邏輯、安全組件、訪問接口、定時任務、微信鑒權、服務網關、消息組件等內容。該層采用REST服務方式實現與前端顯示層的請求交互,降低了系統開發的復雜性和耦合度,提高了系統的可擴展性。
3)數據存儲層
數據存儲層主要存儲數據處理層采集到的各類氣象數據,并提供給應用服務層進行訪問。此外,還需保存系統運行所需的各種數據,比如:地圖切片、圖形產品、用戶信息等。采取關系型數據庫和緩存型數據庫相結合的存儲方式來提高并發處理能力和數據傳輸效率。
4)數據處理層
負責原始數據的采集和標準化處理,根據系統需要的各類氣象數據,定時從不同的數據源獲取基礎氣象數據,并進行必要的預處理,存放到數據庫或者設定的文件系統目錄。通過對基礎數據進行解析、轉換、分類、整理、清洗等,獲得更加清晰準確的氣象數據。
5)基礎設施層
基礎設施層是系統建設的基礎條件,具體內容包含系統運行所需的軟硬件環境、本地/云服務器、微信認證、域名SSL證明等,為微信小程序最終上線發布提供了基礎保障。
2 小程序的實現
2.1 技術框架
本項目技術選型考慮到產品的性能指標和使用體驗以及后續跨端發布、適配其他平臺等需求,采用SOA分布式架構,它是一種支持面向服務的架構樣式,中間件使用Spring Cloud的服務治理的核心框架來管理整個系統的服務。前端開發框架使用uni-app,該框架使用Vue.js語言開發各種前端應用,開發者只需編寫一套代碼就可快速發布到多個平臺,比如iOS、Android、Web(響應式),以及各種小程序(微信、支付寶等)、快應用等。系統后臺服務基于SpringBoot和MyBatis框架進行開發。利用SpringBoot框架,能夠簡單快速搭建一個Java Web后臺服務,它是使用最為廣泛的面向服務的開發框架之一。MyBatis是一個基于Java語言的數據持久化框架,內部封裝了JDBC,并且對JDBC API的底層訪問細節進行了屏蔽,將Java對象實體和數據庫進行了映射,使得開發者操作數據庫變得非常方便。數據存儲層主要采用MySQL數據庫搭建,為應用服務層提供有效的數據支撐。緩存數據庫采用Ehcache緩存框架來實現,以減少對后臺不必要的請求次數,節約系統資源。系統后臺服務以Tomcat作為運行平臺,以nginx作為負載均衡。
2.2 技術流程
小程序需要通過手機定位獲取用戶位置信息,為此小程序的前端會在用戶首次打開時發送授權提醒,獲取用戶位置權限后,通過調用微信原生JavaScript SDK接口,獲取用戶的定位坐標,再調用百度或高德地圖API,利用坐標轉換技術計算得到用戶所在位置的城鎮名稱[4],然后通過Web服務接口向后臺發起數據請求。后臺Web服務根據前端請求的不同類型的數據,進行數據源分析。如果數據存儲層有請求的數據,則Web服務向數據庫讀取相應的數據,然后對數據進行處理加工,將生成的數據文件返回到前端,經過頁面視圖的渲染后呈現給用戶;如果數據不存在,數據處理層會進行即時處理,向數據庫寫入數據后再將結果反饋給前端。除了基本的氣象數據,系統還應用了一些外部數據服務,獲取數據的API接口主要包括中國天氣網天氣數據接口、百度或高德地圖數據接口等。小程序需要的氣象數據包括:氣象預警信息數據、城鎮天氣預報數據、實況觀測氣象數據、天氣雷達數據、生活氣象指數預報數據、空氣質量實況和預報數據、日出日落數據等。在綜合考慮了預報準確度和系統復雜度等問題后,本系統所用到的氣象數據,比如未來15天城鎮預報和逐小時模式預報數據,均通過中國天氣網API通用數據接口平臺獲取。
2.3 前端界面設計
小程序根據功能模塊結構和“內蒙古天氣”微信公眾號的底部菜單欄進行了結合,將菜單欄和三個功能模塊一一對應。菜單欄的第一個模塊的第一項內容,即“看天氣”模塊也是小程序的默認首頁,用戶從其他渠道比如掃二維碼等方式進入小程序會直接打開該頁面。首頁的界面設計遵從了簡潔實用的原則,排版布局比較清晰美觀,符合當下主流的移動端天氣應用的設計范式。在交互設計方面突出了操作便捷、功能明確等特點,為了提高用戶體驗度,各個功能均以醒目圖標為入口,降低用戶使用門檻。
下面以從上到下的順序對首頁界面設計進行說明:首頁的頁面頂部顯示用戶當前的定位位置,在上部主體區域顯示的是基于用戶當前位置的天氣實況信息,包括實時氣溫和天氣現象以及實時空氣質量指數,其中空氣質量指數可點擊跳轉至空氣質量指數詳情頁。在其之下顯示的是用戶當前位置的自動站實況數據,展示的氣象要素包括風力風向、降水量、相對濕度、氣壓和能見度。此區域還會顯示最新預警信息的提示圖標,點擊可跳轉至預警信息詳情頁。頁面的中間部分主要顯示天氣預報數據,首先展示的是今明兩天天氣預報,這樣設計的好處是用戶在打開頁面時將會快速獲得最有用的信息。接下來是24小時預報,展示的是逐小時模式預報數據,氣象要素包括溫度、天氣現象和風力風向。再下面是15天預報,即城鎮天氣預報,展示的氣象要素包括最高/最低氣溫、天氣現象、風力風向和空氣質量預報。頁面的靠下部分顯示的是城市生活氣象指數,展示的氣象指數包括紫外線強度、運動指數、穿衣指數和洗車指數。頁面的最底部是日出日落顯示區域,展示用戶當前位置的日出日落時間。小程序首頁界面展示如圖2所示。
2.4 后臺數據處理
后臺數據處理的流程首先是進行數據采集,通過數據采集系統將不同數據源的氣象產品和原始數據集中采集、存儲至數據庫服務器[5];然后由數據處理系統對原始數據進行解析、轉換、文件名校驗等標準化處理,同時進行數據加密和數據壓縮,以提升安全性和節省存儲空間;最后使用Spring和MyBatis框架,開發符合標準WebService接口規范的API接口服務,包括天氣實況、天氣預報、氣象預警和圖形產品等數據接口,實現前端和后臺數據的交互。接口主要由服務地址、接口ID、接口參數和返回格式四部分組成,系統為每個數據源分配了一個唯一的接口ID,該ID能反映接口的基本功能、數據種類和檢索條件等信息。
3 結束語
通過開發基于微信小程序的公眾氣象服務應用,滿足了公眾希望快速便捷查看天氣信息的需求,將精細化氣象服務產品和主流媒體渠道進行了對接,有效提高了用戶體驗和氣象服務質量,為內蒙古氣象部門
進行公眾氣象服務拓寬了新的渠道,體現了氣象工作與時俱進、服務至上的宗旨。
目前“內蒙古天氣”微信小程序已完成大部分軟件開發,部分模塊仍在進行調試、優化和改進。下一步,將繼續深入研究微信小程序,挖掘公眾對氣象服務的需求,繼續設計和開發更多精細化、定制化的氣象服務產品。同時由于小程序可以在后臺與公眾號進行關聯,今后將加強公眾號和小程序的運營推廣,利用微信的普及率,持續擴大公眾氣象服務的覆蓋范圍,推動公眾氣象服務向高質量和多元化目標邁進。
參考文獻:
[1] 張鋒,鄧闖,李建,等.基于微信“小程序”的公眾氣象服務應用[J].氣象科技,2019,47(2):361-366.
[2] 曹銳怡.基于微信小程序的上下學出行氣象服務產品設計與實現[J].中國新通信,2021,23(14):30-31.
[3] 王家樂.基于微信的“雨在哪” 小程序設計與實現[J].電腦知識與技術,2021,17(15):82-84.
[4] 隋遠琦,潘靜,那月光,等.基于天氣預警信息服務的微信小程序設計[J].現代信息科技,2023,7(10):6-9.
[5] 司林青.基于微信小程序的空管氣象服務應用[J].信息與電腦(理論版),2022,34(11):102-104.
【通聯編輯:謝媛媛】