陳小寧 王麗君 林佳富
【摘要】本文針對(duì)MapGIS明碼文件與ExcelVBA在地物化綜合剖面成圖中的協(xié)同應(yīng)用而展開(kāi)。首先介紹MapGIS線文件的明碼格式,再介紹Excel的自動(dòng)化語(yǔ)言ExcelVBA自動(dòng)高效地將原始數(shù)據(jù)整理并保存為MapGIS線明碼文件,在繪制相關(guān)曲線的時(shí)候,通過(guò)相關(guān)參數(shù)的修改可以對(duì)曲線進(jìn)行任意的組合,以適應(yīng)實(shí)際工作和研究的需要。
【關(guān)鍵詞】MapGIS明碼文件 ExcelVBA 地物化綜合剖面
1問(wèn)題的提出及解決方法
在工作中,以往地物化綜合剖面的繪制往往占用工作人員的大量時(shí)間。甚至采用先手繪,然后掃描,再矢量化的方法。工作人員在行業(yè)軟件中進(jìn)行了大量的嘗試,但當(dāng)涉及到工作比例尺、成圖比例尺、曲線組合等問(wèn)題的時(shí)候,此類(lèi)軟件就不能滿(mǎn)足實(shí)際需求。
利用ExcelVBA強(qiáng)大的自動(dòng)化編輯功能,構(gòu)建MapGIS明碼文件,然后將此明碼文件轉(zhuǎn)化為MapGIS的線文件,完成圖件的繪制,這一過(guò)程中通過(guò)“偏移量”的設(shè)置,可以對(duì)元素任意組合,滿(mǎn)足實(shí)際需要。
思路如圖1所示。
2MapGIS文件明碼格式介紹
本文主要使用MapGIS的線文件,所以現(xiàn)主要介紹MapGIS線明碼文件的格式,點(diǎn)(區(qū))文件的明碼格式可參閱相關(guān)書(shū)籍(如圖2)。
邏輯結(jié)構(gòu):文件頭線數(shù) 1號(hào)線 2號(hào)線……n號(hào)線
具體為:
A、文件頭,8個(gè)字節(jié)
WMAP9021
B、線數(shù) n
C、1號(hào)線
D、線參數(shù)
說(shuō)明:在以上的說(shuō)明文字中,斜體部分為文件所需內(nèi)容。文中帶下劃線的文字為介紹文字,實(shí)際明碼文件中不需要。線參數(shù)包括:線型號(hào),輔助線型號(hào),線色,線寬,X系數(shù),Y系數(shù),輔助色,圖層,透明輸出(具體數(shù)值視MapGIS軟件及成圖需要)。
3Excel數(shù)據(jù)準(zhǔn)備及ExcelVBA數(shù)據(jù)計(jì)算、提取
3.1繪制“數(shù)據(jù)計(jì)算與提取”按鈕并添加按鈕的單擊事件,代碼如下:
PrivateSubCommandButton1_Click()
UserForm1.Show
EndSub
3.2繪制“數(shù)據(jù)計(jì)算與提取”對(duì)話(huà)框,如圖2所示
3.2.1添加“計(jì)算”按鈕的單擊事件
成圖數(shù)據(jù)=觀測(cè)數(shù)據(jù)×10×成圖比例尺+偏移量
縱向偏移量相當(dāng)于一常數(shù),不同元素的偏移量設(shè)置為同一數(shù)值,即表示將這幾種元素曲線組合在一起,添加“計(jì)算”按鈕的單擊事件,主要是通過(guò)循環(huán)語(yǔ)句for…next賦值,部分代碼如下:
PrivateSubCommandButton1_Click()
DimiAsLong
DimkAsLong
k=Val(TextBox0.Text)+3
Worksheets("sheet1").Activate
Fori=4TokStep1
ActiveSheet.Cells(i,16).Value=(Val(Cells(i,4))*10/Val(TextBox2.Text)+Val(TextBox3.Text)
ActiveSheet.Cells(i,17).Value=(Val(Cells(i,5))*10/Val(TextBox5.Text)+Val(TextBox6.Text)
……
Nexti
EndSub
3.2.2添加“提取線”按鈕的單擊事件
“提取線”按鈕主要是通過(guò)賦值語(yǔ)句將2.1過(guò)程中計(jì)算的數(shù)據(jù)按照MapGIS線明碼文件的數(shù)據(jù)格式要求重新組合數(shù)據(jù),完成效果如圖3所示,步驟如下:
(1)采用VBA的賦值語(yǔ)言建立表頭、輸入線數(shù)、輸入線參數(shù),部分代碼如下
ActiveSheet.Cells(1,1).Value="WMAP9021"
ActiveSheet.Cells(2,1).Value="16"
ActiveSheet.Cells(3,1).Value="1"
ActiveSheet.Cells(3,2).Value="1"
………
ActiveSheet.Cells(4,1).Value=k
(2)寫(xiě)入x、y坐標(biāo),部分代碼如下:
Fori=5Tok+4
Worksheets("sheet2").Cells(i,2).Value=Worksheets("sheet1").Cells(i-1,21).Value
Worksheets("sheet2").Cells(i,1).Value=2*i-10
Nexti
(3)寫(xiě)入線的ID號(hào)和線長(zhǎng)度參數(shù),代碼如下:
Worksheets("sheet2").Cells(k+5,1).Value=1
Worksheets("sheet2").Cells(k+5,2).Value=10000
經(jīng)過(guò)以上三步,已經(jīng)完成了MapGIS明碼文件在Excel組建。接下來(lái)將Excel文件存儲(chǔ)為以“wl”為后綴的文件。
3.3添加“保存線”按鈕的單擊事件
接下來(lái)將Excel文件存儲(chǔ)為以“wal”為后綴的文件,字符見(jiàn)已逗號(hào)分隔,代碼如下
PrivateSubCommandButton4_Click()
Dimstr$,i%,len1%
OpenThisWorkbook.Path&"\001.wal"ForOutputAs#1
Fori=1To[a65536].End(3).Row
len1=Application.CountA(Cells(i,1).EntireRow)
Iflen1=1Then
str=Cells(i,1)
Else
str=Join(Application.Transpose(Application.Transpose_
(Cells(i,1).Resize(1,len1))),",")
EndIf
Print#1,str
Next
Close#1
EndSub
4MapGIS下線明碼文件到線文件的轉(zhuǎn)化
4.1打開(kāi)MapGIS軟件的“圖形處理”中的“文件轉(zhuǎn)換”對(duì)話(huà)框,如圖4所示。
首先輸入已經(jīng)準(zhǔn)備好的MapGIS線明碼文件,再輸出MapGIS明碼格式。至此,完成曲線的所有繪制過(guò)程。
4.2曲線的整飾
主要包括坐標(biāo)軸的繪制、圖例的制作、相關(guān)注釋的添加等等,建議采用MapGIS的“移動(dòng)坐標(biāo)調(diào)整”、“點(diǎn)輸入線”等功能來(lái)完成上述工作,以達(dá)到精確制圖的目的,圖件整飾完成后如圖5所示。
5存在的問(wèn)題和建議
本文主要涉及到了MapGIS線明碼文件,建議合理的利用MapGIS點(diǎn)明碼文件,這樣可以快速完成對(duì)曲線的注釋。
MapGIS作為一款優(yōu)秀的國(guó)產(chǎn)基礎(chǔ)地理信息系統(tǒng)軟件平臺(tái),擁有強(qiáng)大的功能,并支持多種編程語(yǔ)言的二次開(kāi)發(fā),充分利用這一功能會(huì)給我們的工作和學(xué)習(xí)帶來(lái)極大地便利和樂(lè)趣。
參考文獻(xiàn):
[1]李政,梁海英,李昊.VBA應(yīng)用基礎(chǔ)與實(shí)例教程[M].北京:國(guó)防工業(yè)出版社,2005.
[2]張濱生.利用MAPGIS快速制作點(diǎn)位數(shù)據(jù)圖的一種方法[J].物化探計(jì)算技術(shù),2001,23(1):90.
[3]ExcelHome.Excel應(yīng)用大全.北京:人民郵電出版社.