黃臻 蔡小青 姜春旭
摘要:CorelDRAW軟件因其強(qiáng)大的平面美化功能在專(zhuān)題地圖制圖領(lǐng)域應(yīng)用廣泛,但作為一款矢量繪圖軟件,CorelDRAW并不具備專(zhuān)業(yè)的地圖質(zhì)檢功能。因此,本文提出利用VBA語(yǔ)言對(duì)CorelDRAW進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)圖面壓蓋、道路懸掛、道路連接等問(wèn)題自動(dòng)化檢查功能。實(shí)踐表明,該方法能快速、準(zhǔn)確地發(fā)現(xiàn)問(wèn)題,節(jié)約了人工檢查時(shí)間,提高了地圖質(zhì)檢效率。
關(guān)鍵詞:CorelDRAW;VBA;地圖質(zhì)檢;圖面壓蓋;道路懸掛;道路連接
0 引言
地圖的表達(dá)錯(cuò)誤直接影響地圖的正確使用,信息的錯(cuò)誤傳遞也會(huì)造成讀圖的不適和誤解。一幅完整地圖產(chǎn)品的呈現(xiàn),還需要通過(guò)一系列嚴(yán)密的質(zhì)量檢查環(huán)節(jié)。傳統(tǒng)的地圖數(shù)據(jù)質(zhì)檢通常由人工進(jìn)行逐屏檢查,檢查速度和質(zhì)量完全依賴(lài)檢查人員,檢查結(jié)果往往不全面,還會(huì)有遺漏。
在專(zhuān)題地圖編繪領(lǐng)域,具備極強(qiáng)平面編輯和美化功能的CorelDRAW軟件頗受制圖工作者的喜愛(ài)。雖然它在成圖制圖方面能很好滿足需求,但在地圖質(zhì)檢方面,還很難找到適用的工具去輔助檢查工作。CorelDRAW從10.0版本以后開(kāi)始支持VBA二次開(kāi)發(fā)[1],逐步實(shí)現(xiàn)了符號(hào)替換[2]、河流漸變[1]、中英文注記對(duì)照[3]等繁復(fù)操作的自動(dòng)化處理。
目前,國(guó)內(nèi)相關(guān)學(xué)者針對(duì)CorelDRAW地圖制圖數(shù)據(jù)質(zhì)檢方面的研究還比較少,主要集中在制圖方案的標(biāo)準(zhǔn)化檢查[4],如圖層分層的規(guī)范檢查、符號(hào)和注記正確表示檢查、符號(hào)和圖層一致性檢查等,對(duì)于在圖面壓蓋、道路懸掛、道路連接問(wèn)題方面的檢查并沒(méi)有給出很好的解決方案。
因此,本文提出了利用VBA語(yǔ)言二次開(kāi)發(fā)擴(kuò)展CorelDRAW軟件的地圖數(shù)據(jù)質(zhì)檢功能的一個(gè)解決方式,實(shí)現(xiàn)圖面壓蓋、道路懸掛、道路連接等問(wèn)題的自動(dòng)化檢查,從而提升檢查質(zhì)量和效率。
1研究目標(biāo)
本文從CorelDRAW地圖數(shù)據(jù)質(zhì)檢的一般流程出發(fā),以減少人工檢查工作量和提高檢查準(zhǔn)確性為目的,總結(jié)知識(shí)經(jīng)驗(yàn),將檢查規(guī)則轉(zhuǎn)化為算法思路,基于CorelDRAW VBA平臺(tái),通過(guò)二次開(kāi)發(fā)檢查輔助模塊,實(shí)現(xiàn)對(duì)CorelDRAW地圖數(shù)據(jù)在圖面壓蓋、道路懸掛、道路連接方面問(wèn)題的自動(dòng)化檢測(cè)和提取,旨在快速、準(zhǔn)確地發(fā)現(xiàn)和定位圖面問(wèn)題,輔助質(zhì)檢人員精準(zhǔn)掌握問(wèn)題底數(shù),彌補(bǔ)CorelDRAW軟件在地圖質(zhì)檢功能方面的缺失。
2功能設(shè)計(jì)
地圖數(shù)據(jù)質(zhì)檢模塊是在現(xiàn)有成熟地圖質(zhì)量體系的基礎(chǔ)上,按照一般地圖的質(zhì)檢邏輯和流程進(jìn)行設(shè)計(jì),開(kāi)發(fā)能夠在CorelDRAW軟件中進(jìn)行交互執(zhí)行的自動(dòng)化檢查程序,擴(kuò)展軟件的地圖質(zhì)檢功能,實(shí)現(xiàn)圖面壓蓋、道路懸掛檢測(cè)和道路連接的機(jī)助檢查和問(wèn)題上報(bào)。
3實(shí)現(xiàn)方法
3.1圖面壓蓋檢查模塊
該模塊包括圖層內(nèi)部和圖層之間的圖形壓蓋檢查。根據(jù)指定的待檢圖層,分別對(duì)圖層內(nèi)部和圖層之間的所有圖形和注記要素進(jìn)行相交運(yùn)算,通過(guò)判斷相交關(guān)系來(lái)確定圖面要素之間是否存在壓蓋沖突。若存在相交關(guān)系,則讀取交集區(qū)域的四至坐標(biāo)構(gòu)建矩形框,作為壓蓋問(wèn)題返回視圖進(jìn)行顯示。為了提高檢查效率,縮小檢測(cè)范圍,通過(guò)調(diào)用CorelDRAW的空間搜索函數(shù)Page.SelectShapeFromRectangle(s.Left,s.TopY,s.RightX,s.BottomY,True),對(duì)所有待檢圖形和注記建立外接矩形范圍,只在該范圍內(nèi)進(jìn)行空間相交運(yùn)算。
3.2道路懸掛檢查模塊
懸掛點(diǎn)是指線段的端點(diǎn)懸空,沒(méi)有和其他線段相連的點(diǎn)。由于懸掛節(jié)點(diǎn)位置不同,主要體現(xiàn)有多邊形不封閉、不及或過(guò)頭、節(jié)點(diǎn)不重合(不接頭)等幾種情況。無(wú)論是過(guò)頭還是不及都有一個(gè)共同的特征,也就是懸掛點(diǎn)處只有一條線連接。因此,懸掛點(diǎn)的檢查可通過(guò)計(jì)算線段的首尾端點(diǎn)在容差范圍內(nèi)是否存在其他線段來(lái)實(shí)現(xiàn),若不存在,則判定為懸掛點(diǎn)。
CorelDRAW地圖數(shù)據(jù)與GIS數(shù)據(jù)不同,其坐標(biāo)為圖面坐標(biāo)而非真實(shí)的空間坐標(biāo),因此,容差的選取應(yīng)在圖面坐標(biāo)系統(tǒng)下考慮,具體參數(shù)值需根據(jù)實(shí)際地圖精度要求來(lái)確定。
整個(gè)算法思路是,首先遍歷道路檢查層內(nèi)的所有弧段線,獲取弧段首尾端點(diǎn)X、Y坐標(biāo)值。分別以弧段的首尾端點(diǎn)作為圓心,根據(jù)給定的容差半徑定義容差圓范圍。然后依次在每個(gè)容差圓范圍內(nèi),通過(guò)IsOnShape(Double x,Double y,Double HotArea)函數(shù)查找并計(jì)算與容差圓相交的所有弧段的數(shù)量N。若N = 1,則判定構(gòu)建該容差圓的端點(diǎn)為懸掛點(diǎn),若N ≧ 2,則該端點(diǎn)不懸掛。最后以判定后的懸掛點(diǎn)作為圓心,繪制懸掛標(biāo)示圓并通過(guò)視圖顯示,供人工判讀檢查結(jié)果。
3.3道路連接檢查模塊
等級(jí)道路在地圖中表示時(shí),其符號(hào)的上下疊置關(guān)系是根據(jù)道路本身的等級(jí)次序所決定的,一般道路的等級(jí)越高,對(duì)應(yīng)符號(hào)的疊放次序越靠上。對(duì)于雙線繪制的道路符號(hào),其符號(hào)一般由道路中心線和道路邊線組成,為了正確表達(dá)道路交叉口的匯交情況,雙線的等級(jí)道路符號(hào)在疊放次序上將中心線和邊線分開(kāi),中心線按道路等級(jí)次序排放后,再往下依次疊放相應(yīng)的道路邊線;對(duì)于單線道路符號(hào),則一般疊放在所有雙線道路邊線的下一層平面,并分別按對(duì)應(yīng)的等級(jí)順序進(jìn)行疊放。根據(jù)上述的表示原則,確定道路連接檢測(cè)算法思路如下。
首先指定一個(gè)道路符號(hào)的正確疊置樣例層,該層是根據(jù)實(shí)際地圖的道路分級(jí)進(jìn)行規(guī)范符號(hào)化和正確次序疊放的一個(gè)參考樣例。然后選取參與檢查的所有道路圖層,按圖層由上至下的排序,依次遍歷所有道路層中的每一個(gè)道路圖形,同參考樣例層逐個(gè)進(jìn)行比對(duì),通過(guò)與樣例層的每一個(gè)道路符號(hào)的輪廓線型、線寬、顏色模式、顏色值進(jìn)行一一匹配,若所有條件都匹配,則返回一個(gè)序號(hào)K,K為匹配成功的樣例層內(nèi)的符號(hào)層疊的順序號(hào),順序號(hào)從1起算,按步長(zhǎng)為1進(jìn)行遞增,即1,2,3,……,n,n為樣例圖層中所有圖形的總數(shù),順序號(hào)越大表示對(duì)應(yīng)的符號(hào)疊放的順序越往后;若與樣例層所有符號(hào)比對(duì)完后都未匹配成功,則表示該道路圖形不符合參考樣例的符號(hào)化要求,即符號(hào)化不正確,則順序號(hào)賦值為0,并將該圖形提交至道路符號(hào)化錯(cuò)誤檢查結(jié)果圖層。最后,針對(duì)順序號(hào)不等于0的道路符號(hào)再依次作兩兩排序檢查,兩兩檢查中發(fā)現(xiàn)上一個(gè)圖形順序號(hào)大于下一個(gè)圖形順序號(hào)的,則判定為道路疊置順序錯(cuò)誤,將上一個(gè)圖形提交至道路連接錯(cuò)誤檢查結(jié)果圖層。
4結(jié)語(yǔ)
地圖數(shù)據(jù)自動(dòng)化質(zhì)檢模塊的初步研究主要針對(duì)CorelDRAW軟件缺乏地圖質(zhì)檢功能的問(wèn)題,通過(guò)VBA語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)了基于CorelDRAW平臺(tái)的地圖制圖數(shù)據(jù)檢查程序,用戶(hù)可以在檢查程序中設(shè)置檢查圖層和容差,由程序讀取待檢圖層內(nèi)的地圖要素進(jìn)行自動(dòng)化檢查分析,并通過(guò)地圖視窗返回圖面壓蓋、道路懸掛和道路連接錯(cuò)誤結(jié)果。經(jīng)測(cè)試,檢查一幅全開(kāi)行政區(qū)劃地圖的時(shí)間由3小時(shí)縮短為10分鐘,極大地提高了檢查效率。
目前,研究過(guò)程中還發(fā)現(xiàn)一些問(wèn)題,通往居民地的斷頭路會(huì)被視為懸掛問(wèn)題返回,實(shí)際在做道路懸掛檢查時(shí),還需要考慮與居民點(diǎn)的連通關(guān)系,道路端點(diǎn)處雖無(wú)其他道路連接但與居民點(diǎn)連通時(shí),可不作為懸掛處理。因此,本文設(shè)計(jì)的質(zhì)檢程序尚不能完全替代人工檢查,對(duì)于一些合理的圖面表達(dá),還需要檢查人員進(jìn)行人工判斷,這也是下一步程序需要進(jìn)行完善的地方。
參考文獻(xiàn):
[1] 吳澤權(quán),陳葵莊,覃濤.基于VSTA的CorelDRAW二次開(kāi)發(fā)在地圖制圖中的應(yīng)用[J].測(cè)繪與空間地理信息,2020,43(10):216-219.
[2] 董洪霞,劉健,王海濤.基于CorelDraw VBA的制圖功能擴(kuò)展模塊研究[J].測(cè)繪與空間地理信息,2017,40(10):188-189+192.
[3] 黃臻.基于CorelDRAW X5平臺(tái)下的中英文注記自動(dòng)匹配的研究[J].經(jīng)緯天地,2017(04):24-27.
[4] 戴相喜,施一軍,陳磊.CorelDRAW地圖制圖數(shù)據(jù)質(zhì)量自動(dòng)化檢查方法研究[J].城市勘測(cè),2016(03):59-62.