[WM][VB][利用衛星雲圖來看颱風動態]
今天是2009/8/7也是颱風莫拉克登陸台灣時間,想要在Windows Mobile 手機上直播天氣觀測衛星雲圖,了解颱風最新動態要怎麼做呢,可以按照下面此要領一步一步來實作
Step1:首先連到http://www.cwb.gov.tw/ 中央氣象局讀取資訊源,畫面如下:
Step2:接著我們把滑鼠移到衛星雲圖上按下滑鼠的右鍵,在來點選功能表內容鍵會顯圖片的路徑,中央氣象局把圖顯示分成四種分別為:可見光、彩色、色調強化、黑白,你可以分別把四個圖都點選出來抄下來四種圖不同的路徑
Step3:開啟vs2008新增一個智慧型裝置專案,建立二個表單(Form1,Form2)在表單Form1建立PictureBox顯示衛星雲圖,二個MenuItem(顯示、模式),顯示下在產生二個子按鍵靜態:只傳回一張衛星圖、動態:傳回六張衛星期模擬動態衛星圖,模式則是進入表單Form2去設定衛星雲圖的顯示模式
Step4:撰寫 Form1 程式碼
Imports System.Net
Imports System.IO
Public Class Form1
'設定目前顯示圖片模式變數
Private 模式 As String = "RGB"
'設定顯示圖片的情境
Private 顯示 As String = "靜態"
'用來存放下載圖片的物件清單
Private
'此變數用來記載下載時間圖片
Private 時間 As String = ""
'此變數用判斷時間變數是否不等於下載時間變數比對用
Private 下載 As String = ""
'設定顯示衛星雲圖模式連結到Form2 點選畫面
Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
Dim frm As New Form2
frm.ShowDialog()
模式 = frm.type
下載 = ""
UpdateImage()
End Sub
'把子鍵動態、靜態的Click事件連結到MenuItem2_Click陳述式,設定目前衛星圖顯示情境
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click, MenuItem2.Click
顯示 = CType(sender, MenuItem).Text
下載 = ""
UpdateImage()
End Sub
'用Timer物件每分鐘來更新圖片
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
UpdateImage()
End Sub
Private Sub UpdateImage()
'在畫面顯示等待小輪子
Cursor.Current = Cursors.WaitCursor
'中央氣象局在每三十分會會更新一張圖片,所以我們用時間變數來跟現在時間做比對
If 時間 < Now.ToString("yyyy-MM-dd-HH-mm") Then
時間 = Now.ToString("yyyy-MM-dd-HH-")
'因為三十分更新一張所以實際一個時間在伺服器只會發出二個時間圖檔
'例:2009-08-07-10-00、2009-08-07-10-30
時間 &= IIf(Now.ToString("mm") > "30", "30", "00")
End If
'判斷之前下載記錄時時是不是跟目前要指定下載時間不相等,如果不相等就進入下載
If 下載 <> 時間 Then
'物件清單清除避免留下之前圖片檔
圖片.Clear()
'建立下載路徑變數
Dim url As String = "http://www.cwb.gov.tw/V6/observe/satellite/Data"
'取得目前點選顯示模式
Select Case 模式
Case "RGB" '彩色
url &= "/s1p/s1p-"
Case "visible" '可見光
url &= "/sao/sao-"
Case "Enhanced" '色調強化
url &= "/s1q/s1q-"
Case "Gray" '黑白
url &= "/s1o/s1o-"
End Select
'判斷顯示情境來決定下載圖片張數
Select Case 顯示
Case "靜態"
'下載一張
LoadImage(url & 時間 & ".jpg")
Case "動態"
'下載六張,把此時的時間往前減30分,分別把六次時間點的圖片取回,注意並不是每次的時間點都會
'都會產生圖片所以要自行斷此時間點的圖片是否有得下載。
Dim d As String() = 時間.Split("-")
Dim dt As DateTime = Convert.ToDateTime(d(0) & "-" & d(1) & "-" & d(2) & " " & d(3) & ":" & d(4))
Dim down As DateTime
For idx As Integer = 0 To 5
down = dt.AddMinutes(-(idx * 30))
LoadImage(url & down.ToString("yyyy-MM-dd-HH-mm") & ".jpg")
Next
End Select
'記錄目前的下載時間當Timer每分來更新的時候才能用來判斷是否要重新下載新的圖片
下載 = 時間
End If
'取消畫面顯示等待小輪子
Cursor.Current = Cursors.Default
'判斷圖片物件清單是否有圖片
If 圖片.Count > 0 Then
Select Case 顯示
Case "靜態"
'靜態只會取一張圖片顯示,只要指圖片物件第一個位置
PictureBox1.Image = 圖片.Item(0)
Case "動態"
'動態取得下載張數跑迴圈把圖片讀出來,並且讓執行緒暫停一秒讓圖片有動畫的感覺
For idx As Integer = 0 To 圖片.Count - 1
PictureBox1.Image = 圖片.Item(idx)
PictureBox1.Refresh()
System.Threading.Thread.Sleep(1000)
Next
End Select
End If
End Sub
'利用http來下載圖片加到物件清單裡面
Private Sub LoadImage(ByVal url As String)
Try
Dim HttpWReq As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
Dim HttpWResp As HttpWebResponse = CType(HttpWReq.GetResponse(), HttpWebResponse)
Dim dataStream As Stream = HttpWResp.GetResponseStream()
圖片.Add(New Bitmap(dataStream))
HttpWResp.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
Step5:在Form2表單產生四個PictureBox放上四種顯示模式圖片範例,給使用者點選變更顯示情境
Step6:撰寫Form2程式碼
'建立一個變數來存放PictureBox所點選顯示模示
Public type As String
'把四個 PictureBox元件的 DoubleClick事件接到ImageDoubleClick陳述式
Private Sub ImageDoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Visible.DoubleClick, RGB.DoubleClick, Enhanced.DoubleClick, Gray.DoubleClick
'取得PictureBox命名放到變數使用
type = CType(sender, PictureBox).Name
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub
End Class
Step7:在vs2008編緝器上的功能表按下偵錯\開始偵錯開始測試我們會應用程式
Step8:點選顯示上按鍵挑選你想要看的衛星雲圖情境
Step9: 按下模式進入衛星雲圖顯示格式,挑選你想看的格式