摘要:自動氣象站資料在氣象業務工作中具有重要的價值。文章對ASP.NET與GDI+的某些方法進行了研究,利用ASP.NET實現在網頁中以圖表方式顯示自動站數據庫資料。
關鍵詞:自動氣象站;.NET;GDI+
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)19-30080-02
Displaying the Data of Automatic Station Database Using the Method of .NET
QIN Rong-mao, YANG Hua
(Changji Meteorological Bureau,Changji 831100,China)
Abstract: The data of automatic weather station is very important in weather professional work. the article researched some method of ASP.NET and GDI+,and finished displaying the data of automatic station database.
Key words: automatic weather station; .NET; GDI+
1 引言
自動站在我州開始運行以來,為預報服務提供了很多的數據資料。同時,通過開發部分應用軟件,也已經建立了本地資料數據庫。系統運轉后,其收集的數據為科研人員的科研工作發揮了重要作用。但是也有不足之處,就是如何將數據庫中的資料以圖表的形式簡潔、直觀地顯示給最終的普通用戶,使他們也能夠通過簡單的操作就可以得到滿意的結論。結合本部門系統內部網絡構成,目前最好的方法就是利用互聯網,采取網頁的形式來實現資源共享。文章著重描述了在.NET環境下來實現網頁圖表顯示的功能。
2 問題提出
目前,我州自動站實時數據能夠自動進入到本地數據庫服務器。只是尚未給用戶提供一種合適的使用環境來充分地應用這些資料。而應用服務器上提供有WEB服務,是否可以通過在WEB頁面上以圖表的形式顯示這些資料數據呢?經過多次實驗,證明是切實可行的。
3 實現原理
WEB頁面的生成采用ASP.NET技術實現。ASP.NET是一種編譯語言,當客戶端第一次調用ASP.NET頁面的時候,其實是經過了一種比較復雜的編譯過程,編譯生產MSIL文件,存儲到本地機,MSIL文件其實是一個中間語言的文件,然后此文件又通過JIT(Just in Time)編譯器進行再編譯,生成機器語言,這樣你所調用的ASP.NET頁面才展現出來,對于不同的機器,有著不同的JIT,也就被編譯成不同機器語言,這就是微軟公司大力鼓吹ASP.NET的所謂跨平臺的原理。
當ASP.NET頁面被編譯成MSIL文件的時候,編譯所使用的類庫必須是受管代碼文件(Managed Code),而ActiveX控件是已經被編譯成機器語言的文件,他屬于非受管代碼文件(Unmanaged Code)。所以直接在ASP.NET調用MSChart組件是不可能的。雖然你可以利用.Net框架提供的工具把此MSChart組件轉換成受管代碼文件,但這個過程相對比較復雜,并且利用這種方法產生的圖表速度相當慢,還有就是由MSChart組件自身所限制,對于復雜的圖表,是無法利用他來生成的。
其實我們在各種.NET開發的網站中看到的圖表并不是一個圖表,而是一個圖片。在服務器端產生圖片,然后在圖片上面畫出想要顯示給用戶的各種信息,然后通過瀏覽器發送圖片到客戶端,從而形成圖表。那么,圖表的生成使用GDI+來實現,GDI+是從GDI演化而來的,但是在Visual Studio的以前版本中使用GDI是相當復雜的,而且工作量巨大?,F在在GDI+中,微軟已經幫我們解決了許多問題,因而使用GDI+編程將變得非常容易。
GDI+包含在System.Drawing.Dll集合中,所有的GDI+類包含在System.Drawing,System.Text,System.Printing,System.Internal,System.Imaging,System.Drawing2D以及System.Design等命名空間中。
上述技術方法就是本文要利用的方法。通過這些方法,就可以實現各種氣象要素的圖表顯示。尤其針對氣象資料中的溫度、降水等的顯示,下面就來介紹具體的實現方法。
4 實現方法
4.1 在.NET中提取數據庫資料
在.NET Framework中,數據提供商作為應用程序和數據源之間的橋梁,提供了簡單的數據庫連接接口。一個.NET Framework數據提供商能從數據源返回查詢結果,執行數據源上的命令。本網站中就利用.NET Framework中的SQL Server .NET Data Provider進行數據庫的訪問。
4.2 利用GDI+繪制圖表
為了使用GDI+在.NET頁面中畫出圖表,關鍵步驟主要有兩步:其一,創建一個圖片對象(Bitmap)。然后利用.Net FrameWork SDK所提供的方法在此圖片對象上面畫出自己想要的圖形,譬如畫線,畫點等;其二,就是為了更適合傳輸,把此圖片對象,以“Jpeg”格式保存,并顯示出來。下面我們就來看看這二步的具體實現方法。
1)首先在ASP.NET頁面創建一個動態圖片,并顯示出來。創建一個圖片對象其實非常容易的,利用命名空間“System.drawing”中的“Bitmap”類來實現的,下列語句可以創建一個位圖對象:
Bitmap image = new Bitmap (400,400); //創建一個“Bitmap”對象
修改“Bitmap”對象的二個參數來改變創建的位圖對象的長和寬。通過Bitmap類的Save方法就可以顯示已經創建的位圖對象。由于位圖文件要占用很多的空間,為了便于網絡傳輸,一般轉換成“Jpeg”或者“Gif”文件來保持。下面語句是把已經創建的位圖對象,轉換成“Jpeg”文件顯示:image.Save(Response.OutputStream,ImageFormat.Jpeg); //以“Jpeg”格式保存此圖片對象,在客戶端顯示出來。
2)如何給產生得圖片上色。
其實給產生得圖片上色是比較容易的,首先根據“Bitmap”對象創建一個“Graphic”對象,然后根據此“Graphic”對象的方法來確定上色的圖形類型(譬如顯示的圖片為橢圓、正方形等)。
Bitmap image = new Bitmap (400,400);
Graphics g = Graphics.FromImage(image);
g.FillRectangle (new SolidBrush(Color.LightGreen),0,0,400,400)。
3)如何在圖片上實現畫線和寫字。
在圖片上寫字是通過產生的“Graphic”對象的DrawString()方法來實現的,在調用此方法前,必須設置字體和刷子,具體調用方法是:
//寫字
g. DrawString (\"在圖片上面寫入文字\", axesFont, blackBrush, 90, 20);
//畫線
g. DrawLine (blackPen, 0, 2, 210, 250);
知道了這些基本知識,就可以利用數據庫中的氣象要素在WEB頁面上繪制出我們需要的圖表了。
5 結束語
本文在ASP.NET頁面中利用.Net FrameWork SDK GDI+中提供的各種用以操作圖形的方法,實現了氣象要素在WEB頁面中的顯示,這樣的過程雖然有點煩雜,但對實現復雜的圖表是非常有用的。
參考文獻:
[1] 王立豐. Visual C#.NET項目開發實用案例[M].科學技術出版社,2006.
[2] Mahesh Chand. GDI+圖形程序設計[M].韓江,譯.電子工業出版社,2005:144-150.
[3] 周鳴揚,曾潔玫. GDI+程序設計實例[M].中國水利水電出版社,2004:25-30.