孫振勇,張燕,馬耀昌,馮國正(.長江水利委員會長江上游水文水資源勘測局,重慶 40000; .重慶市南岸區國土資源管理分局,重慶 400000)
EPS 2012下DLG數據編碼升級的編程實現
孫振勇1?,張燕2,馬耀昌1,馮國正1
(1.長江水利委員會長江上游水文水資源勘測局,重慶 400020; 2.重慶市南岸區國土資源管理分局,重慶 400000)
摘 要:新的國家地形圖圖式的運用導致了EPS的模板變化,原有的DLG數據勢必要進行編碼升級轉換才能加以運用。在分析了EPS數據結構機制的基礎上,利用VBScript腳本編程實現了數據的編碼對照,并進行無損匹配干預,最終實現了DLG數據的升級利用。
關鍵詞:數據結構;VB腳本;無損匹配;編碼對照
EPS 2012平臺在建立一個數據工程時,需要以一個準備好的“技術規則”作為依據,以使數據全面規范化。這個技術規則我們稱為“模板”。所謂“技術規則”,它定義了數據的分類編碼、分層、顏色、線型、圖例庫、比例尺、坐標系統、屬性數據結構、圖幅分幅方案、數據輸入輸出轉換對照等有關的內容,是數據所執行的標準和控制作業規范化的約定。通過模板的定制形成一種標準,在此模板基礎上完成的數據都符合了同樣的數據標準[1]。
國家基本比例尺地圖圖式已由GB/ T 7926-1995 向GB/ T20257-2007全面過渡執行,清華山維公司也推出了基于GB/ T20257-2007新平臺EPS2012和新模板,數據格式由“.mdb”轉為“.edb”。新舊模板兩者之間的通用性雖然很強,但也是需要進行一個升級轉換的過程才能實現DLG數據的使用。本文基于上述角度出發,探討了運用VBScript腳本編程進行DLG數據無損匹配的編碼升級問題。
EPS模板的主要內容包括定義元數據的一系列表,每個表各自負責系統工作的一個方面,又互相聯系協同工作。主要體現在以下四大方面:系統環境設置、地理數據存儲、實體編碼特征及符號描述、用戶擴展屬性。EPS模板下的地理數據結構定義如下表1:
User系列用于對指定工程的分層、顯示開關、顯示順序及相關點、線、面內聯屬性表進行定制。一個工程的DLG數據的存儲都是作為一條記錄存放在工程數據庫的數據結構表中,它們包括:GeoPointTB、GeoLineTB、GeoAreaTB、MarkNoteTB。其對應矢量數據信息表為BuildLayerTB、BuildPointTB、BuildLineTB、Build-AreaTB、BuildMarkNoteTB[2,4]。

EPS地理數據結構定義表 表1
通過EPS數據結構機制,我們可以知道新舊編碼升級表現在對同一個地物的實體編碼特征及符號描述差異化,編碼升級的無損匹配就是要去除該差異化,達到一致性。也就是要對上述地理數據結構定義表中同一地物新舊編碼的一致性匹配。
一個工程的DLG數據編碼無損升級應包括點、線、面、注記及其嵌套地物和相應的屬性等若干內容的升級。其作業流程圖如圖1所示:
3.1EDB工程舊編碼提取
編碼匹配升級,首先必須獲取工程數據的原有編碼。VBScript編程的思路是根據EPS數據結構機制關系,依次調用待升級工程下User系列各類點、線、面和注記表, 即GeoPointTB、GeoLineTB、GeoAreaTB、MarkNoteTB,從表中提取點數據、線數據、面數據和注記的編碼,并按一定的格式排序在TXT文本中。其關鍵程序語句如下[5,7]:

圖1 DLG數據無損匹配的編碼升級流程圖
'定義文本名稱及存放路徑
fileName = SSProcess.SelectFileName (0,"",0," Txt Files(?.txt) |?.txt|All Files (?.?) |?.?| |")
'調用GeoPointTB中點數據,點對象編碼提取并寫入Txt Files
CHKconditions=" WHERE GeoPointTB.Mark Mod 2 <>0 "
sqltexts="SELECT DISTINCT GeoPointTB.Code FROM Geo-PointTB "
'調用GeoLineTB中線數據,線對象編碼提取并寫入Txt Files
CHKconditions=" WHERE GeoLineTB.Mark Mod 2 <>0 "
sqltexts=" SELECT DISTINCT GeoLineTB.Code FROM Geo-LineTB"
'調用GeoAreaTB中面數據,面對象編碼提取并寫入Txt Files
CHKconditions=" WHERE GeoAreaTB.Mark Mod 2 <>0 "
sqltexts="SELECT DISTINCT GeoAreaTB.Code FROM Geo-AreaTB "
'調用MarkNoteTB中數據,注記對象編碼提取并寫入Txt Files
CHKconditions=" WHERE MarkNoteTB.Mark Mod 2 <>0 "
sqltexts="SELECT DISTINCT MarkNoteTB.FontClass FROM MarkNoteTB "
打開剛剛所輸出的“編碼提取表.txt”,我們可以看到DLG數據中所用到的點、線、面編碼以及注記分類號都被提取有序的排列在文本文件中,如表2所示:

編碼提取表 表2
3.2新舊編碼對照
編碼對照,就是在上述“編碼提取表.txt”文件中,在原編碼(或原注記分類號)所在的行位置后面填寫新模板對應的編碼(或新注記分類號),中間用逗號隔開。一一對照填寫完整后,另存為“編碼對照表.txt”文件。該過程相對簡單,其內容示例如表3所示:

編碼對照表[8]表3
3.3地物要素的無損匹配
EPS到其他測圖軟件的轉換(如轉換到南方CASS),數據在一致性、線型屬性、嵌套要素等屬性的改變等都需要人工干預才能做到無損轉換。EPS編碼升級由于其數據結構機制并未改變,對同一個地物的實體編碼特征及符號描述機制并未做很大的改動,所以地物要素匹配要相對簡單得多[3]。其匹配主要表現在三個方面,一是原有的地物編碼現在已經定義成了若干個地物編碼(例如原有水文站現在細化分成水文站和水位站),可以根據實際地物干預對照;二是原有的地物編碼在新的模板中已經沒有對照,需要尋找一個新的地物編碼進行匹配(例如工礦設施范圍線需要用亂掘地范圍線表示);三是原有的地物編碼有一對一的編碼對照,但是其符號描述發生了局部改變的,需要修改其描述機制進行一致性匹配。前兩種是在編碼對照表或者是新的edb工程中直接進行人工匹配對照,其過程并不復雜,但是完全需要人工干預才可達到地物的實體編碼特征及符號描述一致性,示例如表4所示。

人工干預的地物編碼匹配示例表 表4
第三類最為常見的就是點位中心的不匹配引起地物編碼升級后發生了位置偏移。需要進行該地物對應的Geo?TB(?表示點、線、面)表或者是MarkNoteTB 表,在平臺環境下FE命令對“符號描述”進行修改。最為典型的例子就是簡易軌道線符號,如表5所示:

地物一致性匹配示例表[8]表5
3.4VBScript腳本進行編碼升級
上述工作完善后,最終的編碼升級則可以通過EPS 2012 VBScript腳本編程一鍵實現。運行該功能,在彈出的“選擇編碼對照表”對話框中選擇前面準備好的”編碼對照表.txt”,點擊“打開”按鈕,在隨后彈出的“選擇要轉換的EDB工程”對話框中找到要編碼升級的EDB工程,選中后點擊“打開”按鈕。等待程序批處理編碼升級,最后得到新編碼的DLG數據工程。其編程思路和關鍵語句如下[6,7]:
(1)選擇用于轉換的編碼對照表
DuiZhaoTxtFile=SSProcess.SelectFileName(1,"選擇編碼對照表",0,"TXT Files(?.txt) |?.txt|All Files (?.?) |?.?| |")
(2)導入EPS EDB
EDBfileName=SSProcess.SelectFileName(1,"選擇要轉換的EDB工程",1," EDB Files(?.EDB) |?.EDB | All Files (?.?) |?.?| |")
(3)點、線、面處理
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
判斷新編碼所約定的數據類型(GeoType),與原實體對象的一致性,特別是點、線(面)的一致性。
GeoType =GetGeoTypeByCode( arrobjNewInfo(0))
Select Case GeoType
Case "0"
GeoType="POINT"
Case "1"
GeoType="LINE"
Case "2"
GeoType="AREA"
(5)保存到數據庫,編碼升級完畢
SSProcess.SetMapStatus 0,2 '開鎖數據庫
SSProcess.SaveBufferObjToDatabase'存庫對象列表保存到數據庫
SSProcess.ExecuteSDLFunction " $ SDL.SSProject.View.Extend",0 '數據范圍全視
SSProcess.ExecuteSDLFunction " $ SDL.SSProject.Display.RedrawExtend",0 '圖形重新生成
Msgbox "OK,編碼升級完畢!"
DLG數據編碼升級無損匹配的實現是在充分分析了EPS數據結構機制基礎上,通過VBScript編程完成了編碼提取和編碼升級兩個程序,并進行了人工干預達到DLG數據的無損匹配升級。本方法完全不需要在第三方平臺上進行升級匹配,并通過VB程序使得編碼提取和升級變得簡單化和批量化,工作效率大大得到提高。
參考文獻
[1] 王曉華,楊婷.淺談清華山維EPS2008在十二五基礎測繪更新中與GEOWAY DPS的比較[J].現代測繪,2013 (1):58~59.
[2] 郭昕,武娟.基于C#語言的EPSW與CASS數據格式轉換[J].北京測繪,2009(3):78~84.
[3] 覃豪杰,黃彩軍,方振華.清華山維EPS到南方CASS地形數據無損轉換研究[J].地理空間信息,2013(11):88~92.
[4] 王彥紅,于海燕.淺談北京清華山維軟件模板控制技術的應用研究[J].黑龍江科技信息,2013(2):29.
[5] 鄭建鋒.基于VB和WalkScript腳本二次開發實現對地籍數據入庫和數據檢查[J].現代測繪,2012(3):63~64.
[6] 周長江,顧和和.基于VB環境下水準網平差程序設計研究[J].現代測繪,2012(1):12~14.
[7] 楊忠寶,康順哲.VB語言程序設計教程[M].北京:人民郵電出版社,2010.
[8] GB/ T 20257.國家基本比例尺地圖圖式[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
文章編號:1672-8262(2015)06-121-04中圖分類號:P209
文獻標識碼:B
收稿日期:?2015—09—25
作者簡介:孫振勇(1985—),男,注冊測繪師,工程師,主要從事水文測驗、河道勘測等技術工作。