999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

公眾氣象服務產品平臺的設計與實現

2023-06-15 01:03:34鄭文全肖鵬王英
計算機時代 2023年6期

鄭文全 肖鵬 王英

摘? 要: 為了提高公眾氣象服務產品制作效率,以天氣網等網站數據為基礎,結合預報值班人員本地化訂正,使用Visual Basic.Net設計了批量生成公眾氣象服務產品的制作平臺。該平臺具有集中顯示、對比訂正、批量制作、信息查詢等功能,提高了值班人員氣象工作效率。

關鍵詞: 公眾氣象服務; VB; .Net; 正則表達式; 線程; 委托

中圖分類號:TP317.1? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2023)06-157-05

Design and implementation of public meteorological service product platform

Zheng Wenquan1, Xiao Peng1, Wang Ying2

(1. Dazhou Meteorological Bureau, Dazhou, Sichuan 635000, China; 2. Dazhou Quxian Meteorological Bureau)

Abstract: In order to improve the production efficiency of public meteorological service products, based on the data of websites such as weather.com.cn, combined with the localized correction by forecast duty personnel, a production platform for batch generation of public meteorological service products is designed using Visual Basic.Net. The platform has functions such as centralized display, comparison and correction, batch production, and information query, which improves the meteorological work efficiency of duty personnel.

Key words: public meteorological service; VB; .Net; regular expression; threads; delegation

0 引言

公眾氣象服務[1]是氣象服務系統及時地為社會各界各部門指揮生產、組織防災減災,以及在氣候資源合理開發利用和環境保護等方面進行科學決策提供氣象信息。公眾氣象服務產品包括天氣預報警報、氣候服務、環境質量預報以及氣象科普等,本文主要指日常例行制作的公眾生活、工作、出行、旅游、健康等多種公眾氣象服務產品(以下簡稱產品),產品包括48/72小時等天氣預報、生活氣象指數、旅游風景區預報、鐵路/高速公路氣象服務、電視天氣預報等多個產品。氣象值班人員每日按時制作對應產品,由于產品數量多,且產品使用的氣象預報數據(指溫度、天氣現象、生活氣象指數等,以下簡稱數據)多,往往制作產品費時費力,人工出錯概率大,牽制了值班人員大量精力,迫切需要開發一套方便快捷的產品制作平臺(以下簡稱平臺)。

1 制作設計

本平臺由Visual Basic.Net 2015(基于微軟.NET Framework之上的面向對象的編程語言,以下簡稱VB.Net)在Windows10下編寫,在Windows7/10及Word2010/2016調試通過。

1.1 框架

平臺從天氣網以及達州市公共氣象服務網收集基礎數據,值班人員對其進行本地化訂正,形成最終數據。再由設計好的Word模板產品,批量生成多個最終Word產品(圖1)。基礎數據僅為值班員提供種類豐富的數據來源,以及方便訂正的錨定值。

1.2 數據存儲

基礎數據的收集遵循前瞻性、盡量多全的原則,如,本市、縣、區、鄉鎮、景區,周邊市及景區等1~15天多個數據。所有數據存儲在兩個公共數組變量DzWeather和LifeIndex中。

三維數組變量DzWeather(56,7,22)存儲天氣網上的數據(表1)。站號50~56單獨收集天氣網8~15天數據。例:DzWeather(6,7,2)為渠縣第六天最高溫度,DzWeather(56,0,2)為渠縣第七天最高溫度。

二維數組變量LifeIndex(14,3)存儲達州市公共氣象服務網上的14個生活氣象指數,分別對應指數名稱、等級及描述,專為“城區生活出行天氣預報”產品提供指數選用。

1.3 文件和目錄

程序當前目錄下“0配置文件”文件夾,放置設計好的Word產品模板,以及預報員、天氣現象等配置文本文件;同時,產品目錄按年份名每年自動建立,存儲具體產品。該目錄設置只讀共享便于他人查詢。

Word產品模板有:48/72小時天氣預報、城區生活出行天氣預報、旅游風景區天氣預報、鐵路/公路氣象服務等共14個產品。Word模板用隱形(無框線)或顯形的表格固定位置及格式,或用特別字串占位(如,YYYY,xxx等),便于程序用替換或單元格填充完成數據更新。例如,Word產品版頭[2]部分表格(隱形表格)里的預報員、簽發人、日期等,程序控制單元格填充數據。產品按“產品名_制作日期_期數”進行命名,方便查詢使用。例,2022年12月2日周末天氣預報(每周五制作)命名為“周末天氣預報_20221202_048.docx”。

2 程序實現

2.1 程序流程

程序啟動加載窗體時(圖2),進行初始化:表格(圖3中名為dgvD的DataGridView控件,以下“表格”均指此控件)格式化,檢查配置文件(無則自動生成初始配置),加載預報員、簽發人、天氣現象等選項數據,重置7天切換按鈕,檢查產品生成目錄等等。

點擊“讀取”檢查預報員與簽發人后,讀取多個站點的網頁源碼,分別提取網頁源碼中的數據,存儲到公共數組變量中(見1.2)。切換圖3表格下面的7天按鍵,分別顯示各日數據。值班員逐一訂正修改后,可一鍵輸出到Word,形成最終的多個產品。

2.2 數據獲取

使用統一的網頁源碼獲取過程,分別提取各個站號網頁中的數據。例,獲取達州(站號為10)數據:GetSiteData("http://www.weather.com.cn/weathern/101270601.shtml", 10, "達州"),代碼如下:

Private Sub GetSiteData(ByVal url, ByVal num, ByVal site) '網址,站號,站名

mythread=New Thread(AddressOf GetCode) '新建線程

mythread.Start(url)

Do

System.Windows.Forms.Application.DoEvents()

'等待完成

Loop Until mythread.IsAlive=False

GetElem(strCode, num) '正則提取

End Sub

由于網頁源碼獲取是異步[3],且多個網站連續讀取容易造成主線程“假死”現象[4],故上面代碼使用了線程[5]和等待。線程中獲取網頁源碼的程序代碼:

Private Sub GetCode(ByVal web As String)

Dim wc As New WebClient

Try

Invoke(New voidShowMessage(AddressOf

ShowMessage), "請求源碼中...")

wc.Proxy=Nothing

strCode=Encoding.UTF8.GetString

(wc.DownloadData(web))

Catch ex As Exception

Invoke(New voidShowMessage(AddressOf

ShowMessage), ex.Message)

strCode = ""

End Try

‘失敗時狀態信息,代碼略

Invoke(New voidShowMessage(AddressOf

ShowMessage), "獲取源碼成功!")委托

wc.Dispose()

wc=Nothing

mythread.Abort()

End Sub

線程中獲取源碼的狀態信息,是無法直接顯示在主線程窗體。因此在新建線程的代碼中使用了委托[6]。委托需在類中定義Private Delegate Sub voidShowMessage(ByVal strM As String),這樣圖3表格下面可即時顯示線程進行狀態。

Private Sub ShowMessage(ByVal s As String)

lblState.Text="狀態:" & s

End Sub

源碼獲取成功后,用正則表達式[7]解析對應的數據,存儲到公共數組變量中,部分代碼:

Private Sub GetElem(ByVal strCode_All As String,

ByVal dz As Integer)

Dim strT() As String, m As Integer, k As Integer,

i As Integer

Dim reg As New Regex("blueFor-container.*?

click_wrap", RegexOptions.Singleline)

m=reg.Matches(strCode_All).Count

If m<1 Then

lblState.Text="狀態:網頁中無數據,請查找原因如網頁改版!"

Exit Sub

End If

strCode=reg.Matches(strCode_All)(0).Value

lblState.Text="狀態:提取" & dz & "區域日期..."

reg=New Regex("(?<=""date"">).*?(?=

)", RegexOptions.Singleline)'讀取日期8

m = reg.Matches(strCode).Count

If reg.Matches(strCode).Count <> 8 Then

lblState.Text="狀態:數據異常(不是7天數據),請查找原因!"

Exit Sub

End If

For k=0 To m - 1

DzWeather(dz, k, 0) = reg.Matches(strCode)(k)

.Value.Replace(vbCrLf, "")

Next

‘提取天氣現象、最高溫度、最低溫度、風、生活氣象指數等類似,略

End Sub

景區與達州市公共氣象服務網的網頁源碼各不相同,另寫過程修改正則匹配字串即可。

2.3 修改訂正

2.3.1 數據顯示

7天數據顯示由表格下面d1~d7共七個按鍵進行切換。圖3為第五天(2023年1月)10日數據,程序代碼:

Private Sub d5_Click(senderAs Object, e As

EventArgs) Handles d5.Click

cboWeather.Visible=False? '隱藏天氣現象ComboBox

cboWeather.Width=0

SaveArry()? '存儲當前數據

intDay=5 '第五天

LoadToTable(intDay) '第五天數據入表

Rest7Back() '七個按鍵背景重置

D5.BackColor=Color.LightBlue

End Sub

按鍵切換時,保存當前修改的數據到公共數組變量,之后調入對應按鍵日期的數據在表格顯示,注意第七天數據的站點變成了50+的處理(見1.2)。

2.3.2 訂正修改

值班員對基礎數據的本地化修改訂正,提供了三種方式。①直接雙擊表格中單元格,即可進行編輯修改。②選擇其中一個數據,點擊“行數據相同”使同行的所有數據將變成一樣,方便對比微調修改。③針對表格第一行天氣現象進行下拉選項修改。添加一個cboWeather(為ComboBox控件),平時隱藏。點擊第一行天氣現象時激活顯示(圖3右側),選擇其中天氣現象完成修改。焦點離開第一行自動隱藏。

Private Sub DV_CurrentCellChanged(……) Handles

dgvD.CurrentCellChanged

Dim x As Integer=dgvD.CurrentCell.RowIndex '行

Dim y As Integer=dgvD.CurrentCell.ColumnIndex '列

If x=0 Then'僅對第一行定位顯示,除此外隱藏

If y>0 And y<8 Then '僅限達州更改,預留擴展

cboWeather.Visible=False

cboWeather.Width=0

cboWeather.Left=dgvD.Location.X+dgvD

.GetCellDisplayRectangle(y, x, True).Left

cboWeather.Top=dgvD.Location.Y + dgvD

.GetCellDisplayRectangle(y, x, True).Top

cboWeather.Width=dgvD.GetCellDisplayRectangle

(y, x, True).Width

cboWeather.Height=dgvD.GetCellDisplayRectangle

(y, x, True).Height

cboWeather.Text=dgvD.CurrentCell.Value

cboWeather.Visible=True

End If

Else

cboWeather.Visible=False

cboWeather.Width=0

End If

End Sub

當對cboWeather修改時,應及時更新到表格,其他修改方式類似。

Private Sub cboWeather_SelectedValueChanged(……)

Handles cboWeather.SelectedValueChanged

dgvD.CurrentCell.Value=cboWeather.Text

End Sub

2.4 生成產品

所有數據人工訂正完畢后,點擊“輸出到Word”,形成最終產品。其中景區與鄉鎮的數據,可以由主站(表1一維0~6站號)根據現有的已經研究出的鄉鎮/景區預報訂正模型,由程序在內部做自動訂正,無須人工修改。

VB.Net操作Word前,需引用“Microsoft Word 16.0 Object Library”類庫[8]。每個產品的制作編寫一個處理過程,逐個調用完成所有產品制作。以數據量較少的48小時分縣天氣預報產品為例,使用替換及單元格填充,過程代碼:

Private Sub Hour48Forecast() '內含兩個表,版頭隱形表

為tables(1),正文中顯形表為tables(2)

Dim strFile As String = strPath & "0配置模板\=

48小時分縣天氣預報.docx" '使用模板

Dim w As New Application, i As Integer

Dim d As Document=w.Documents.Open(strFile)

Dim intNum As Integer=Now.DayOfYear '期數,每天一期

FillHeader(d, intNum.ToString("000")) '產品版頭填充

For i = 0 To 6‘站號0~6

d.Tables(2).Cell(3 + i, 2).Range.Text=DzWeather

(i, 2, 1) '24小時天氣現象

d.Tables(2).Cell(3 + i, 3).Range.Text=DzWeather

(i, 2, 3) & "~" & DzWeather(i, 2, 2) '溫度

d.Tables(2).Cell(3 + i, 4).Range.Text=DzWeather

(i, 3, 1) ‘48小時

d.Tables(2).Cell(3 + i, 5).Range.Text=DzWeather

(i, 3, 3) & "~" & DzWeather(i, 3, 2)

Next

d.SaveAs(strYear & "\常規服務產品\48小時分縣天氣

預報_" & Now.ToString("yyyyMMdd_") & intNum.ToString("000") & ".docx")? '另存,產品輸出

d.Close()

w.Quit()

w=Nothing

End Sub

各產品的版頭是一致的,單獨用一個過程來處理。

Private Sub FillHeader(ByVal d As Document, ByVal

num As String) '填充版頭

d.Range.Find.Execute("YYYY",,,,,,,,, Now.Year

.ToString, WdReplace.wdReplaceAll) '年

d.Range.Find.Execute("xxx",,,,,,,,, num, WdReplace

.wdReplaceAll) '期數,替換字串xxx

d.Tables(1).Cell(1, 3).Range.Text=cbYby.Text? '預報員,

隱形表格中的單元格(見1.3)

d.Tables(1).Cell(2, 3).Range.Text=cbQfr.Text? '簽發人

d.Tables(1).Cell(1, 4).Range.Text=Format(Now,"yyyy年

MM月dd日HH時") '時間

End Sub

3 結束語

本平臺經過四年的使用已經較為成熟,產品制作時間由原手工二小時左右縮短成平臺制作八分鐘左右,有效地節約了時間;方便數據對比校對,減少了輸入失誤,提高了氣象工作效率,是值班人員工作的好幫手。幾年來,產品經歷多次新增和變更,但因平臺模塊化設計及前瞻性考慮,使得平臺維護只須幾分鐘即可迅速滿足業務需求。

本平臺適合市、縣級公共氣象服務產品的自動化制作,成本低廉、部署簡單、移植方便。未來,根據需求還可利用Excel、Surfer、插件等增加圖表功能,實現數據的可視化。

參考文獻(References):

[1] 劉艷華,白鈺,隋紅艷,等.淺談如何寫好省級公眾天氣形勢

服務信息[J].黑龍江氣象,2021,38(2):34-36

[2] 韓亮.信息化的公文格式管理中常見問題分析及解決措施[J].

信息記錄材料,2017,18(7):111-112

[3] 紀銘涵,齊林,張楊,等.面向異步機制的自動重構方法研究[J].

河北科技大學學報,2021,42(5):499-507

[4] 周嵐.多線程在WinForm窗體開發中的應用研究[J].軟件

工程,2017,20(3):21-23

[5] H.M.Deitel,P.J.Deitel,T.R.Nieto(美).Visual Basic.NET程序

設計專家指南[M].北京:機械工業出版社,2003:520-557

[6] Francesco Balena(意).Visual Basic 2005技術內幕[M].北京:

清華大學出版社,2006:229-236

[7] Francosis Liger,Craig McQueen,Paul Wilto(美).VB.NET

字符串和正則表達式[M].北京:清華大學出版社,2002:118-14

[8] 唐云婷.基于.NET技術的文檔自動化處理研究[J].黑龍江

科學,2021,12(10):26-27,31

主站蜘蛛池模板: 亚洲无码37.| 欧美亚洲国产精品久久蜜芽| 国产杨幂丝袜av在线播放| 亚洲精品无码不卡在线播放| 国产精品综合色区在线观看| 宅男噜噜噜66国产在线观看| 国产尤物jk自慰制服喷水| 91美女在线| 亚洲精品无码抽插日韩| 亚洲无码免费黄色网址| 毛片在线区| 免费无码又爽又刺激高| 毛片免费试看| 91国内视频在线观看| 日本亚洲成高清一区二区三区| 热这里只有精品国产热门精品| a亚洲视频| 福利在线一区| 91在线国内在线播放老师| 午夜爽爽视频| 亚洲天堂区| 久久伊伊香蕉综合精品| 久久9966精品国产免费| 一级全免费视频播放| 欧美成人第一页| 欧美成人精品在线| 99久久精品免费看国产免费软件| 精品小视频在线观看| 成年网址网站在线观看| 亚洲人成网站在线播放2019| 秋霞午夜国产精品成人片| 亚洲日韩高清在线亚洲专区| 丰满人妻中出白浆| 亚洲欧美一区二区三区蜜芽| 久久这里只有精品2| 中文字幕亚洲电影| 久久综合国产乱子免费| AV色爱天堂网| 99re经典视频在线| 婷婷综合亚洲| 在线免费看黄的网站| 国产中文一区二区苍井空| 国产又爽又黄无遮挡免费观看| 亚洲成人在线免费| 国产无码网站在线观看| 日本亚洲欧美在线| 91小视频在线观看免费版高清| 激情综合网址| 亚洲天堂视频在线播放| 亚洲欧美日本国产专区一区| 四虎永久在线精品国产免费| 在线观看精品自拍视频| 日韩精品无码不卡无码| 一区二区偷拍美女撒尿视频| 1769国产精品免费视频| 成人免费午间影院在线观看| 国产欧美性爱网| 91国内外精品自在线播放| 99在线视频免费| 国产激情无码一区二区APP| 国产自在线播放| 国产正在播放| 成人免费网站在线观看| 国产噜噜噜视频在线观看| 91成人精品视频| 成人午夜精品一级毛片 | 国产成人亚洲综合A∨在线播放| 亚洲国产精品成人久久综合影院| 国产精品理论片| 欧类av怡春院| 亚洲精品欧美重口| 成人在线第一页| 另类重口100页在线播放| 无码免费的亚洲视频| 亚洲欧洲AV一区二区三区| 成人午夜免费视频| 久久精品日日躁夜夜躁欧美| 亚洲欧洲AV一区二区三区| 91在线播放免费不卡无毒| 成人噜噜噜视频在线观看| 永久成人无码激情视频免费| 日韩免费视频播播|