李云春
摘要 等值線圖繪制研究是氣象服務(wù)工作中的一項(xiàng)重要內(nèi)容,氣象服務(wù)關(guān)系到工農(nóng)業(yè)生產(chǎn)、交通運(yùn)輸、電力、航空航天等各領(lǐng)域的健康發(fā)展,提高服務(wù)水平意義重大。本文通過C#調(diào)用Surfer提供的API(應(yīng)用程序接口)實(shí)現(xiàn)雨量分布圖等值線的自動(dòng)生成,可大幅提高繪圖效率,有效提高氣象服務(wù)的可視化效果,提供更加直觀科學(xué)的決策依據(jù),目前已將該產(chǎn)品應(yīng)用到日常服務(wù)工作當(dāng)中。實(shí)踐證明,通過C#調(diào)用Surfer繪制等值線在氣象服務(wù)工作中有著廣泛的應(yīng)用。
關(guān)鍵詞 等值線;自動(dòng)繪制;C#;Surfer;氣象服務(wù)
中圖分類號(hào) P209 文獻(xiàn)標(biāo)識(shí)碼 B 文章編號(hào) 1007-5739(2017)11-0205-02
隨著經(jīng)濟(jì)社會(huì)的快速發(fā)展,氣象服務(wù)在各行業(yè)生產(chǎn)以及人們的生活當(dāng)中發(fā)揮了重要的作用,氣象服務(wù)關(guān)系到工農(nóng)業(yè)生產(chǎn)、交通運(yùn)輸、電力、航空航天等各領(lǐng)域的健康發(fā)展。由于氣象服務(wù)在國民經(jīng)濟(jì)中具有重要地位,故提高氣象服務(wù)水平的意義重大。目前,等值線圖繪制研究是氣象服務(wù)工作中的一項(xiàng)重要內(nèi)容,通過氣象要素?cái)?shù)據(jù)繪制的等值線圖科研體現(xiàn)區(qū)域內(nèi)的氣象形勢,是形成眾多氣象服務(wù)產(chǎn)品的基礎(chǔ)。與此同時(shí),等值線需要依靠人工進(jìn)行繪制,存在一定的局限性,面對(duì)復(fù)雜而大量的氣象數(shù)據(jù),技術(shù)人員的工作量大,繪制效果并不理想。為了提升等值線繪制的水平、減少工作量,筆者通過對(duì)Surfer API的學(xué)習(xí)研究,利用C#編程實(shí)現(xiàn)等值線的自動(dòng)化繪制,從而制作出各類氣象要素等值線服務(wù)產(chǎn)品,為氣象服務(wù)提供了豐富的圖形產(chǎn)品。
1 技術(shù)介紹
1.1 C#技術(shù)
C#語言由C和C++衍生而來,是由微軟公司發(fā)布的高級(jí)程序設(shè)計(jì)語言,其運(yùn)行于.NET Framework虛擬機(jī)平臺(tái)上,借鑒了Delphi與組件對(duì)象模型直接集成的特點(diǎn),其語法、接口等又與Java類似,因而具有安全、穩(wěn)定、簡單等特點(diǎn)。C#是一種很實(shí)用的語言,兼顧系統(tǒng)開發(fā)和應(yīng)用開發(fā),適宜于為獨(dú)立和嵌入式的系統(tǒng)編寫程序,對(duì)于系統(tǒng)的適用性均較強(qiáng)。因?yàn)镃#與C/C++相似,C++程序員對(duì)熟悉的語言更能較為容易地掌握,還可以調(diào)用相關(guān)原生函數(shù),因而提高了效率;同時(shí)因?yàn)镃#是面向?qū)ο蟮木幊陶Z言,針對(duì)MICROSOFT .NET平臺(tái)的應(yīng)用程序編寫更為方便。C#所開發(fā)的程序源代碼被編譯成為中間代碼,類似于Java,然后通過虛擬機(jī)通用語言運(yùn)行庫執(zhí)行,由于.Net Framework緩沖區(qū)存儲(chǔ)了各類代碼,減少了重復(fù)翻譯,顯著提高了運(yùn)行的效率[1]。
1.2 Surfer API
Surfer由美國Golden Software 公司發(fā)布,是一款專業(yè)的三維圖形繪制軟件,可用于等高線、地形地貌圖、三維表面圖、矢量圖、點(diǎn)位圖等的圖件制作。Surfer 對(duì)于處理三維數(shù)據(jù)具有明顯的優(yōu)勢,主要是因?yàn)榻Y(jié)合了數(shù)據(jù)差值功能和圖件繪制功能[2]。在數(shù)據(jù)處理方面,該軟件包含了大部分?jǐn)?shù)據(jù)統(tǒng)計(jì)計(jì)算方法,有11種數(shù)據(jù)網(wǎng)格化方法可供選擇,支持多種圖形圖像文件格式,為其提供了導(dǎo)入和導(dǎo)出的接口,應(yīng)用十分方便。對(duì)各類GIS軟件的文件格式也提供相應(yīng)的接口,非常適合于制作地理信息類的圖件,其方便的文件、數(shù)據(jù)交換功能很受用戶青睞。此外,還提供了腳本編輯引擎,大大提升了軟件的自動(dòng)化功能,使用更為簡便[3-6]。
2 基于C#/Surfer Api的編程
2.1 Surfer內(nèi)置對(duì)象
Surfer Application主要包括文檔、窗體、風(fēng)格、函數(shù)4個(gè)對(duì)象(圖1),其中文檔對(duì)象是一個(gè)集合,不能直接使用,分為圖形對(duì)象和工作表對(duì)象。另外,還存在一些獨(dú)立的對(duì)象,比如線條對(duì)象、顏色對(duì)象等。
2.2 核心程序設(shè)計(jì)
//創(chuàng)建Surfer應(yīng)用程序?qū)嵗?/p>
Surfer.ApplicationClass surapp=new Surfer.ApplicationClass();
//網(wǎng)格化數(shù)據(jù)
try
{
surapp.GridData(DataFile,1,2,3,Type.Missing,Surfer.SrfDupMethod.srfDupNone,0.03,0.03,Type.Missing,Type.Missing,102.68239593506,103.85780334473,34.939952850342, 36.221523284912,Surfer.SrfGridAlgorithm.srfInverseDistance,……,OutGrid,Surfer.SrfGridFormat.srfGridFmtAscii,OutGrid,Surfer.SrfGridFormat.srfGridFmtAscii,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
surapp.GridSplineSmooth(OutGrid,8,8,SrfSpline Method.srfSplineInsert,SmoothGrid,SrfGridFormat.srfGridFmt Ascii);
surapp.GridBlank(SmoothGrid,BlankFile,BlankedGrid,Surfer.SrfGridFormat.srfGridFmtAscii);
Surfer.IPlotDocument Doc =(Surfer.IPlotDocument)surapp.Documents.Add(Surfer.SrfDocTypes.srfDocPlot);
Surfer.IMapFrame mapframe = Doc.Shapes.AddContourMap(BlankedGrid);
IContourMap contourMap=(IContourMap)mapframe.Overlays. Item(1);
contourMap.Levels.LoadFile(System.Windows.Forms.Application.StartupPath + @"\100.lvl");
Surfer.IText Text1 = Doc.Shapes.AddText(contourMap.Left + 1,contourMap.Top - 5.5,sdata.Substring(0,4)+ "年" + sdata.Substring(4,2)+ "月" + sdata.Substring(6,2)+ "日" + sdata.Substring(8,2)+ "時(shí)" + sdata.Substring(10,2)+ "分");
Text1.Font.Size = 11;
Surfer.IText Text2 = Doc.Shapes.AddText(contourMap.Left + 3,contourMap.Top - 5.5,"臨夏州雨量分布圖");
Text2.Font.Size = 12;
IMapFrame mapframe1=Doc.Shapes.AddPostMap(PoseFile, 1,2,3,0,0);
IPostMap map1 =(IPostMap)mapframe1.Overlays.Item(1);
IMapFrame boundryMapFrame = Doc.Shapes.AddBaseMap(qyFile);
IBaseMap boundryBaseMap=(IBaseMap)boundryMapFrame. Overlays.Item(1);
boundryBaseMap.Line.Width = 0.01;
string strWH = string.Format("width = {0:f0},height = {1:f0},KeepAspect = 1,ColorDepth = 32",1044,1092);//設(shè)置輸出圖片的高度和寬度
Doc.Shapes.SelectAll();
Doc.Selection.OverlayMaps();
Doc.SaveAsSystem.Windows.Forms.Application.StartupPath + @"\1.srf");
Doc.Export(System.Windows.Forms.Application.StartupPath + @"\bmp\" + sdata + ".png",false,strWH );//設(shè)置輸出圖片格式名
Doc.Close(SrfSaveTypes.srfSaveChangesNo); //不生成srf文件
surapp.Quit();
//清理臨時(shí)文件
File.Delete(SmoothGrid);
File.Delete(OutGrid);
File.Delete(BlankedGrid);
File.Delete(DataFile);
3 產(chǎn)品在日常工作中的應(yīng)用
目前,臨夏州已將繪制出來的產(chǎn)品應(yīng)用到了日常服務(wù)工作之中,為相關(guān)部門提供更加直觀科學(xué)的決策依據(jù)。圖2為自動(dòng)繪制的雨量分布圖產(chǎn)品。
4 結(jié)語
通過C#調(diào)用Surfer提供的API(應(yīng)用程序接口)實(shí)現(xiàn)等值線的自動(dòng)生成,大大提高了繪圖效率,節(jié)省了氣象工作者的時(shí)間,有效提高氣象服務(wù)的可視化效果,提供更加直觀科學(xué)的決策依據(jù)。
5 參考文獻(xiàn)
[1] 齊立波.C#入門經(jīng)典[M].4版.北京:清華大學(xué)出版社,2008.
[2] 王建,白世彪,陳曄.Surfer8地理信息制圖[M].北京:中國地圖出版社,2004:124-128.
[3] 崔芳鵬,胡瑞林,劉照連,等.基于Surfer平臺(tái)的FLAC~(3D)復(fù)雜三維地質(zhì)建模研究[J].工程地質(zhì)學(xué)報(bào),2008(5):699-702.
[4] 韓麗娜,石昊蘇.利用Surfer8.0繪制地質(zhì)等值線圖[J].計(jì)算機(jī)與現(xiàn)代化,2008(11):84-87.
[5] 宋明藝,張春灌.借助Surfer軟件實(shí)現(xiàn)快速繪制平面等值線圖[J].工程地球物理學(xué)報(bào),2009(2):244-246.
[6] 武俊紅,汪云甲.基于Surfer的煤礦等值線空間插值方法有效性評(píng)價(jià)[J].中國礦業(yè),2007(1):108-110.