郭文彬
(北京華地四維勘測技術(shù)有限公司,北京 100096)
Microsoft Visual Basic(VB)是一種由Microsoft公司開發(fā)的結(jié)構(gòu)化的、模塊化的、面向?qū)ο蟮?、包含協(xié)助開發(fā)環(huán)境的事件驅(qū)動(dòng)為機(jī)制的可視化程序設(shè)計(jì)語言。VB擁有圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)系統(tǒng),可以輕易地使用DAO、RDO、ADO連接數(shù)據(jù)庫,或者輕松地創(chuàng)建ActiveX控件。程序員可以輕松地使用VB提供的組件快速建立一個(gè)應(yīng)用程序[1]。
Surfer是美國Golden Software公司編制的一款以畫三維圖(等高線,image map,3d surface)的軟件。該軟件具有強(qiáng)大插值功能和繪制圖件能力,是處理XYZ數(shù)據(jù)的首選軟件??梢暂p松制作基面圖、數(shù)據(jù)點(diǎn)位圖、分類數(shù)據(jù)圖、等值線圖、線框圖、地形地貌圖、趨勢圖、矢量圖以及三維表面圖等;提供十幾種數(shù)據(jù)網(wǎng)格化方法,包含幾乎所有流行的數(shù)據(jù)統(tǒng)計(jì)計(jì)算方法;提供各種流行圖形圖像文件格式的輸入輸出接口以及各大GIS軟件文件格式的輸入輸出接口,大大方便了文件和數(shù)據(jù)的交流和交換;提供新版的腳本編輯引擎,自動(dòng)化功能得到極大加強(qiáng)[2]。
本文通過VB和Surfer編程,結(jié)合工程中的數(shù)據(jù)特點(diǎn),編制了Surfer自動(dòng)成圖工具,實(shí)現(xiàn)了等值線圖的自動(dòng)繪制。自動(dòng)生成的等值線圖如圖1所示,程序界面如圖2所示。
圖1 等值線圖
圖2 程序界圖
Surfer的程序結(jié)構(gòu)是采用ActiveX組件技術(shù)構(gòu)建的,可以采用各種編程語言如VB操作Surfer軟件,并調(diào)用其對象的屬性和方法實(shí)現(xiàn)自動(dòng)繪制各種圖形的功能。Surfer的對象層次結(jié)構(gòu)如圖3所示,其中最頂層的對象為Application對象,即Surfer本身,下面有四個(gè)直接對象:Documents Collection,Windows,Grid 和 VarioComponent。Documents Collection包含多級(jí)子對象,其中PlotDocument所包含的Shapes Collection是所有圖形的集合以及符號(hào)和文本的集合。在Surfer中等值線圖Contour Map也是圖形的一種[3-4]。
Surfer的等值線自動(dòng)成圖就是通過調(diào)用這些對象的方法和屬性來實(shí)現(xiàn)的。
圖3 Surfer的對象層次結(jié)構(gòu)圖
使用Surfer軟件繪制圖形主要包括以下幾個(gè)步驟:
①選擇數(shù)據(jù)文件,根據(jù)工程的特點(diǎn)選擇對應(yīng)的3列數(shù)據(jù),其中第一列為對應(yīng)圖形的X坐標(biāo)值,第二列為對應(yīng)圖形的Y坐標(biāo)值,第三列為高程或者其他屬性值。
②選擇合適的插值方法對所需要的數(shù)據(jù)進(jìn)行網(wǎng)格化處理,生成對應(yīng)的grd格式文件。
③根據(jù)已有的grd網(wǎng)格文件生成等值線圖。
④對所繪制的等值線圖進(jìn)行顏色填充、白化處理以及標(biāo)注等美化處理。
⑤把地圖和等值線圖、白化疊加,完成圖形繪制。
本文Surfer自動(dòng)化成圖也是基于上述Surfer繪圖的基本步驟來實(shí)現(xiàn)的。
對Surfer數(shù)據(jù)成圖的過程和Surfer的對象模型有了清楚的了解后,就可以編寫Surfer自動(dòng)化成圖的代碼了。主要過程如下,顯示部分代碼[5-6]。
//定義Surfer對象和變量
Dim srf As New Surfer.Application
Dim plotDoc AsSurfer.IPlotDocument
Dim mapFrame AsSurfer.IMapFrame
Dim mapbase AsSurfer.IBaseMap
Dim mdbmapFrame As Surfer.IMapFrame
Dim mdbmapbase As Surfer.IBaseMap
Dim gcmapFrame AsSurfer.IMapFrame
Dim gcmapbase AsSurfer.IBaseMap
Dim mapContour As Surfer.IContourMap
Dim titletextAs Surfer.IText
Dim inFile,strfilename As String
Dim outFile,filemanyaddress As String
Dim intPos,i As Integer
Dim baseName As String
Dim GridFile As String
Dim outGridFile As String
Dim inFileName As String
Dim FilesAs Variant
Dim x,y AsDouble
Dim AxisAs Surfer.IAxis
//選擇輸入、輸出文件和路徑
With CommonDialog1
.MaxFileSize=32767
.DialogTitle=“打開文件”
.CancelError=False
.Filter=“TXT文件|*.txt|DAT文件|*.dat|所有文件(*.*)|*.*”
.Flags=cdlOFNAllowMultiselectOr cdlOFNExplorer
.ShowOpen
Files=Split(filemanyaddress,Chr(0))
For i=1 To UBound(Files)Step 1
Files(i)=Files(0)&“”&Files(i)
Next i
……
//網(wǎng)格化數(shù)據(jù)
srf.GridData DataFile:=strfilename,xCol:=2,yCol:=5,zCol:=4,yMin:=yminy,yMax:=ymaxy,xMin:=y,xMax:=x,NumRows:=((ymaxy-yminy)/ydist+1),NumCols:=((x-y)/xdist+1),Algorithm:=srfKriging,showreport:=False, outgrid: =outFile, OutFmt: =srfGridFmtS7,dupmethod:=srfDupNone
SetplotDoc=srf.Documents.Add(srfDocPlot)
//繪制等值線
Set map Frame=plotDoc.Shapes.AddContourMap(outFile)
SetmapContour=mapFrame.Overlays(1)
IfCheck1.Value=1 Then
mapContour.Levels.LoadFile(Text11.Text)
End If
mapContour.FillContours=True
mapContour.LabelFont.Size=dgxsize
mapContour.LabelFont.Face=Text9.Text
mapContour.SmoothContours=4
mapContour.SmoothContours=srfConSmoothHigh
//白化處理
IfCheck2.Value=1 Then
Set mapFrame=plotDoc.Shapes.AddBaseMap(Text12.Text&inFileName&".bln")
Setmapbase=mapFrame.Overlays(1)
mapbase.Line.Width=gcblnsize
End If
IfCheck3.Value=1 Then
Set mapFrame=plotDoc.Shapes.AddBaseMap(Text13.Text&inFileName&“.bln”)
Setmapbase=mapFrame.Overlays(1)
mapbase.Line.Width=mdbblnsize
End If
……
//添加標(biāo)題和保存Surfer圖形
Set titletext=plotDoc.Shapes.AddText(x:=(xpage/2-2),y:=(ypage-1),Text:=inFileName&“線視電阻率擬斷面圖”)
titletext.Font.Face=Text7.Text
titletext.Font.Size=titlesize
plotDoc.SaveAsbaseName&“.srf”
srf.ScreenUpdating=True
srf.Documents.CloseAllsrfSaveChangesNo
srf.Quit
到此,完成了Surfer的自動(dòng)化成圖。
本文通過利用VB和Surfer實(shí)現(xiàn)了自動(dòng)繪制等值線圖,同時(shí)借助于其強(qiáng)大的數(shù)據(jù)分析和繪圖功能可以應(yīng)用到其他領(lǐng)域,同時(shí)發(fā)現(xiàn)可以修改其配置文件surfer.set實(shí)現(xiàn)更多更好的功能,同時(shí)也更加簡化。
[1]Microsoft Corporation微軟(中國)有限公司.Visual Basic6.0中文版程序號(hào)指南[R].北京:希望電腦公司出品,1998.
[2]楊朝輝,黨立華.基于Surfer Automation技術(shù)的三維立體渲染圖的繪制[J].海洋測繪,2003(26):47-49.
[3]熊文兵.用Surfer7.0繪制氣象等值線圖[J].廣西擴(kuò)展名,2003(43):55-57.
[4]陳明,何門貴.利用Grapher繪制彩色漸變剖面平面圖[J].物探與化探,2008,32(2):196-198.
[5]周陽,黃浩云,李志強(qiáng),等.基于C#與Surfer Automation完成大氣污染擴(kuò)散等值線自動(dòng)化生成[J].環(huán)境科學(xué)與管理,2011,36(1):31-34.
[6]黃夢龍.基于Surfer自動(dòng)化的等值線圖實(shí)時(shí)繪制與網(wǎng)絡(luò)發(fā)布方法[J].測繪與空間地理信息,2012,12(35):176-180.