孫振勇,張燕,馬耀昌,馮國(guó)正(.長(zhǎng)江水利委員會(huì)長(zhǎng)江上游水文水資源勘測(cè)局,重慶 40000; .重慶市南岸區(qū)國(guó)土資源管理分局,重慶 400000)
EPS 2012下DLG數(shù)據(jù)編碼升級(jí)的編程實(shí)現(xiàn)
孫振勇1?,張燕2,馬耀昌1,馮國(guó)正1
(1.長(zhǎng)江水利委員會(huì)長(zhǎng)江上游水文水資源勘測(cè)局,重慶 400020; 2.重慶市南岸區(qū)國(guó)土資源管理分局,重慶 400000)
摘 要:新的國(guó)家地形圖圖式的運(yùn)用導(dǎo)致了EPS的模板變化,原有的DLG數(shù)據(jù)勢(shì)必要進(jìn)行編碼升級(jí)轉(zhuǎn)換才能加以運(yùn)用。在分析了EPS數(shù)據(jù)結(jié)構(gòu)機(jī)制的基礎(chǔ)上,利用VBScript腳本編程實(shí)現(xiàn)了數(shù)據(jù)的編碼對(duì)照,并進(jìn)行無損匹配干預(yù),最終實(shí)現(xiàn)了DLG數(shù)據(jù)的升級(jí)利用。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);VB腳本;無損匹配;編碼對(duì)照
EPS 2012平臺(tái)在建立一個(gè)數(shù)據(jù)工程時(shí),需要以一個(gè)準(zhǔn)備好的“技術(shù)規(guī)則”作為依據(jù),以使數(shù)據(jù)全面規(guī)范化。這個(gè)技術(shù)規(guī)則我們稱為“模板”。所謂“技術(shù)規(guī)則”,它定義了數(shù)據(jù)的分類編碼、分層、顏色、線型、圖例庫、比例尺、坐標(biāo)系統(tǒng)、屬性數(shù)據(jù)結(jié)構(gòu)、圖幅分幅方案、數(shù)據(jù)輸入輸出轉(zhuǎn)換對(duì)照等有關(guān)的內(nèi)容,是數(shù)據(jù)所執(zhí)行的標(biāo)準(zhǔn)和控制作業(yè)規(guī)范化的約定。通過模板的定制形成一種標(biāo)準(zhǔn),在此模板基礎(chǔ)上完成的數(shù)據(jù)都符合了同樣的數(shù)據(jù)標(biāo)準(zhǔn)[1]。
國(guó)家基本比例尺地圖圖式已由GB/ T 7926-1995 向GB/ T20257-2007全面過渡執(zhí)行,清華山維公司也推出了基于GB/ T20257-2007新平臺(tái)EPS2012和新模板,數(shù)據(jù)格式由“.mdb”轉(zhuǎn)為“.edb”。新舊模板兩者之間的通用性雖然很強(qiáng),但也是需要進(jìn)行一個(gè)升級(jí)轉(zhuǎn)換的過程才能實(shí)現(xiàn)DLG數(shù)據(jù)的使用。本文基于上述角度出發(fā),探討了運(yùn)用VBScript腳本編程進(jìn)行DLG數(shù)據(jù)無損匹配的編碼升級(jí)問題。
EPS模板的主要內(nèi)容包括定義元數(shù)據(jù)的一系列表,每個(gè)表各自負(fù)責(zé)系統(tǒng)工作的一個(gè)方面,又互相聯(lián)系協(xié)同工作。主要體現(xiàn)在以下四大方面:系統(tǒng)環(huán)境設(shè)置、地理數(shù)據(jù)存儲(chǔ)、實(shí)體編碼特征及符號(hào)描述、用戶擴(kuò)展屬性。EPS模板下的地理數(shù)據(jù)結(jié)構(gòu)定義如下表1:
User系列用于對(duì)指定工程的分層、顯示開關(guān)、顯示順序及相關(guān)點(diǎn)、線、面內(nèi)聯(lián)屬性表進(jìn)行定制。一個(gè)工程的DLG數(shù)據(jù)的存儲(chǔ)都是作為一條記錄存放在工程數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)表中,它們包括:GeoPointTB、GeoLineTB、GeoAreaTB、MarkNoteTB。其對(duì)應(yīng)矢量數(shù)據(jù)信息表為BuildLayerTB、BuildPointTB、BuildLineTB、Build-AreaTB、BuildMarkNoteTB[2,4]。
EPS地理數(shù)據(jù)結(jié)構(gòu)定義表 表1
通過EPS數(shù)據(jù)結(jié)構(gòu)機(jī)制,我們可以知道新舊編碼升級(jí)表現(xiàn)在對(duì)同一個(gè)地物的實(shí)體編碼特征及符號(hào)描述差異化,編碼升級(jí)的無損匹配就是要去除該差異化,達(dá)到一致性。也就是要對(duì)上述地理數(shù)據(jù)結(jié)構(gòu)定義表中同一地物新舊編碼的一致性匹配。
一個(gè)工程的DLG數(shù)據(jù)編碼無損升級(jí)應(yīng)包括點(diǎn)、線、面、注記及其嵌套地物和相應(yīng)的屬性等若干內(nèi)容的升級(jí)。其作業(yè)流程圖如圖1所示:
3.1EDB工程舊編碼提取
編碼匹配升級(jí),首先必須獲取工程數(shù)據(jù)的原有編碼。VBScript編程的思路是根據(jù)EPS數(shù)據(jù)結(jié)構(gòu)機(jī)制關(guān)系,依次調(diào)用待升級(jí)工程下User系列各類點(diǎn)、線、面和注記表, 即GeoPointTB、GeoLineTB、GeoAreaTB、MarkNoteTB,從表中提取點(diǎn)數(shù)據(jù)、線數(shù)據(jù)、面數(shù)據(jù)和注記的編碼,并按一定的格式排序在TXT文本中。其關(guān)鍵程序語句如下[5,7]:
圖1 DLG數(shù)據(jù)無損匹配的編碼升級(jí)流程圖
'定義文本名稱及存放路徑
fileName = SSProcess.SelectFileName (0,"",0," Txt Files(?.txt) |?.txt|All Files (?.?) |?.?| |")
'調(diào)用GeoPointTB中點(diǎn)數(shù)據(jù),點(diǎn)對(duì)象編碼提取并寫入Txt Files
CHKconditions=" WHERE GeoPointTB.Mark Mod 2 <>0 "
sqltexts="SELECT DISTINCT GeoPointTB.Code FROM Geo-PointTB "
'調(diào)用GeoLineTB中線數(shù)據(jù),線對(duì)象編碼提取并寫入Txt Files
CHKconditions=" WHERE GeoLineTB.Mark Mod 2 <>0 "
sqltexts=" SELECT DISTINCT GeoLineTB.Code FROM Geo-LineTB"
'調(diào)用GeoAreaTB中面數(shù)據(jù),面對(duì)象編碼提取并寫入Txt Files
CHKconditions=" WHERE GeoAreaTB.Mark Mod 2 <>0 "
sqltexts="SELECT DISTINCT GeoAreaTB.Code FROM Geo-AreaTB "
'調(diào)用MarkNoteTB中數(shù)據(jù),注記對(duì)象編碼提取并寫入Txt Files
CHKconditions=" WHERE MarkNoteTB.Mark Mod 2 <>0 "
sqltexts="SELECT DISTINCT MarkNoteTB.FontClass FROM MarkNoteTB "
打開剛剛所輸出的“編碼提取表.txt”,我們可以看到DLG數(shù)據(jù)中所用到的點(diǎn)、線、面編碼以及注記分類號(hào)都被提取有序的排列在文本文件中,如表2所示:
編碼提取表 表2
3.2新舊編碼對(duì)照
編碼對(duì)照,就是在上述“編碼提取表.txt”文件中,在原編碼(或原注記分類號(hào))所在的行位置后面填寫新模板對(duì)應(yīng)的編碼(或新注記分類號(hào)),中間用逗號(hào)隔開。一一對(duì)照填寫完整后,另存為“編碼對(duì)照表.txt”文件。該過程相對(duì)簡(jiǎn)單,其內(nèi)容示例如表3所示:
編碼對(duì)照表[8]表3
3.3地物要素的無損匹配
EPS到其他測(cè)圖軟件的轉(zhuǎn)換(如轉(zhuǎn)換到南方CASS),數(shù)據(jù)在一致性、線型屬性、嵌套要素等屬性的改變等都需要人工干預(yù)才能做到無損轉(zhuǎn)換。EPS編碼升級(jí)由于其數(shù)據(jù)結(jié)構(gòu)機(jī)制并未改變,對(duì)同一個(gè)地物的實(shí)體編碼特征及符號(hào)描述機(jī)制并未做很大的改動(dòng),所以地物要素匹配要相對(duì)簡(jiǎn)單得多[3]。其匹配主要表現(xiàn)在三個(gè)方面,一是原有的地物編碼現(xiàn)在已經(jīng)定義成了若干個(gè)地物編碼(例如原有水文站現(xiàn)在細(xì)化分成水文站和水位站),可以根據(jù)實(shí)際地物干預(yù)對(duì)照;二是原有的地物編碼在新的模板中已經(jīng)沒有對(duì)照,需要尋找一個(gè)新的地物編碼進(jìn)行匹配(例如工礦設(shè)施范圍線需要用亂掘地范圍線表示);三是原有的地物編碼有一對(duì)一的編碼對(duì)照,但是其符號(hào)描述發(fā)生了局部改變的,需要修改其描述機(jī)制進(jìn)行一致性匹配。前兩種是在編碼對(duì)照表或者是新的edb工程中直接進(jìn)行人工匹配對(duì)照,其過程并不復(fù)雜,但是完全需要人工干預(yù)才可達(dá)到地物的實(shí)體編碼特征及符號(hào)描述一致性,示例如表4所示。
人工干預(yù)的地物編碼匹配示例表 表4
第三類最為常見的就是點(diǎn)位中心的不匹配引起地物編碼升級(jí)后發(fā)生了位置偏移。需要進(jìn)行該地物對(duì)應(yīng)的Geo?TB(?表示點(diǎn)、線、面)表或者是MarkNoteTB 表,在平臺(tái)環(huán)境下FE命令對(duì)“符號(hào)描述”進(jìn)行修改。最為典型的例子就是簡(jiǎn)易軌道線符號(hào),如表5所示:
地物一致性匹配示例表[8]表5
3.4VBScript腳本進(jìn)行編碼升級(jí)
上述工作完善后,最終的編碼升級(jí)則可以通過EPS 2012 VBScript腳本編程一鍵實(shí)現(xiàn)。運(yùn)行該功能,在彈出的“選擇編碼對(duì)照表”對(duì)話框中選擇前面準(zhǔn)備好的”編碼對(duì)照表.txt”,點(diǎn)擊“打開”按鈕,在隨后彈出的“選擇要轉(zhuǎn)換的EDB工程”對(duì)話框中找到要編碼升級(jí)的EDB工程,選中后點(diǎn)擊“打開”按鈕。等待程序批處理編碼升級(jí),最后得到新編碼的DLG數(shù)據(jù)工程。其編程思路和關(guān)鍵語句如下[6,7]:
(1)選擇用于轉(zhuǎn)換的編碼對(duì)照表
DuiZhaoTxtFile=SSProcess.SelectFileName(1,"選擇編碼對(duì)照表",0,"TXT Files(?.txt) |?.txt|All Files (?.?) |?.?| |")
(2)導(dǎo)入EPS EDB
EDBfileName=SSProcess.SelectFileName(1,"選擇要轉(zhuǎn)換的EDB工程",1," EDB Files(?.EDB) |?.EDB | All Files (?.?) |?.?| |")
(3)點(diǎn)、線、面處理
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition " SSObj _ Type"," = = "," POINT,LINE,AREA"
SSProcess.SetSelectCondition " SSObj_DataMark"," <>"," OK"
SSProcess.SelectFilter
geocount=SSProcess.GetSelGeoCount()
(4)判斷GeoType
判斷新編碼所約定的數(shù)據(jù)類型(GeoType),與原實(shí)體對(duì)象的一致性,特別是點(diǎn)、線(面)的一致性。
GeoType =GetGeoTypeByCode( arrobjNewInfo(0))
Select Case GeoType
Case "0"
GeoType="POINT"
Case "1"
GeoType="LINE"
Case "2"
GeoType="AREA"
(5)保存到數(shù)據(jù)庫,編碼升級(jí)完畢
SSProcess.SetMapStatus 0,2 '開鎖數(shù)據(jù)庫
SSProcess.SaveBufferObjToDatabase'存庫對(duì)象列表保存到數(shù)據(jù)庫
SSProcess.ExecuteSDLFunction " $ SDL.SSProject.View.Extend",0 '數(shù)據(jù)范圍全視
SSProcess.ExecuteSDLFunction " $ SDL.SSProject.Display.RedrawExtend",0 '圖形重新生成
Msgbox "OK,編碼升級(jí)完畢!"
DLG數(shù)據(jù)編碼升級(jí)無損匹配的實(shí)現(xiàn)是在充分分析了EPS數(shù)據(jù)結(jié)構(gòu)機(jī)制基礎(chǔ)上,通過VBScript編程完成了編碼提取和編碼升級(jí)兩個(gè)程序,并進(jìn)行了人工干預(yù)達(dá)到DLG數(shù)據(jù)的無損匹配升級(jí)。本方法完全不需要在第三方平臺(tái)上進(jìn)行升級(jí)匹配,并通過VB程序使得編碼提取和升級(jí)變得簡(jiǎn)單化和批量化,工作效率大大得到提高。
參考文獻(xiàn)
[1] 王曉華,楊婷.淺談清華山維EPS2008在十二五基礎(chǔ)測(cè)繪更新中與GEOWAY DPS的比較[J].現(xiàn)代測(cè)繪,2013 (1):58~59.
[2] 郭昕,武娟.基于C#語言的EPSW與CASS數(shù)據(jù)格式轉(zhuǎn)換[J].北京測(cè)繪,2009(3):78~84.
[3] 覃豪杰,黃彩軍,方振華.清華山維EPS到南方CASS地形數(shù)據(jù)無損轉(zhuǎn)換研究[J].地理空間信息,2013(11):88~92.
[4] 王彥紅,于海燕.淺談北京清華山維軟件模板控制技術(shù)的應(yīng)用研究[J].黑龍江科技信息,2013(2):29.
[5] 鄭建鋒.基于VB和WalkScript腳本二次開發(fā)實(shí)現(xiàn)對(duì)地籍?dāng)?shù)據(jù)入庫和數(shù)據(jù)檢查[J].現(xiàn)代測(cè)繪,2012(3):63~64.
[6] 周長(zhǎng)江,顧和和.基于VB環(huán)境下水準(zhǔn)網(wǎng)平差程序設(shè)計(jì)研究[J].現(xiàn)代測(cè)繪,2012(1):12~14.
[7] 楊忠寶,康順哲.VB語言程序設(shè)計(jì)教程[M].北京:人民郵電出版社,2010.
[8] GB/ T 20257.國(guó)家基本比例尺地圖圖式[S].
The Programming Implementation of Upgrading Code Which of the DLG Datas Under EPS 2012
Sun Zhenyong1,Zhang Yan2,Ma Yaochang1,Feng Guozheng1
(1.Bureau of Hydrology and Water Resources Survey of the Upper Yangtze River,Chongqing 400014,China; 2.Chongqing Administration of Land,Resources and Housing Nan’an District Branch,Chongqing 400000,China)
Abstract:The use of the new National Topographic Map Symblols has resulted in the change of the Templates of EPS,only upgrading and transforming code that the original DLG datas can to be used.On the basis of analyzing the mechanism of EPS data structure,using VBScript program to achieve encoding controls of data,doing lossless matching, and finally achieve the upgraded application of DLG data.
Key words:data structure;VBScript;lossless matching;encoding control
文章編號(hào):1672-8262(2015)06-121-04中圖分類號(hào):P209
文獻(xiàn)標(biāo)識(shí)碼:B
收稿日期:?2015—09—25
作者簡(jiǎn)介:孫振勇(1985—),男,注冊(cè)測(cè)繪師,工程師,主要從事水文測(cè)驗(yàn)、河道勘測(cè)等技術(shù)工作。