?

基于VB和Surfer的海洋要素制圖的批處理可視化系統

2018-03-06 12:59鐘煜宏吳梅桂
科技資訊 2018年23期

鐘煜宏 吳梅桂

摘 要:本文基于VB和Automation對象技術的使用程序控制Surfer自動繪圖的方法,利用Surfer自帶的Scripter腳本語言,可以實現Surfer面向對象編程語言的二次開發,實現海洋要素等值線圖、分類圖等不同類型圖件的批量繪制,使用Visual Studio 2013開發工具,實現批處理可視化系統功能和界面,系統提供海洋數據處理功能,圖件批處理等操作界面。本系統可以顯著提高海洋繪圖工作者的工作效率,避免重復工作導致的誤差。

關鍵詞:Surfer Automation VB 等值線 批量繪圖 海洋要素

中圖分類號:TP31 文獻標識碼:A 文章編號:1672-3791(2018)08(b)-0022-03

海洋制圖數據量巨大,如果手動一個個處理數據,畫等值線,效率低下,甚至容易出錯,導致模擬結果失真。根據需要,本文比較幾種處理方法,形成批量畫等值線圖的可視化系統。

Surfer是美國Golden Software公司研制開發的繪圖軟件,其不僅提供了豐富的網格化和插值方法,還具有強大的繪制等值線等矢量圖能力,而且Surfer的還提供了Automation技術,發現可以使用Visual Studio 2010的VB.NET語言開發批量制圖的客戶端系統,此程序后臺調用Surfer的Automation對象,輕松實現Surfer的強大圖形繪制功能[1],本文選擇Surfer軟件的Automation技術去實現水質模擬可視化系統,去處理批量的數據。

1 調用Surfer軟件繪圖的基本原理

在VB中調用Suffer 8.0及以上版本進行嵌入式編程的原理類似于調用ActiveX控件編程。Suffer 8.0及以上版本采用了Automation方法來公開其接口,提供了不同種類的ActiveX Automation對象,它們幾乎覆蓋了Suffer 8.0及以上版本的所有功能[2]。

開發人員在VB程序中創建、調用它所提供的Automation對象,用以實現相應的數據可視化功能。更準確地說這種編程方法是一種面向對象的嵌入式編程方法。VB編程人員開發嵌入Suffer應用程序的過程主要包括兩部分工作:一是按照以往的經驗和習慣編寫程序的主框架代碼,即核心控制模塊和顯示控制模塊;二是在完成主體代碼后,參考Suffer提供的Automation對象,編寫制作可視化產品的調用Suffer嵌入代碼模塊[3]。

2 系統設計

Surfer 8.0及以上版本在繪制等值線圖時一共需要導入3種數據文件:包含等值線數據的DAT文件、圖形邊界的空白文件和底圖文件(*.BLN),其主要繪制過程可分為導入、網格化、空白和疊合,操作流程如圖1所示。利用Surfer繪圖軟件所提供的Automation方法的調用來實現數據批量處理。批量處理是利用VB Scripter編程語言來實現,調用Surfer 8.0提供的接口對象來實現批量繪圖功能[4-5]。

3 系統技術實現以及關鍵代碼

Surfer軟件Automation技術的推出為實現VB和Surfer接口提供了可能。在VB應用程序中,可以給Surfer任何對象的屬性賦值[6-7]。通過賦與不同的參數值改變對象的狀態,程序執行過程中通過參數控制圖形的輸出。因此,在Surfer系統中進行的一系列手工操作,完全可以用外部程序中的一段代碼代替,從而實現了Surfer自動繪圖功能。

3.1 原始數據的批量處理

根據Surfer需要的文本格式設置Excel表格,不同介質為不同Excel表格,但是數據格式都是設置為站位、經度、緯度、要素值(1-n個要素),尤其要素值名稱不能重復。詳細格式如表1所示。

以下是批量生成TXT文本的核心代碼:

OpenFileDialog1.Filter = "Excel文件(*.xls)|*.xls|所有文(*.*)|*.*"

If OpenFileDialog1.ShowDialog() = DialogResult.OK Then

TextBox1.Clear()

TextBox1.AppendText(OpenFileDialog1.FileName)

executefile = OpenFileDialog1.FileName

Dim xlApp, xlBook As Object

xlApp = CreateObject("Excel.Application")

xlBook = xlApp.Workbooks.Open(OpenFileDialog1.FileName)

Dim c As Integer

c = xlBook.Worksheets.Count

Dim arraylist As ArrayList

arraylist = New ArrayList

For i = 1 To c

ListBox1.Items.Add(xlBook.Sheets(i).Name)

Next

xlApp.Quit()

3.2 批量生成grd文件

網格化是把以XYZ數據文件格式表示的、通常是不規則分布的原始數據點,經過數學處理,構筑一個規則的空間矩形網格的過程。調用Surfer的應用(Application)對象的GridData方法[8]。

Set SurferApp =CreateObject(“surfer.Application”) '創建Surfer實例

path= GetFilePath("","txt","","")'獲取參與圖形繪制的txt文件所在的路徑

If Path ="" Then End

Path=Left(Path,InStrRev(Path,"\"))

data=Dir(path+"*.txt")'生成grd文件的完整路徑,以供調用

While data<>"" '循環開始語句,批處理核心代碼

Surferapp.GridData(DataFile:=path+data,Algorithm:=srfKriging,ShowReport:=False,xMin:=114.3,xMax:=114.48,yMin:=22.56,yMax:=22.62,OutGrid:=path+data+".grd") '生成克里金插值方法的grd文件

data=Dir ()

Wend

3.3 批量繪置等值線圖

首先創建Surfer的應用(Application)對象,打開一個已經創建的底圖文件srf,然后獲得grd文件和文件路徑,開始循環繪制等值線圖,導出每個要素的srf文件。

核心代碼如下:

Set levels=ContourMapFrame.Levels

n=levels.Count '對象levels的等級總數

item=levels.Item(Index:=n)

If (item/1000>=1) Then item=item-item Mod 1000 '求余

If (item/1000<1 And item/100>=1) Then item=item-item Mod 100

If (item/100<1 And item/10>=1) Then item=item-item Mod 10

avg=(0+item)/4

levels.AutoGenerate(minlevel:=0,maxlevel:=item,interval:=avg)

levels(1).Fill.ForeColor=RGB(236,230,242)

levels(2).Fill.ForeColor=RGB(207,195,224)

levels(3).Fill.ForeColor=RGB(158,134,193)

levels(4).Fill.ForeColor=RGB(110,74,162)

因為批處理沒法完全代替人工所有的操作,所以需要把每個要素的等值線圖生成srf文件,以便對圖層進行一些小的調整,以達到自己的要的效果。

3.4 圖形的輸出與自動顯示

將圖件導出,需要用到Surfer的應用(Application)對象的Export的方法[9]。

核心代碼如下:

While Data <> ""

doc = Surferapp.Documents.Open(path + Data, "")

If w = "" Or h = "" Then doc.Export(path + Data + "." + formats)

Else doc.Export(path + Data + "." + formats, SelectionOnly:=False, Options:="Width=" & w + ", Height=" & h)

End If

Data = Dir()

End While

4 結語

利用VB編程對海洋數據進行處理,實現向Surfer軟件數據文件的自動轉換,并用VB對Surfer軟件二次開發繪圖函數,實現海洋要素的等值線圖、流場矢量圖等值線圖等圖形的繪制,以及展望未來要實現的功能,動態顯示模型。將模擬結果通過可視化的手段直觀地顯示出來,有利于觀察和分析模擬結果。通過VB編制繪圖界面,繪圖任務簡單明了,在繪圖界面上點擊各種功能按鈕即可進行繪圖,并用combo控件實現在一個接口程序中多種圖形的批量繪制,減免不必要的重復編程與操作,節省一定的人力和時間。

參考文獻

[1] 賈宏元,趙光平,孫銀川,等.基于Surfer Automation對象技術的等值線自動繪圖方法研究與應用[J].計算機系統應用,2006,15(7):21-24.

[2] 張新宜,張端好.利用VB對Surfer軟件二次開發實現降雨量圖自動繪制[J].氣象水文海洋儀器,2010(1):24-27.

[3] 侯春秋,李澤琴,巫曉兵,等.VB和Surfer Automation技術在地球化學勘查中的應用[J].物探化探計算技術, 2010,32(5):555-570.

[4] 王冠琳,胡筱敏,熊學軍,等.使用Surfer Automation實現海洋要素等值線圖的批量繪制[J].海洋技術,2007,26 (2):70-75.

[5] 尼建軍,張學宏.Surfer7.0嵌入VB6.0編程實現水文數據快速可視化[J].海洋測繪,2005,25(1):64-66.

[6] 姜麗杰.VB與Excel數據導人導出的研究與實現[J].遼寧師專學報,2012,14(1):43-45.

[7] 宣瑞卿,朱介壽,鄭沂森.C++與Surfer的接口技術及其應用[J].計算機應用,2004(6):364-365.

[8] 劉峰.應用Kriging算法實現氣象資料空間插值[J].氣象科技,2004,32(2):110-115.

[9] 張麗莉,吳健生.綜合利用VB與Surfer實現地學三維曲面的動態顯示[J].計算機工程與應用,2003(14):140-141.

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合