劉 洋,郭慶勝,魏智威,柳其志,魏 嘉
(武漢大學(xué) 資源與環(huán)境科學(xué)學(xué)院,湖北 武漢 430079)
CorelDraw線狀地圖符號(hào)庫(kù)的設(shè)計(jì)
劉 洋,郭慶勝,魏智威,柳其志,魏 嘉
(武漢大學(xué) 資源與環(huán)境科學(xué)學(xué)院,湖北 武漢 430079)
在CorelDraw中繪制有些線狀地圖符號(hào)需要使用程序控制,無法直接調(diào)用CorelDraw的線狀符號(hào)繪制功能。文中基于圖元組合的思想,依據(jù)CorelDraw軟件的特點(diǎn),對(duì)常用地圖中的線狀符號(hào)進(jìn)行分類、組織和存儲(chǔ),建立相應(yīng)的線狀地圖符號(hào)庫(kù),設(shè)計(jì)專門的線狀地圖符號(hào)編輯器,實(shí)現(xiàn)對(duì)線狀地圖符號(hào)的統(tǒng)一編輯與管理,并且為不同類型的線狀地圖符號(hào)繪制設(shè)計(jì)相應(yīng)的算法,最后利用CorelDraw提供的VBA二次開發(fā)環(huán)境實(shí)現(xiàn)文中所提出的方法,實(shí)驗(yàn)效果很好,可滿足地圖生產(chǎn)的需要。
符號(hào)庫(kù);圖元;線狀地圖符號(hào);編輯器
地圖上表示各種復(fù)雜的自然和人文現(xiàn)象都是通過地圖語(yǔ)言來實(shí)現(xiàn),通常分為地圖符號(hào)、注記和色彩;相比于其它幾種地圖語(yǔ)言,地圖符號(hào)表達(dá)地圖內(nèi)容形象直觀、一目了然,因而對(duì)于符號(hào)的研究和設(shè)計(jì)是地圖學(xué)的基本問題之一。由于計(jì)算機(jī)技術(shù)的發(fā)展,很多制圖工作都需要借助計(jì)算機(jī)進(jìn)行完成,因而研究和設(shè)計(jì)的符號(hào)要在計(jì)算機(jī)中進(jìn)行繪制。目前,計(jì)算機(jī)中地圖符號(hào)繪制的主要途徑可以分為兩大類[1]:一是在現(xiàn)有的軟件基礎(chǔ)上利用其所提供的二次開發(fā)環(huán)境進(jìn)行符號(hào)的設(shè)計(jì),如ArcGis,AutoCAD,Coreldraw等軟件均提供了可以供用戶調(diào)用的編程接口,這種方法的優(yōu)點(diǎn)是開發(fā)過程簡(jiǎn)單,并且可以利用系統(tǒng)本身的圖形編輯功能,缺點(diǎn)是符號(hào)繪制受到系統(tǒng)自身功能的限制,且符號(hào)庫(kù)的獨(dú)立性較差;二是利用程序語(yǔ)言開發(fā)獨(dú)立的符號(hào)設(shè)計(jì)平臺(tái),如目前流行的COM技術(shù)等[2],其優(yōu)點(diǎn)是符號(hào)設(shè)計(jì)平臺(tái)獨(dú)立、符號(hào)共享性較好,缺點(diǎn)是許多符號(hào)繪制功能需要從底層進(jìn)行設(shè)計(jì),開發(fā)過程較為復(fù)雜[3]。在地圖符號(hào)繪制的過程中,線狀地圖符號(hào)的繪制需要考慮多種情況,程序設(shè)計(jì)算法復(fù)雜,操作運(yùn)算量大,耗費(fèi)時(shí)間較長(zhǎng),因此,線狀地圖符號(hào)的繪制是地圖符號(hào)繪制過程中的重點(diǎn)問題[4]。對(duì)于線狀地圖符號(hào)的繪制,已有許多學(xué)者進(jìn)行過相關(guān)的研究,目前繪制線狀地圖符號(hào)的主要算法有:縱向疊加法,即將線符號(hào)分成幾層,然后每層單獨(dú)繪制;橫向循環(huán)配置法,將重復(fù)出現(xiàn)的基本圖元沿定位線進(jìn)行循環(huán)配置;程序塊法,即為每種不同的符號(hào)編寫單獨(dú)的繪制函數(shù)[3],這幾種算法均有其不足之處,如縱向疊加法難以繪制一些不易分解為不同層的符號(hào)(如河流等),橫向循環(huán)配置法在拐角處存在符號(hào)變形且效率較低,程序塊法使程序過于復(fù)雜臃腫且不利于符號(hào)的擴(kuò)充;因此,在一般的線狀地圖符號(hào)的繪制過程中,往往將這幾種方法結(jié)合起來使用。
本文基于圖元組合的思想,利用CorelDraw所提供的VBA二次開發(fā)環(huán)境,對(duì)地圖中常用的線狀符號(hào)進(jìn)行分類、組織、存儲(chǔ),建立相應(yīng)的線狀地圖符號(hào)庫(kù),并且采用圖元組合及程序塊的方式為不同類型的線符號(hào)設(shè)計(jì)相應(yīng)的繪制算法,設(shè)計(jì)專門的線狀符號(hào)編輯器,對(duì)各類線符號(hào)進(jìn)行統(tǒng)一編輯與管理,供制圖人員進(jìn)行編輯和調(diào)用。
雖然Coreldraw是一款出色的圖形設(shè)計(jì)軟件,但它并不是一款專業(yè)的地圖制圖軟件,在繪制地圖符號(hào)時(shí)存在一定的局限性:例如對(duì)于線符號(hào)來說,Coreldraw雖然提供了一定數(shù)量的內(nèi)置線型,但對(duì)一些較為復(fù)雜的線符號(hào),不能從系統(tǒng)中直接調(diào)用,例如對(duì)防洪堤的繪制,需要逐個(gè)節(jié)點(diǎn)的添加短線并通過手動(dòng)旋轉(zhuǎn)的方式使其與基線垂直,如圖1所示的防洪堤符號(hào),這樣就使得這類符號(hào)的繪制過程十分繁瑣,增加制圖人員的工作量。另外,在繪制在建高速公路時(shí),常常需要將兩條或更多的寬度不等的虛線疊加在一起,這時(shí)由于Coreldraw系統(tǒng)自身的規(guī)定,疊加的虛線中虛線部分的長(zhǎng)度必須是虛線自身寬度的整數(shù)倍,如果對(duì)于不同寬度的虛線設(shè)置相同的線樣式,就會(huì)使不同的虛線之間產(chǎn)生壓蓋,導(dǎo)致繪制錯(cuò)誤。如圖2所示的在建高速公路符號(hào)繪制時(shí)出錯(cuò)。
圖1 防洪堤符號(hào)
圖2 高速公路符號(hào)
針對(duì)前面所提到的問題,一些學(xué)者提出相應(yīng)的解決方法[7-9],但是往往只是針對(duì)某幾個(gè)特殊的符號(hào),沒有對(duì)符號(hào)進(jìn)行較為系統(tǒng)的分類,并且沒有形成一個(gè)能夠統(tǒng)一對(duì)線符號(hào)進(jìn)行編輯與調(diào)用的平臺(tái)。
2.1 圖元分類
關(guān)于地圖符號(hào)的繪制,有很多學(xué)者采用基于圖元的方式進(jìn)行[1-6,10-12]。圖元法將地圖符號(hào)看做一定數(shù)量的組成單元(圖元)的集合,通過定義不同的圖元類型,改變圖元自身的參數(shù)及圖元間的組合方式得到不同類型的地圖符號(hào)。
依據(jù)圖元的幾何特征可以將圖元分為點(diǎn)圖元、線圖元和面圖元三類[6]。點(diǎn)狀圖元的分類比較簡(jiǎn)單,一般依據(jù)其幾何特征可以分為:點(diǎn)、折線、圓、圓弧、多邊形等幾種類型的基本圖元類型。線狀符號(hào)的基本圖元已有學(xué)者做了大量的研究,如程朋根等[6]針對(duì)地形圖圖式線狀符號(hào),設(shè)計(jì)出組成線狀符號(hào)的基本圖元有:實(shí)線、虛線、點(diǎn)虛線、雙虛線、雙實(shí)線、連續(xù)點(diǎn)符號(hào)、定位點(diǎn)符號(hào)、導(dǎo)線連線、導(dǎo)線點(diǎn)符號(hào)、齒線狀符號(hào)、漸變寬實(shí)線、漸變寬虛線、帶狀暈線等共13種圖元。
由于一般的圖元分類比較復(fù)雜,本文依據(jù)Coreldraw的自身特點(diǎn)將圖元分為3種:長(zhǎng)線圖元、短線圖元、點(diǎn)狀圖元。
2.2 Coreldraw線狀地圖符號(hào)的分類
在Coreldraw環(huán)境下圖元分類的基礎(chǔ)上,需要對(duì)Coreldraw中的線狀地圖符號(hào)進(jìn)行分類,這里的線狀符號(hào)主要是指那些不能直接從Coreldraw系統(tǒng)中調(diào)用出來的符號(hào),依據(jù)其圖元構(gòu)成的不同可以分為以下四類:
1)第一種線符號(hào):由一種或幾種長(zhǎng)線圖元疊加組成,如高速公路等。
2)第二種線符號(hào):由一條或幾條長(zhǎng)線圖元上按一定規(guī)則排列的短線圖元得到,如防洪堤等。
3)第三種線符號(hào):由在長(zhǎng)線圖元上按一定規(guī)則排列的點(diǎn)狀圖元構(gòu)成,如溝渠符號(hào)。
4)其他線符號(hào):主要指那些不能夠通過圖元組合的方式得到的符號(hào),包括河流、橋梁、長(zhǎng)城等特殊符號(hào)。
各類典型符號(hào)及其構(gòu)成方式如表1所示。
2.3 Coreldraw線狀地圖符號(hào)庫(kù)的構(gòu)建
對(duì)于抽象出的各類線狀地圖符號(hào)需要進(jìn)行組織和存儲(chǔ)。本文采用面向?qū)ο蟮乃枷雽?duì)線狀地圖符號(hào)進(jìn)行組織[6],將一個(gè)線符號(hào)看做是一個(gè)對(duì)象,這個(gè)對(duì)象是由一個(gè)記錄這個(gè)線符號(hào)基本信息的抽象對(duì)象(LineSymbol對(duì)象)和多個(gè)相同或不同類型的圖元對(duì)象組成而得到的復(fù)雜對(duì)象,每一個(gè)對(duì)象都有其相應(yīng)的屬性和方法,其中,抽象的LineSymbol對(duì)象的屬性包括線符號(hào)的ID、線符號(hào)類型、組成圖元等基本信息,而每一個(gè)圖元對(duì)象的屬性則包括ID和在符號(hào)化的過程中所需用到的所有屬性。
線狀地圖符號(hào)采用ACCESS表的形式進(jìn)行存儲(chǔ),分為一張母表和多張從表,其中,母表用來存儲(chǔ)LineSymbol對(duì)象的屬性,母表的結(jié)構(gòu)如表2所示。
表2 母表的結(jié)構(gòu)
每一種類型的圖元分別對(duì)應(yīng)一張從表,每張從表的每個(gè)字段分別用來存儲(chǔ)圖元的編號(hào)和屬性,對(duì)于像橋梁、長(zhǎng)城這類符號(hào),不能通過前幾種圖元組合得到,這時(shí)采用程序塊進(jìn)行繪制,存儲(chǔ)其在繪制過程中的所有必要參數(shù)。各類不同類型的圖元及其屬性如表3所示。各類程序符號(hào)及其控制參數(shù)如表4所示。
表3 不同類型的圖元及其屬性
通過以上對(duì)Coreldraw中常用地圖符號(hào)的組織和存儲(chǔ),即完成對(duì)Coreldraw下地圖符號(hào)庫(kù)的構(gòu)建,符號(hào)庫(kù)中的典型符號(hào)如圖3所示。
表4 各類程序符號(hào)及其控制參數(shù)
圖3 符號(hào)庫(kù)中的典型符號(hào)
在Coreldraw線狀地圖符號(hào)庫(kù)的基礎(chǔ)上,進(jìn)行線狀地圖符號(hào)繪制算法的設(shè)計(jì),算法主要分為兩大類:第一大類主要針對(duì)那些能夠由基本圖元構(gòu)成的線狀地圖符號(hào),如由長(zhǎng)線圖元與短線圖元構(gòu)成的堤壩類符號(hào)、由長(zhǎng)線圖元與點(diǎn)狀圖元構(gòu)成的溝渠類符號(hào)等;第二大類算法則主要針對(duì)那些不能通過基本圖元間的組合得到的特殊線狀地圖符號(hào),如河流、橋梁、長(zhǎng)城等線狀地圖符號(hào)。
對(duì)于第一類算法,其基本思想是對(duì)于要繪制的線符號(hào),首先從數(shù)據(jù)庫(kù)主表中讀取線符號(hào)ID、線符號(hào)類型及其相應(yīng)的組成圖元等信息,然后根據(jù)獲取的線符號(hào)類型及線符號(hào)的組成圖元,讀取每張相應(yīng)的從表中的圖元信息,最后根據(jù)不同的線符號(hào)類型選擇相應(yīng)的符號(hào)化方法即可。以堤壩類符號(hào)的繪制為例,算法的流程如圖4所示。
圖4 堤壩繪制流程
對(duì)于那些不能通過基本圖元間的組合得到的特殊線狀地圖符號(hào),一般采用程序塊的方法進(jìn)行繪制 ,本文對(duì)河流、橋梁、長(zhǎng)城及在建高速公路等符號(hào)均設(shè)計(jì)了專門的符號(hào)化程序,其中,河流的繪制主要包括兩個(gè)部分:對(duì)整個(gè)河流圖層的繪制和對(duì)單條河流的繪制,在對(duì)整個(gè)河流圖層的繪制前要首先對(duì)河流數(shù)據(jù)進(jìn)行預(yù)處理,包括確定河系的主流、判斷河流的方向、劃分河流的等級(jí)及對(duì)河流進(jìn)行編碼,這一部分在ArcGIS中完成,然后將整理好后的河流數(shù)據(jù)導(dǎo)入到Coreldraw中進(jìn)行符號(hào)化;對(duì)單條河流的繪制在Coreldraw中一般采用將曲線在結(jié)點(diǎn)處打斷,然后對(duì)打斷后的每一個(gè)小段逐個(gè)設(shè)定寬度的方式,本文在此基礎(chǔ)上開發(fā)了相應(yīng)的自動(dòng)化程序,實(shí)現(xiàn)了河流的自動(dòng)漸變,并且在漸變的過程中考慮到了漸變是否光滑的問題,設(shè)計(jì)了相應(yīng)的算法,使?jié)u變效果更加美觀;橋梁的繪制則是首先按橋梁長(zhǎng)度生成一條原始曲線,然后將曲線向兩側(cè)偏移1/2個(gè)橋梁寬度并將原始曲線刪除,最后在得到的兩條直線兩端生成四條短線;長(zhǎng)城的繪制則是先將曲線等分并畫垂線,然后連接第一條垂線與第二條垂線的首端點(diǎn)、第三條垂線與第四條垂線的尾端點(diǎn),依次類推,最后刪除原始曲線得到長(zhǎng)城符號(hào);在建高速公路的繪制需獲取設(shè)定的道路寬倍數(shù)和邊線寬倍數(shù),然后計(jì)算兩者的最小公倍數(shù),根據(jù)設(shè)定的樣式和這個(gè)最小公倍數(shù)分別計(jì)算得到邊線、道路、中心線的實(shí)線和虛線的長(zhǎng)度,最后將邊線、道路、中心線疊加就得到在建高速公路?,F(xiàn)以河流符號(hào)的繪制為例,給出算法的流程如圖5、圖6所示。
圖5 單條河流繪制流程
圖6 河流圖層繪制流程
為方便制圖人員的操作,本文設(shè)計(jì)了專門的線狀地圖符號(hào)編輯器,實(shí)現(xiàn)對(duì)各種線型的編輯與管理,編輯器的界面如圖7所示,在界面的左上角可以選擇要符號(hào)化的圖層,左側(cè)的ListView顯示系統(tǒng)提供的所有線符號(hào),中間的ListView則顯示選中的線符號(hào)的組成部分,最右側(cè)的一列則提供對(duì)線符號(hào)的編輯與功能,可以對(duì)選中的線符號(hào)的組成部分進(jìn)行編輯,針對(duì)不同類型的線型提供相應(yīng)的編輯方法,能夠?qū)⒕庉嫷慕Y(jié)果保存到數(shù)據(jù)庫(kù)中,并且能夠選擇某個(gè)線圖層,對(duì)所選圖層進(jìn)行符號(hào)化。線編輯器的詳細(xì)功能如下:
1)選擇要編輯的線符號(hào): 在主界面最左側(cè)預(yù)覽的線符號(hào)中選擇一種要進(jìn)行編輯的線型,然后會(huì)在中間的ListView控件中顯示其組成部分,點(diǎn)擊其中的一個(gè)組成部分,再點(diǎn)擊Advanced Edit進(jìn)行進(jìn)一步的編輯,調(diào)出相應(yīng)的編輯器。
2)對(duì)第一種線符號(hào)進(jìn)行編輯:將調(diào)用Coreldraw中自帶的輪廓筆編輯器,對(duì)線的寬度、顏色、樣式等進(jìn)行編輯,并將結(jié)果返回到臨時(shí)圖層進(jìn)行預(yù)覽。
3)對(duì)第二種線符號(hào)進(jìn)行編輯:調(diào)用自定義的編輯器,對(duì)短線的各種屬性進(jìn)行編輯,其中方向?qū)傩允穷A(yù)先設(shè)定好的不可更改,單元間間隔表示兩個(gè)短線間的間距,偏移是指短線距離下方定位線起點(diǎn)的距離,顏色編輯需要調(diào)用系統(tǒng)的輪廓筆對(duì)短線設(shè)定顏色,編輯好后點(diǎn)擊確定,即可在臨時(shí)圖層中預(yù)覽編輯情況。
4)對(duì)第三種線符號(hào)進(jìn)行編輯:調(diào)用自定義的編輯器,可以編輯點(diǎn)狀圖元的寬度高度和單元間隔,用戶也可以導(dǎo)入更多的已經(jīng)設(shè)計(jì)好的符號(hào)。
5)對(duì)河流進(jìn)行編輯:調(diào)用自定義的編輯器,可以編輯河流的最大寬度、最小寬度、漸變寬度,改變河流的方向與顏色。
6)對(duì)橋梁線符號(hào)進(jìn)行編輯:調(diào)用自定義的編輯器,可以編輯橋梁的寬度、橋梁中小短線的角度和長(zhǎng)度,也可以編輯使橋梁具有一個(gè)矩形顏色塊。
7)對(duì)長(zhǎng)城線符號(hào)進(jìn)行編輯:調(diào)用自定義的編輯器,可以編輯長(zhǎng)城符號(hào)中短線的長(zhǎng)度和間隔,使長(zhǎng)城看起來更寬或更窄。
8)對(duì)在建高速公路線符號(hào)進(jìn)行編輯:調(diào)用自定義的編輯器,編輯基線寬度、道路寬倍數(shù)和邊線寬倍數(shù),得到不同的在建高速公路符號(hào)樣式。
9)保存線符號(hào):符號(hào)編輯好后進(jìn)行保存,將符號(hào)參數(shù)保存到本地?cái)?shù)據(jù)庫(kù)中。
10)符號(hào)化:選定圖層并編輯好符號(hào)后點(diǎn)擊符號(hào)化按鈕,可以在界面中即時(shí)查看符號(hào)化的過程。
從1∶70萬的安徽省政區(qū)圖中截取部分?jǐn)?shù)據(jù)進(jìn)行符號(hào)化實(shí)驗(yàn),符號(hào)化的效果如圖8所示。
圖7 線編輯器主界面
圖8 實(shí)驗(yàn)圖
將圖元法應(yīng)用于Coreldraw環(huán)境下的線狀地圖符號(hào)繪制,在對(duì)圖元符號(hào)進(jìn)行分類與組織的基礎(chǔ)上,建立Coreldraw線狀地圖符號(hào)庫(kù),所開發(fā)的軟件能有效解決人工繪制符號(hào)時(shí)效率低下的問題,提高制圖人員的工作效率。如果制圖人員對(duì)某一圖層的符號(hào)化效果不滿意,還可通過編輯器選擇相應(yīng)的符號(hào)進(jìn)行編輯,用編輯好后的符號(hào)對(duì)特定圖層進(jìn)行符號(hào)化。
[1] 張園玉,李霖,龍毅,等. 地圖符號(hào)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 測(cè)繪信息與工程, 2004, 29(6): 25-27.
[2] 王偉,張波,殷贛華,等. 基于COM技術(shù)的地圖符號(hào)庫(kù)結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)[J]. 武漢大學(xué)學(xué)報(bào)(信息科學(xué)版), 2002,27(3): 296-300.
[3] 姜琦,周曉光,曾聯(lián)斌,等. 可編輯復(fù)雜線狀符號(hào)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 地理信息世界, 2012(2): 75-80.
[4] 吳小芳,杜清運(yùn),徐智勇,等. 復(fù)雜線狀符號(hào)的設(shè)計(jì)及優(yōu)化算法研究[J]. 武漢大學(xué)學(xué)報(bào)(信息科學(xué)版), 2006,31(7): 632-635.
[5] 車森,孫群,劉海硯. 參數(shù)控制的地圖符號(hào)編輯器設(shè)計(jì)[J]. 武漢大學(xué)學(xué)報(bào)(信息科學(xué)版),2013,38(11): 1326-1329.
[6] 程朋根,龔健雅,眭海剛. GIS中地圖符號(hào)設(shè)計(jì)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 中國(guó)圖像圖形學(xué)報(bào), 2000, 5(12): 1006-1011.
[7] 姚興海,馬秋云. 基于CorelDRAW的地圖符號(hào)庫(kù)建庫(kù)[J]. 測(cè)繪通報(bào), 2003(2): 36-38.
[8] 喬俊軍,房雪玲,張海文. 基于CorelDRAW的制圖要素符號(hào)化研究[J]. 測(cè)繪與空間地理信息, 2013(8): 30-33.
[9] 尹言軍,孔令華,黃海濤. 基于CorelDRAW VBA的地圖制圖符號(hào)化程序設(shè)計(jì)[J]. 勘察科學(xué)技術(shù), 2013(1): 51-52.
[10] 蔡忠亮,李霖. 普通地圖符號(hào)的全開放式設(shè)計(jì)[J]. 武漢測(cè)繪科技大學(xué)學(xué)報(bào), 1999(3): 259-261.
[11] 談曉軍,邊馥苓,何忠煥. 地圖符號(hào)可視化系統(tǒng)的面向?qū)ο笤O(shè)計(jì)與實(shí)現(xiàn)[J]. 測(cè)繪通報(bào),2003(1): 11-13.
[12] 梅洋,李霖. 顧及符號(hào)關(guān)系處理的地圖符號(hào)庫(kù)設(shè)計(jì)與實(shí)現(xiàn)[J]. 測(cè)繪通報(bào), 2007(8): 66-70.
[責(zé)任編輯:張德福]
Design of linear cartographic symbol based on CorelDraw
LIU Yang, GUO Qingsheng, WEI Zhiwei, LIU Qizhi, WEI Jia
(School of Resource and Environment Science,Wuhan University,Wuhan 430079,China)
Drawing some linear cartographic symbols needs to be controled by program, because the plotting function of linear symbols can not be adopted directly from CorelDraw. According to the characteristics of CorelDraw, the study is based on the conception of graphical element composition. The commonly-used linear cartographic symbols are categorized, organized and stored, the relevant symbol base of linear cartographic symbols is established, the special editor is designed, the uniform editing and management is realized, and the algorithms are designed. Finally the method proposed is realized by taking advantage of secondary developmental environment of VBA in CorelDraw, and the result of the experiments proves to meet the needs of map production.
symbol base; primitive; linear cartographic symbol; editor
著錄:劉洋,郭慶勝,魏智威,等.CorelDraw線狀地圖符號(hào)庫(kù)的設(shè)計(jì)[J].測(cè)繪工程,2017,26(7):66-70,75.
10.19349/j.cnki.issn1006-7949.2017.07.014
2016-10-25
國(guó)家自然科學(xué)基金資助項(xiàng)目(41471384); 安徽省國(guó)土資源科技項(xiàng)目(2015-k-17)
劉 洋(1991-),男,碩士研究生.
P208
A
1006-7949(2017)07-0066-05