馮偉華, 陳恩科, 張隨安, 李懷敏
(1.陜西省地質(zhì)調(diào)查中心, 西安 710014;2.陜西省地礦局 區(qū)域地質(zhì)礦產(chǎn)研究院, 咸陽 712000)
在1∶50 000、1∶200 000化探采樣中,一般根據(jù)設(shè)計采樣點位圖人工量取設(shè)計點位坐標,再用GPS導航采取樣品。作者詣在探討利用計算機實現(xiàn)設(shè)計采樣點位坐標的自動提取和填寫樣品編號,以提高野外生產(chǎn)效率和工作精度。坐標提取用MapGis軟件來實現(xiàn),樣品編號用VBA語言編程實現(xiàn),作者重點介紹用VBA編程填寫樣品編號的方法、流程。
圖1為一張經(jīng)過校正的標準位置的的1∶50 000采樣點位設(shè)計圖,采樣點文件為“設(shè)計采樣點位.wt”點文件。選擇“設(shè)計采樣點位”點文件,為編輯狀態(tài)。選擇“點編輯—編輯屬性結(jié)構(gòu)”菜單。選擇插入項,字段名稱輸入X,字段類型長整形,字段長度“8”,小數(shù)位數(shù)“0”,再插入一項,字段名稱輸入Y,其他同上,完成后點擊“OK”選項,退出Mapgis。
利用數(shù)字填圖軟件打開設(shè)計采樣點位圖。選擇“設(shè)計采樣點位”點文件,為編輯狀態(tài)。選擇PRB數(shù)據(jù)操作-PRB-R過程計算與點坐標重寫菜單見圖1,點擊點坐標寫入。退出菜單,選擇修改點屬性結(jié)構(gòu),查看坐標寫入狀況(圖1),查看點屬性,坐標已寫入屬性,x為6位數(shù)據(jù)、y為7位數(shù)據(jù),退出數(shù)字填圖。
打開MapGIS程序,選擇投影變換窗口。選擇“工具-屬性生成文本文件”菜單,填寫輸出的文本文件的名稱,見圖2設(shè)置各項,完成屬性輸出。輸出的文本文件有三項數(shù)據(jù),ID號、X、Y。將文本文件轉(zhuǎn)換為Excel格式,以備后續(xù)編寫采樣點編號使用。
在1∶50 000化探中,樣品編號分為三步:首先將圖幅范圍以縱橫坐標,整公里方里網(wǎng)為界距劃分為1 km2基本單元格,由左到右,由上到下依次順序編號;再將每個1 km2基本單元格,以x、y500 m間距等分為四個0.25 km2小單元格,順時針編號為a、b、c、d;在每個小單元格內(nèi)按x坐標由小到大依次編號a1、a2等。因此一個樣品編號(例1031a2)由三部分組成:一級編號(基本單元格號,1031)+二級編號(小單元格編號,a)+三級編號(2)。
圖1 設(shè)計采樣點位圖及點位賦屬性窗口Fig.1 Map of design of sampling point and window of point site to attribute
圖2 屬性輸出窗口Fig.2 Output window of attributes
“宏”是一些存儲了一系列命令的程序,用戶通過“宏”功能來創(chuàng)建命令程序,使應(yīng)用程序自動化。 Visual Basic for Applications(VBA)是Visual Basic的一種宏語言,主要能用來擴展Windows的應(yīng)用程序(Excel、Word等)功能,使應(yīng)用程序自動化[3]。VBA語言可直接對Excel數(shù)據(jù)單元格和行、列進行操作,不必另行轉(zhuǎn)換數(shù)據(jù)格式和定義二維數(shù)組存儲數(shù)據(jù),數(shù)據(jù)運算簡便,運行速度高。本次編程涉及的VBA語言主要的方法、屬性簡要說明如表1所示。
原始點位數(shù)據(jù)以Excel形式存儲(圖3),第一行為標題行,A列、B列為設(shè)計點位坐標存儲位置,A列為x值,B列為y值。C列到G列為程序運算過程中數(shù)據(jù)中間存儲位置,C列為一級編碼、D列為二級編碼、E列為三級編碼、F列、G列為對應(yīng)的點位坐標。三級編碼完成后,A列、B列為空值,整列刪除,C列到E列合并為一列,為樣品編號列,見圖3右邊為數(shù)據(jù)處理結(jié)束后存儲格式。
將整個采樣點位看做分布于m行n列基本單元格內(nèi)縱坐標由大到小,橫坐標由小到大有序排列的二維數(shù)據(jù)陣,用雙重循環(huán)控制,循環(huán)遍歷全部數(shù)據(jù)。根據(jù)樣點坐標與起始編碼坐標的差值尋依次找第m行n列,第k個單元格內(nèi)的點位數(shù)據(jù);根據(jù)x坐標y坐標的后三位值確定二級編碼值;一個單元格內(nèi)點位數(shù)據(jù)提取完后,再次遍歷該單元格內(nèi)點位數(shù)據(jù),確定三級編碼值;一個單元格內(nèi)數(shù)據(jù)完成編碼后,將該單元格內(nèi)的點位數(shù)據(jù)復制到其他列并從原數(shù)據(jù)中刪除,以提高程序后續(xù)運行速度,程序流程見圖4。
Sub 編碼()
Dim ZRow As Long
′總行數(shù)
Dim STx, Endx As Long
′定義起始、結(jié)束
單元格x、y
Dim STy, Endy As Long
Dim Zh, Zl As Integer
′定義基本單元格的
總行,總列
Dim rng1 As Range
Fricode = 1
′一級編碼賦初始值“1 ”
Set rng1 = ActiveCell.CurrentRegion
ZRow = rng1.Rows.Count
′獲取Excel數(shù)
據(jù)的總行數(shù)
For n = 0 To Zh
′一重循環(huán)控制行
For m = 0 To Zl
′二重循環(huán)控制列
表1 主要的方法、屬性簡要說明[4]
圖3 數(shù)據(jù)存儲格式說明Fig.3 Shows the data storage format
Num = 0
′Num,記錄該基本單元格內(nèi)
設(shè)計樣點數(shù)
Fricode = Fricode + p
′Fricode,記錄
一級編碼值,順序編碼
p = 0
For i = 2 To ZRow
′順序遍歷Excel數(shù)據(jù)
Dqx = Cells(i, 2).Value
′獲取x坐標
Dqy = Cells(i, 3).Value
′獲取y坐標
If (Dqx - STx) 1000 = m And (STy - Dqy) 1000 = n Then
′數(shù)據(jù)滿足該單元格的條件
p = 1
′一級編碼加1
AA(Num) = i
′AA( )數(shù)組記錄滿足條件的數(shù)據(jù)行號,以備后續(xù)刪除該行數(shù)據(jù)
Num = Num + 1
。。。。。。。。
′判斷二級編碼值
Cells(j, 5).Value = Fricode
′將該單元格內(nèi)點位數(shù)據(jù)復制到第j行8、9列;5,6列賦一、二級編碼值。
Cells(j, 6).Value = Secode
Cells(j, 8).Value = Dqx
Cells(j, 9).Value = Dqy
Next i
For b = 1 To Num
′用雙重循環(huán)確定該
單元格內(nèi)Num個樣點的三級編碼值
。。。。。。。。
Next b
ZRow = ZRow - Num
For e = Num - 1 To 0 Step -1
′在原Excel數(shù)據(jù)中由后
向前刪除已編碼的Num個數(shù)據(jù)。
Range("A" & AA(e) & ":C" & AA(e)).Delete shift:=xlUp
Next e
Next m
′該單元格數(shù)據(jù)操作完成,開始提取該行下一個單元格的數(shù)據(jù)
Next n
′開始提取下一行,第一個單元格的數(shù)據(jù)
Range("A:B").Delete shift:=xlLe
′全部編碼完成后,刪除1-2列空白列。
End Sub
圖4 程序流程圖Fig.4 Flow chart of the program
以四幅1∶50 000設(shè)計采樣點位圖為例,共設(shè)計采樣點位11 721個,提取的點位坐標如圖5所示。打開工具菜單,執(zhí)行宏命令(圖5),彈出程序界面, 輸入工作區(qū)范圍、基本單元格間距,開始執(zhí)行程序。完成全部編號需15 min左右。
圖5 程序運行界面Fig.5 Interface of program running
(1)在提取設(shè)計點位坐標時,所使用的設(shè)計采樣點位圖必須是經(jīng)校正標準位置的圖幅,提取的坐標x為6位、y為7位。
(2)程序中輸入的起始、結(jié)束X、 Y為整公里值,基本單元間距單位為公里。
(1)VBA語言針對Excel宏編程,語法簡單,運算簡便,運行效率高。
(2)程序的通用性較強,適用于 1∶50 000、 1∶200 000 等不同比例尺化探。
(3)該方法應(yīng)用于實際生產(chǎn),可有效地改善野外生產(chǎn)的精度,提高工作效率。
參考文獻:
[1] 中國地質(zhì)調(diào)查局發(fā)展研究中心,數(shù)字填圖用戶操作指南[M].北京:中國地質(zhì)調(diào)查發(fā)展中心,2000.
[2] DZ/TO 167-2006區(qū)域地球化學勘查規(guī)范[S].北京:中國標準出版社,2006.
[3] Excel VBA 基礎(chǔ)教程[EB/OL]互聯(lián)網(wǎng)百度文庫.
[4] Excel VBA語法辭典[M].北京:機械工業(yè)出版社,2010.