林建美,何保君
(廣東省地質(zhì)測(cè)繪院,廣東 廣州 510800)
EPS腳本二次開(kāi)發(fā)在數(shù)字地形圖檢查中的幾則應(yīng)用*
林建美,何保君
(廣東省地質(zhì)測(cè)繪院,廣東 廣州 510800)
通過(guò)介紹EPS腳本語(yǔ)言的特點(diǎn),根據(jù)實(shí)際需要編寫(xiě)了地形圖檢查腳本文件,并詳細(xì)介紹了“編碼合法性檢查”和“房屋構(gòu)面檢查”兩個(gè)腳本實(shí)例。實(shí)踐證明,利用所編寫(xiě)的腳本文件能實(shí)現(xiàn)數(shù)字地形圖的半自動(dòng)化檢查,并提高工作效率。
EPS腳本;數(shù)據(jù)檢查;人機(jī)交互;VBScript二次開(kāi)發(fā)
數(shù)字地形圖是國(guó)土部門(mén)日常地籍管理的重要工作底圖之一,是不動(dòng)產(chǎn)測(cè)繪、農(nóng)村地籍調(diào)查等當(dāng)前國(guó)家重點(diǎn)工程項(xiàng)目的主要數(shù)據(jù)源。而數(shù)據(jù)質(zhì)量的好壞,直接影響到該產(chǎn)品在各個(gè)領(lǐng)域的應(yīng)用[1]。大批量的大比例尺數(shù)字地形圖成果的生產(chǎn)就給質(zhì)量檢查提出了較高要求,而數(shù)字地形圖的質(zhì)量是其應(yīng)用的“生命”,數(shù)據(jù)檢查是非常重要的環(huán)節(jié),它能把差、錯(cuò)、漏消滅在生產(chǎn)第一線,因此,采用高效、實(shí)用的數(shù)字地形圖質(zhì)量檢查手段和方法就顯得非常有必要。在數(shù)據(jù)檢查環(huán)節(jié)中引入自動(dòng)化、半自動(dòng)化技術(shù)和其他先進(jìn)的技術(shù),則會(huì)加快數(shù)據(jù)檢測(cè)的準(zhǔn)確度。本文通過(guò)介紹清華山維腳本語(yǔ)言的構(gòu)成,總結(jié)腳本編輯特點(diǎn),根據(jù)實(shí)際需要編寫(xiě)腳本[1-5],實(shí)現(xiàn)對(duì)地形圖半自動(dòng)化檢查,達(dá)到提高工作效率,降低勞動(dòng)成本的目的。
Visual Basic是Microsoft 公司推出的基于Windows平臺(tái)的軟件快速開(kāi)發(fā)工具,也是目前Windows環(huán)境下最受歡迎的程序設(shè)計(jì)工具之一。它采用事件驅(qū)動(dòng)的編程方式,支持面向?qū)ο蟮某绦蛟O(shè)計(jì)方式。VBScript是一種簡(jiǎn)單的描述性語(yǔ)言,腳本編寫(xiě)簡(jiǎn)單,可使用純文本建立[3],編輯和修改都十分方便。EPS地理信息工作站(以下簡(jiǎn)稱(chēng)EPS平臺(tái))是北京清華山維新技術(shù)開(kāi)發(fā)有限公司,自主研發(fā)的面向GIS數(shù)據(jù)生產(chǎn)、處理、建庫(kù)更新的測(cè)繪與地理信息系統(tǒng)領(lǐng)域?qū)I(yè)軟件。該平臺(tái)基于數(shù)據(jù)庫(kù)圖屬一體化存儲(chǔ),遵循從底至上的模塊化設(shè)計(jì)思想,按功能區(qū)分共有4個(gè)層次:數(shù)據(jù)存儲(chǔ)與數(shù)據(jù)庫(kù)接口層、平臺(tái)數(shù)據(jù)管理層、平臺(tái)通用功能層、專(zhuān)業(yè)功能層。其中,在數(shù)據(jù)接口層與數(shù)據(jù)管理層提供基于C++的程序級(jí)二次開(kāi)發(fā)支持,在通用與專(zhuān)業(yè)功能層次提供基于VBScript的腳本級(jí)二次開(kāi)發(fā)支持。EPS腳本后綴格式為*.VBS或*.JS,采用文本文件格式存儲(chǔ),不需要在EPS平臺(tái)重新編譯即可在平臺(tái)中使用菜單、命令行或工具按鈕方式執(zhí)行[2]。
SSProcess是EPS腳本語(yǔ)言固有的對(duì)象,是與EPS平臺(tái)交互的主要入口對(duì)象[4],SSProcess對(duì)象的功能包括工程管理、選擇集操作、圖形編輯操作、數(shù)據(jù)整理、數(shù)據(jù)轉(zhuǎn)換、坐標(biāo)轉(zhuǎn)換和系統(tǒng)設(shè)置等功能函數(shù)。因?yàn)镾SProcess是EPS平臺(tái)交互的主要入口對(duì)象,所以在編輯每個(gè)腳本前,都要在函數(shù)前加上SSProcess,比如要打開(kāi)已經(jīng)存在的EPS工程數(shù)據(jù)庫(kù),就需寫(xiě)成“SSProcess.OpenDatabase”。
EPS腳本的入口函數(shù)為OnClick(見(jiàn)圖1),每一個(gè)腳本文件中都一定要定義OnClick函數(shù),一般簡(jiǎn)單的批量操作處理,只需在入口函數(shù)OnClick下編寫(xiě)即可,但如果要實(shí)現(xiàn)復(fù)雜的、多動(dòng)作的步驟就需自定義多個(gè)Function函數(shù)。
圖1 腳本函數(shù)入口Fig.1 Script function entry
EPS腳本由多種接口構(gòu)成,不同的數(shù)據(jù)整理需要采用不同的接口編輯腳本。如平臺(tái)常用數(shù)據(jù)處理接口為SSProcess;工程管理接口為SSProject;屏幕繪圖函數(shù)接口為SSView;共享參數(shù)接口為SSParameter;管線處理接口為SSPipe;外業(yè)處理接口為SSurvey等等。
利用EPS腳本二次開(kāi)發(fā)平臺(tái),有規(guī)律性、可批量處理的操作都可以通過(guò)編寫(xiě)腳本來(lái)完成。通過(guò)腳本實(shí)現(xiàn)人機(jī)交互操作,提高工作效率,提升數(shù)據(jù)質(zhì)量,增強(qiáng)數(shù)據(jù)管理水平。
在EPS平臺(tái)中通過(guò)命令行輸入Script命令激活腳本編輯器或在工具欄的下拉菜單中找到“腳本編輯器”打開(kāi)編輯界面,如圖2所示。
圖2 腳本編輯器界面Fig.2 Script editor interface
圖2中,左欄為腳本的組織樹(shù)目錄,如“地形圖檢查”,用戶(hù)可以自行建立分組目錄,根據(jù)需要命名。該目錄下可以放置多個(gè)腳本,如圖2中的“地形圖檢查”目錄中共放置了32個(gè)有關(guān)地形圖檢查的腳本。點(diǎn)擊“執(zhí)行腳本”則執(zhí)行當(dāng)前目錄中選中的腳本。
數(shù)字地形圖檢查內(nèi)容包含地理精度、地物表達(dá)、數(shù)據(jù)結(jié)構(gòu)、地物編碼、空間關(guān)系等內(nèi)容[1]。根據(jù)不同的檢查內(nèi)容,編寫(xiě)相應(yīng)的腳本文件,實(shí)現(xiàn)自動(dòng)化檢查、批量化檢查,減少人工干預(yù)。下面例舉兩個(gè)腳本實(shí)例進(jìn)行說(shuō)明。
3.1 編碼合法性檢查
在數(shù)字地形圖上制定圖形符號(hào),分別表示實(shí)地的某種地物,這種圖形符號(hào)就稱(chēng)為地物符號(hào)[6]。每一個(gè)地物符號(hào)都有其相應(yīng)的地物編碼,這個(gè)編碼就是每個(gè)地物在地形圖上唯一的“身份證”號(hào)碼,是區(qū)別于其它地物的標(biāo)示。如果沒(méi)有統(tǒng)一的地物編碼,那么數(shù)據(jù)就將無(wú)法管理。每個(gè)制圖軟件都在國(guó)家相關(guān)的規(guī)范下制定相應(yīng)的模板文件,用以規(guī)范控制各個(gè)地物的編碼、符號(hào)、圖層、顏色、屬性等。故同一地物是否使用同一編碼,是數(shù)據(jù)質(zhì)量檢查中一個(gè)非常重要的環(huán)節(jié)。編碼合法性檢查主要檢查地物是否存在編碼,編碼是否符合“模板”要求,類(lèi)型是否正確等內(nèi)容。
編碼合法性檢查腳本實(shí)例代碼:
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition "SSObj_Code","=","3103013,3101014,3103015"
SSProcess.SelectFilter
geoCount = SSProcess.GetSelGeoCount()
Dim arID(1000),idCount
SSProcess.RemoveCheckRecord "數(shù)據(jù)標(biāo)準(zhǔn)檢查","編碼合法性檢查(過(guò)渡碼)"
If geoCount>0 Then
x=SSProcess.GetSelGeoValue(0,"SSObj_X(0)")
y=SSProcess.GetSelGeoValue(0,"SSObj_Y(0)")
geoID = SSProcess.GetSelGeoValue(0,"SSObj_ID")
SSProcess.AddCheckRecord "數(shù)據(jù)標(biāo)準(zhǔn)檢查","編碼合法性檢查(過(guò)渡碼)","自定義腳本類(lèi)->腳本編程檢查"," 文件存在房屋中心點(diǎn)、地名點(diǎn)、問(wèn)題標(biāo)注點(diǎn)等過(guò)渡要素,有實(shí)體數(shù) "&geoCount&" 個(gè),請(qǐng)使用腳本進(jìn)行批量刪除。",x,y,0,0,geoID,0
End If
End Sub
3.2 房屋構(gòu)面檢查
現(xiàn)如今,測(cè)量工作不僅只是外業(yè)測(cè)量和內(nèi)業(yè)成圖,圖庫(kù)一體化生產(chǎn)是現(xiàn)今測(cè)繪行業(yè)的基本趨勢(shì)。在外業(yè)數(shù)據(jù)采集完成后,按照空間數(shù)據(jù)建庫(kù)標(biāo)準(zhǔn)要求,要對(duì)數(shù)據(jù)進(jìn)行構(gòu)面、屬性錄入、建立拓?fù)潢P(guān)系等工序,為數(shù)據(jù)建庫(kù)做準(zhǔn)備。外業(yè)數(shù)據(jù)采集階段,地物空間特征表達(dá)多為多邊形,為方便后期數(shù)據(jù)建庫(kù)和要素屬性錄入,需要對(duì)要素進(jìn)行構(gòu)面。由于作業(yè)人員在數(shù)據(jù)采集的過(guò)程中會(huì)出現(xiàn)不規(guī)范操作或者操作錯(cuò)誤的情況,如房屋未封閉、存在懸掛線、實(shí)體沒(méi)有屬性或者屬性錯(cuò)誤等,這些問(wèn)題對(duì)數(shù)字地形圖的要素構(gòu)面、GIS數(shù)據(jù)建庫(kù)的影響較大。因此,在數(shù)據(jù)建庫(kù)之前,必須避免和消除這些問(wèn)題。
房屋構(gòu)面檢查腳本實(shí)例代碼:
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition "SSObj_Type","=","LINE"
SSProcess.SetSelectCondition "SSObj_Code","=","3103013,3101014,3103015,"
SSProcess.SelectFilter
geoCount = SSProcess.GetSelGeoCount()
Dim arID(1000),idCount
SSProcess.RemoveCheckRecord "空間關(guān)系檢查","房屋構(gòu)面檢查"
For i=0 To geoCount-1
innerObjID = SSProcess.GetSelGeoValue(i,"SSObj_ID")
pointcount = SSProcess.GetSelGeoValue(i,"SSObj_PointCount")
for j = 0 to pointcount-1
x=SSProcess.GetSelGeoValue(i,"SSObj_X("&j&")")
y=SSProcess.GetSelGeoValue(i,"SSObj_Y("&j&")")
ids = SSProcess.SearchNearObjIDs(x,y,0.1,2,"3103013,3101014,3103015",0)
If ids = "" Then
SSProcess.AddCheckRecord "空間關(guān)系檢查","房屋構(gòu)面檢查","自定義腳本檢查類(lèi)->腳本編程檢查","ID "&innerObjID&" 的房屋建基線構(gòu)成的房屋未構(gòu)面。",x,y,0,2,innerObjID,""
End If
Next
End Sub
從上述兩個(gè)腳本實(shí)例中不難發(fā)現(xiàn),兩個(gè)腳本都使用了4個(gè)固定的函數(shù):ClearSelection函數(shù),ClearSelectCondition函數(shù),SetSelectCondition函數(shù)和SelectFilter函數(shù)。
1)ClearSelection是清空選擇集的函數(shù),在進(jìn)行一個(gè)新的操作命令時(shí),必須先清空之前選擇集中已選中的地物,清空以后再按腳本設(shè)置的條件選擇,如果沒(méi)有執(zhí)行選擇集清空,以前選擇的和接下來(lái)選擇的都將被處理,將導(dǎo)致腳本的錯(cuò)誤執(zhí)行。
2)ClearSelectCondition是清空選擇條件的函數(shù),如果腳本中有多個(gè)選擇集執(zhí)行語(yǔ)句,每個(gè)都獨(dú)立存在,那么每個(gè)選擇條件也是獨(dú)立的,所以在任何的腳本中都必須加上此函數(shù),如果漏寫(xiě)此函數(shù),選擇過(guò)濾的條件就會(huì)不準(zhǔn)確,將得不到該腳本設(shè)計(jì)想要的地物。
3)SetSelectCondition是選擇過(guò)濾條件的函數(shù),在編寫(xiě)腳本過(guò)程中,如果需要設(shè)置多個(gè)條件,則每個(gè)條件單獨(dú)列一行,條件為“AND”型。
4)SelectFilter是執(zhí)行語(yǔ)句的函數(shù),按照以上設(shè)置的條件對(duì)數(shù)據(jù)進(jìn)行選擇過(guò)濾,將結(jié)果放到腳本選擇集中。如在某些時(shí)候執(zhí)行選擇過(guò)濾腳本卻發(fā)現(xiàn)數(shù)據(jù)沒(méi)有任何反應(yīng),就可以查看一下是否漏寫(xiě)SelectFilter函數(shù)。
通過(guò)腳本實(shí)例可以看出VBScript語(yǔ)言簡(jiǎn)單靈活、易學(xué)易用。非常適合初級(jí)用戶(hù)在EPS平臺(tái)上進(jìn)行的二次開(kāi)發(fā)。掌握VBScript腳本語(yǔ)言的編寫(xiě)應(yīng)用,熟知在腳本編寫(xiě)過(guò)程中每個(gè)函數(shù)的用法,哪種函數(shù)可以實(shí)現(xiàn)何種目的,就可以幫助使用人員在作業(yè)過(guò)程中更加高效地進(jìn)行數(shù)據(jù)整理、數(shù)據(jù)質(zhì)量檢查、數(shù)據(jù)更新和入庫(kù)等工作,從而提高工作效率,增強(qiáng)項(xiàng)目管理,提升項(xiàng)目質(zhì)量,降低勞動(dòng)成本。在筆者參與的南海區(qū)、高明區(qū)基礎(chǔ)地理信息數(shù)據(jù)縮編、順德區(qū)、花都區(qū)1∶500地形圖修補(bǔ)測(cè)項(xiàng)目中充分引用了VBScript腳本二次開(kāi)發(fā)技術(shù),編寫(xiě)針對(duì)地形圖檢查的腳本多達(dá)40個(gè),幫助檢查人員快速對(duì)數(shù)據(jù)進(jìn)行人機(jī)交互檢查,大大節(jié)省了檢查時(shí)間。而檢查結(jié)果統(tǒng)一放置在數(shù)據(jù)監(jiān)理窗口中,對(duì)于每一個(gè)錯(cuò)誤都可以實(shí)時(shí)定位,方便作業(yè)人員進(jìn)行修改,從而杜絕錯(cuò)改、漏改情況,保證數(shù)據(jù)質(zhì)量。
[1] 平紅星,王禮,祁孟可.數(shù)字地形圖的檢查內(nèi)容及方法[J].科技傳播,2012(10):194-195.
[2] 王棋,王帥,趙海洋.基于EPS中的VBScript二次開(kāi)發(fā)在地籍處理中的應(yīng)用[J].測(cè)繪與空間地理信息,2011,34(6):191-193.
[3] 付海波,王磊. 基于EPS腳本語(yǔ)言VBScript的二次開(kāi)發(fā)研究[J].大眾科技,2010(7):20-21.
[4] 朱秀杰,徐淼華,聞彩煥,等. EPS2008二次開(kāi)發(fā)在城鎮(zhèn)地籍?dāng)?shù)據(jù)庫(kù)建設(shè)中的應(yīng)用[J].地礦測(cè)繪,2015,31(4):41-42.
[5] 徐中華,劉萬(wàn)華,余成江.清華山維一體化軟件EPS腳本語(yǔ)言的應(yīng)用[J].城市勘測(cè),2007(6):88-90.
[6] 彭永峰.用VBScript腳本實(shí)現(xiàn)在清華山維EPS 2008軟件中陽(yáng)臺(tái)的繪制[J].測(cè)繪與空間地理信息,2012(S1):108-110.
Several Application of Secondary Development for EPS Scriptsin Digital Topographic Map Inspection
LIN Jian-mei,HE Bao-jun
(GuangdongInstituteofSurveyingandMappingofGeology,GuangzhouGuangdong510800,China)
By introducing the characteristics of EPS script language,and according to the actual needs of the preparation of topographic map inspection script file,this paper introduced in detail both script instances of“Coding validity check” and “Building surface inspection”.Practices have proved that we can realize the semi-automatic inspection of digital topographic map,and improve the work efficiency by using these script files.
EPS Scripts;data inspection;human-computer interaction;VBScript secondary development
2017-03-20
P 208; P284
B
1007-9394(2017)02-0042-03
林建美(1985~),女,福建漳州人,學(xué)士,工程師,現(xiàn)主要從事測(cè)繪工程應(yīng)用研究方面的工作。