張忠斌,郭玉冰
(吉林省地礦測(cè)繪院,吉林 長(zhǎng)春 130062)
基于Visual Basic的大比例尺地形圖數(shù)據(jù)接邊檢查程序的實(shí)現(xiàn)*
張忠斌,郭玉冰
(吉林省地礦測(cè)繪院,吉林 長(zhǎng)春 130062)
在大比例尺地形圖的編繪過程中,數(shù)據(jù)的接邊檢查是測(cè)繪生產(chǎn)過程中的重要工序之一,為了減少地形圖接邊的錯(cuò)誤率和提高接邊效率,文章對(duì)大比例尺地形圖接邊檢查程序進(jìn)行了研究,主要采用Visual Basic語(yǔ)言編程實(shí)現(xiàn)了大比例尺地形圖接邊的檢查。程序基本流程為數(shù)據(jù)拼圖、生成內(nèi)圖廓、接邊檢查、錯(cuò)誤信息標(biāo)記、人機(jī)互動(dòng)改正過程,并詳細(xì)介紹了編程的關(guān)鍵技術(shù)。
Visual Basic;大比例尺地形圖;接邊檢查程序;內(nèi)圖廓線
目前,AutoCAD平臺(tái)已被廣泛地運(yùn)用到大比例尺地形圖的生產(chǎn)過程中,同時(shí)也出現(xiàn)了許多基于AutoCAD開發(fā)的大比例尺地形圖生產(chǎn)軟件。但由于各地?cái)?shù)據(jù)結(jié)構(gòu)的不同,各種繪圖軟件的接邊檢查功能都不太完善。為了減輕接邊檢查的工作量和提高接邊的精度,本文利用Visual Basic語(yǔ)言編寫了大比例尺地形圖數(shù)據(jù)的接邊檢查程序,利用該程序?qū)崿F(xiàn)了相鄰地形圖間的圖形接邊檢查與屬性接邊檢查,并標(biāo)記錯(cuò)誤信息,準(zhǔn)確定位接邊錯(cuò)誤和方便查找錯(cuò)誤類型,大大提高了接邊檢查的工作效率。
在大比例尺地形圖中,圖形數(shù)據(jù)包括點(diǎn)、線、面3種要素,而在數(shù)據(jù)接邊過程中點(diǎn)要素不存在接邊問題,只有線、面需要接邊,在AutoCAD平臺(tái)下的數(shù)據(jù)結(jié)構(gòu)中,面是由閉合的線構(gòu)成的,所以數(shù)據(jù)接邊問題就是線要素接邊的問題。
程序設(shè)計(jì)的基本思路為:將接邊圖幅拼圖,計(jì)算生成內(nèi)圖廓,線格式轉(zhuǎn)換,制定接邊原則,尺度和屬性,從全區(qū)最西北端開始,先進(jìn)行“西側(cè)邊接邊”處理,再進(jìn)行“北側(cè)邊接邊”處理,一直到全區(qū)最東側(cè),南移一行,重復(fù)上面的操作,保存并標(biāo)記錯(cuò)誤信息。接邊的原理為以內(nèi)圖廓線為主軸建立緩沖區(qū),分別在緩沖區(qū)內(nèi)建立兩個(gè)選擇集A和選擇集B,在選擇集A中與內(nèi)圖廓線最近的端點(diǎn),在選擇集B中找到符合接邊條件的線(幾何圖形和屬性一致),進(jìn)行拼接處理,沒有拼接處理的線,做好錯(cuò)誤標(biāo)記。
本接邊檢查程序采用計(jì)算機(jī)自動(dòng)查找接邊錯(cuò)誤與人工改正相結(jié)合的方式。具體流程,如圖1所示。
圖1 接邊檢查程序流程圖
Fig.1 Flow of edge matching program
2.1 拼圖
將所要檢查的地圖存放在同一個(gè)文件夾下(一般小于100幅),通過拼圖模塊查找路徑數(shù)據(jù)文件選中并插入到當(dāng)前作業(yè)環(huán)境中。
2.2 內(nèi)圖廓生成
通過插入的圖幅圖廓信息,生成內(nèi)圖廓網(wǎng)格文件(類型為直線),也可以通過地形圖分幅的算法,自動(dòng)生成內(nèi)圖廓網(wǎng)格文件。
2.3 接邊檢查
2.3.1 線格式轉(zhuǎn)換
AutoCAD平臺(tái)上地形圖表示線的實(shí)體類型主要包含直線、二維多段、線多段線和弧段4種,不同的類型實(shí)體具有不同的屬性表示方法,為了有效對(duì)數(shù)據(jù)進(jìn)行拼接處理,必須先進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,通過制圖軟件平臺(tái)的轉(zhuǎn)換方法[2],將二維多段線、直線和弧線都轉(zhuǎn)換為多段線。
2.3.2 數(shù)據(jù)拼接
線的拼接需要滿足以下條件:
1)線的端點(diǎn)到內(nèi)圖廓線的距離在限差范圍內(nèi);
2)接邊邊界線上同一點(diǎn)位可以找到相同編碼的線;
3)兩條線的屬性完全一致;
2.3.3 接邊檢查
實(shí)體數(shù)據(jù)拼接后,在內(nèi)圖廓直線上判斷是否存在線的端點(diǎn),如果有則做出錯(cuò)誤標(biāo)記。
2.4 錯(cuò)誤信息標(biāo)記
在接邊有問題的地方用圓圈標(biāo)記出來(lái),并附有相應(yīng)的錯(cuò)誤屬性,作業(yè)員根據(jù)標(biāo)記可以得到接邊的錯(cuò)誤信息,例如幾何接邊錯(cuò)誤、屬性接邊錯(cuò)誤及不合理接邊等,用人機(jī)交互的方式完成最后的接邊工作[3]。
3.1 內(nèi)圖廓處理
地形圖是按照內(nèi)圖廓來(lái)接邊的,由于直線的圖形特征具有簡(jiǎn)單性和方向性,程序利用直線作為內(nèi)圖廓分界線具有以下優(yōu)點(diǎn)[4]:
1)減少了檢查的冗余度,提高了地物匹配效率;
2)避免了地物多次檢查與匹配。
3.2 接邊點(diǎn)匹配
首先創(chuàng)建選擇集,選擇出需要檢查的邊線并判斷端點(diǎn)是否在內(nèi)圖廓線上,如果端點(diǎn)在內(nèi)圖廓線上,創(chuàng)建數(shù)組選擇集并對(duì)數(shù)組的記錄逐條進(jìn)行分析處理,可以得到對(duì)應(yīng)的屬性信息和坐標(biāo)信息,最后對(duì)成對(duì)的數(shù)組進(jìn)行屬性比較,如果屬性信息一致并且兩實(shí)體首尾相連則接邊通過[5]。
對(duì)數(shù)組進(jìn)行分析處理代碼為:
list2 = ConvertList(List1,Dec)
num = UBound(list2,2)
For j = 0 Tonum
If X = 0 Then
pt(0)= list2(0,j)
pt(1)= Y
pt(2)= 0
ElseIf Y = 0 Then
pt(0)= X
pt(1)= list2(0,j)
pt(2)= 0
End If
Pnt = pt
If list2(1,j)= 1 Then
Set CircleSign = hsk.CircleSign(Pnt,R)
Else
Dim Handles As Variant
Handles = Split(list2(2,j),",")
If((UBound(Handles)+ 1)Mod 2)= 1 Then
Set CircleSign = hsk.CircleSign(Pnt,R)
Else
' 成對(duì)的需要做屬性比較
Dim ReBoolAs Boolean
ReBool = CompPrar(Handles,Dec)
If ReBool Then
Set CircleSign = hsk.CircleSign(Pnt,R)
End If
End If
End If
3.3 拼接后刪除多余節(jié)點(diǎn)
在集合A和集合B中,如果a、b為同一地物則進(jìn)行線拼接,拼接后會(huì)有一個(gè)節(jié)點(diǎn)c:如果節(jié)點(diǎn)c在a地物與c相鄰的節(jié)點(diǎn)和b地物與c相鄰的節(jié)點(diǎn)連線上,則節(jié)點(diǎn)c為多余節(jié)點(diǎn),刪除處理;如果節(jié)點(diǎn)c不在連線上,則做好“不合理接邊”標(biāo)記,并根據(jù)實(shí)際接邊情況判斷是否合理。
判斷是否為有效點(diǎn)(判斷點(diǎn)是否在線段AB上)代碼為:
Public Function PntOnAB(ByValPnt As Variant,ByVal A As Variant,ByVal B As Variant,ByValDist As Double)As Boolean
If A(0)= B(0) Then
If Abs(Pnt(0)- A(0)) If A(1)> B(1)And A(1)>Pnt(1)And Pnt(1)> B(1) Then PntOnAB = True GoTo Finish ElseIf A(1)< B(1)And A(1) PntOnAB = True GoTo Finish End If End If ElseIf A(1)= B(1) Then If Abs(Pnt(1)- A(1)) If A(0)> B(0)And A(0)>Pnt(0)And Pnt(0)> B(0) Then PntOnAB = True GoTo Finish ElseIf A(0)< B(0)And A(0) PntOnAB = True GoTo Finish End If End If End If 在實(shí)際應(yīng)用過程中,以相鄰的32幅1∶500比例尺地形圖(已經(jīng)進(jìn)行接邊)為例,共有48條內(nèi)圖廓邊需要檢查,如果每條邊上有地物50個(gè),則共需要檢查2 400次。依靠人工進(jìn)行接邊檢查(位置和屬性)用時(shí)約6.5 h,共檢查出問題26處;使用該接邊程序檢查共用時(shí)15 min,檢查出問題32處。由此可以看出,接邊檢查程序在接邊檢查的正確率和接邊效率上優(yōu)勢(shì)都比較明顯。接邊程序界面,如圖2所示。 圖2 接邊程序界面Fig.2 Interface of edge matching program 該接邊檢查程序已經(jīng)應(yīng)用到大比例尺地形圖接邊檢查過程中。實(shí)踐證明,該程序使用方便、能快速檢查出接邊問題,并能直接反映出接邊問題的所在,減輕了接邊工作量,提高了生產(chǎn)效率,但由于數(shù)據(jù)加載問題,拼圖數(shù)量太多會(huì)造成卡機(jī)現(xiàn)象。根據(jù)經(jīng)驗(yàn),在實(shí)際生產(chǎn)中1∶500地形圖的拼圖數(shù)量一般應(yīng)小于100幅。 [1] 中華人民共和國(guó)國(guó)家質(zhì)量監(jiān)督檢驗(yàn)檢疫總局,中國(guó)國(guó)家標(biāo)準(zhǔn)化管理委員會(huì).GB/T 20257.1—2007國(guó)家基本比例尺地圖圖式第1部分:1∶500 1∶1 000 1∶2 000地形圖圖式[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2007. [2] 曹健,李國(guó)忠,徐效波,等.基于ArcGIS Engine的多幅數(shù)字地形圖接邊算法研究[J].測(cè)繪與空間地理信息,2010,33(2):85-87. [3] 霍春玲,劉達(dá).AutoCAD數(shù)據(jù)接邊檢查自動(dòng)化的實(shí)現(xiàn)[J].測(cè)繪工程,2006(4):74-76. [4] 費(fèi)小睿,陳玉娜.大比例尺地形圖自動(dòng)接邊檢查的實(shí)現(xiàn)[J].城市勘測(cè),2015(1):60-62. [5] 劉允,劉陽(yáng),楊釗.大比例尺地形圖數(shù)據(jù)接邊程序設(shè)計(jì)與實(shí)現(xiàn)[J].城市勘測(cè),2012(1):65-67. Realization of Edge Matching Program of Large-scale Topographic MapBased on Visual Basic ZHANG Zhong-bin,GUO Yu-bin (JilinInstituteofSurveyingandMappingofGeologyandMineralResources,ChangchunJilin130062,China) In large-scale topographic map compilation process,the edge matching of data is one of the important links in surveying and mapping production.How to reduce the workload and improve work efficiency is the direction of this study.The paper mainly uses Visual Basic programing to realize the edge matching of large-scale topographic map.The basic flow of the program is data puzzle,generateing grids,edge matching,error message annotation,and finally finishing the work by man-machine interactive ways.The article also details the key technology of programming. Visual Basic;large-scale topographic map;edge matching program;inner contour line 2017-02-21 P 208; P 284 B 1007-9394(2017)02-0031-02 張忠斌(1984~),男,吉林樺甸人,碩士,工程師,現(xiàn)主要從事工程測(cè)量和地理信息系統(tǒng)應(yīng)用方面的工作。4 應(yīng)用
5 結(jié)束語(yǔ)