李 論,張志鵬,陳 慎
(61175部隊,湖北 武漢 430074)
基于CorelDRAWX6的專題地圖統(tǒng)計圖表自動化實現(xiàn)
李 論,張志鵬,陳 慎
(61175部隊,湖北 武漢 430074)
憑借卓越的圖形、文字編輯功能,CorelDRAW頗受制圖人員的青睞,尤其在專題地圖的設(shè)計與編繪中扮演著重要角色。文中基于專題地圖統(tǒng)計圖表的快速準(zhǔn)確繪制的需求,結(jié)合ActiveX Automation和ADO數(shù)據(jù)庫訪問技術(shù),利用Visual Basic語言在CorelDRAW X6中進(jìn)行二次開發(fā),實現(xiàn)多種常用統(tǒng)計圖表的自動化生成,為今后各類專題地圖的內(nèi)容表達(dá)提供借鑒與參考。
CorelDRAW X6;ADO;Visual Basic;專題地圖;統(tǒng)計圖表
藝術(shù)性與技術(shù)性兼具的專題地圖主要為國民經(jīng)濟(jì)建設(shè)服務(wù),它們突出而詳細(xì)地表示一種或幾種自然現(xiàn)象、社會經(jīng)濟(jì)現(xiàn)象。專題地圖內(nèi)容表達(dá)方法眾多,定位圖表法和分區(qū)統(tǒng)計圖表法尤為常用,柱狀圖、折線圖、餅狀圖、環(huán)狀圖、雷達(dá)圖等形象生動地反映了制圖區(qū)域特定點位或特定范圍內(nèi)某些現(xiàn)象的數(shù)量、質(zhì)量特征。
盡管在制作統(tǒng)計圖表時,可以手工繪制或單獨借助于外部軟件(如EXCEl、Adobe Illustrator等)生成其它格式統(tǒng)計圖表,但是這些傳統(tǒng)的方法不僅人工干預(yù)性強、兼容性較差,而且精確性和美觀性也大打折扣。
憑借卓越的圖形、文字編輯功能,CorelDRAW頗受制圖人員的青睞,尤其在專題地圖的設(shè)計與編繪中扮演著重要角色。文章基于專題地圖統(tǒng)計圖表的快速準(zhǔn)確繪制問題,結(jié)合ActiveX Automation和ADO數(shù)據(jù)庫訪問技術(shù),利用Visual Basic語言進(jìn)行了二次開發(fā),實現(xiàn)了多種常用統(tǒng)計圖表的自動化生成,為在CorelDRAW環(huán)境下制作各類專題地圖的統(tǒng)計圖表提供方便。
ActiveX Automation是面向?qū)ο蟮慕忉屝烷_發(fā)工具,在廣義上是指微軟公司的整個COM(Component Object Model,組件對象模型)架構(gòu),但是現(xiàn)在通常用來稱呼基于標(biāo)準(zhǔn)COM接口來實現(xiàn)對象連接與嵌入的ActiveX控件。該技術(shù)通過應(yīng)用程序?qū)ν饨缣峁┟嫦蚰骋惶囟ㄈ蝿?wù)并提供完成該任務(wù)的完整功能的Automation對象實現(xiàn)應(yīng)用程序間的對象共享。
由于ActiveX不依賴于語言,本文所研究的統(tǒng)計圖表生成工具選用的是Visual Basic編程語言,通過CorelDRAW ActiveX Automation技術(shù)來建立與CorelDRAW對象的連接。通過VB編程語言控制CorelDRAW的對象模型,從而實現(xiàn)訪問和控制CorelDRAW。
在VB中,有4種常用數(shù)據(jù)庫訪問接口,分別是Data控件、DAO、RDO和ADO。其中,ADO是Microsoft公司開發(fā)的面向?qū)ο髷?shù)據(jù)庫訪問最新接口,不僅占用內(nèi)存資源少、簡單易用,而且能夠獨立創(chuàng)建除Error對象和Field對象外的所有對象,具有非常靈活的對象模型。
ADO同樣是利用“對象”的概念來實現(xiàn)VB應(yīng)用程序與外部數(shù)據(jù)庫的訪問和操作,將具體的操作細(xì)節(jié)隱藏起來,用戶在使用ADO對象時只需要通過訪問對象的“屬性”、“方法”及“事件”進(jìn)行操作即可。
2.1 直接繪制法
直接繪制法,就是不利用其它軟件生成專題統(tǒng)計圖來過渡到CorelDRAW中,而是直接在CorelDRAW中矢量繪制,根據(jù)直接繪制前的準(zhǔn)備工作不同,可以分為以下兩種:
1)在圖紙上繪制好統(tǒng)計圖表(如柱狀圖),再掃描到計算機(jī)中,然后利用CorelDRAW進(jìn)行手工描繪。這樣的統(tǒng)計圖表雖然在數(shù)據(jù)信息共享和傳遞上有一定的改善,但是存在不易編輯、費時費力、精度差等缺點,不能滿足準(zhǔn)確、快速繪制地圖的需要。
2)根據(jù)統(tǒng)計數(shù)據(jù)計算好各制圖對應(yīng)的比例,再設(shè)計好統(tǒng)計圖表的屬性值,比如柱形的長、寬、高等,然后利用CorelDRAW的矢量繪圖工具進(jìn)行手工繪制。需要坐標(biāo)軸的統(tǒng)計圖表,如柱形圖,還得手工添加橫、縱坐標(biāo)軸,不僅要按設(shè)計比例單元添加小刻度線,還要用文本工具對應(yīng)添加刻度值。顯然,這種方式也存在工作量大、制圖效率低的缺點。
2.2 間接繪制法
顧名思義,間接繪制法并不是直接在CorelDRAW中繪制統(tǒng)計圖表,而是利用具有繪制統(tǒng)計圖表功能的其它外部軟件來制作,然后導(dǎo)入到CorelDRAW中進(jìn)行后期編輯修改。
1)利用Excel的間接繪制。 Excel通過錄入的數(shù)據(jù)和統(tǒng)計圖模板自動生成圖表后選擇性粘貼到CorelDRAW中,但這樣插入的統(tǒng)計圖表為一個OLE對象整體,有時也存在圖表變形,而且不能編輯圖形,當(dāng)然也可先將插入的OLE對象圖形輸出為WMF格式的矢量圖形文件,然后再導(dǎo)入CorelDRAW,就可以矢量編輯了,但這樣可編輯的矢量統(tǒng)計圖表邊線存在鋸齒狀變形,尤其體現(xiàn)在餅狀圖等具有弧狀的圖形上。
2)利用Adobe Illustrator間接繪制。 選擇Adobe Illustrator工具箱中的一種統(tǒng)計圖表工具,在繪圖區(qū)拖出一個矩形框來設(shè)置將要制作圖表的大小,然后在彈出數(shù)據(jù)對話框中直接輸入統(tǒng)計數(shù)據(jù)或?qū)隕xcel表格中的數(shù)據(jù),確定后生成需要的統(tǒng)計圖表,最后保存為最低版本的EPS并用高版本CorelDRAW打開即可。但由于軟件兼容性問題,仍然存在一些不盡人意的地方,比如圖形數(shù)據(jù)的丟失、文本變曲等問題。
3)利用地理信息系統(tǒng)軟件的間接繪制。 常用的地理信息系統(tǒng)軟件有MapInfo、MapGIS、ArcGIS等,它們都是通過創(chuàng)建統(tǒng)計圖向?qū)Вx擇圖表樣式和其它相關(guān)設(shè)置后,根據(jù)圖層的屬性表數(shù)據(jù)進(jìn)行自動生成,然后將生成的統(tǒng)計圖導(dǎo)出為EPS或PDF等矢量格式文件,最后再導(dǎo)入到CorelDRAW中。但這樣會出現(xiàn)信息丟失、縮放操作產(chǎn)生變形等問題。
綜上所述,現(xiàn)有這些方法普遍存在效率低、兼容性差、數(shù)據(jù)丟失、圖形變形等問題,所以一種全新的便捷、快速、準(zhǔn)確、靈活的專題圖統(tǒng)計圖表制作方法應(yīng)運而生。
3.1 程序開發(fā)原理及功能
使用Visual Basic平臺,建立工程文件,使用VB提供的ADO數(shù)據(jù)庫訪問技術(shù)和CorelDRAW提供的ActiveX Automation技術(shù),在同一個VB應(yīng)用程序中實現(xiàn)CorelDRAW與MDB數(shù)據(jù)庫的通信,然后添加相應(yīng)控件,設(shè)計好程序界面(見圖1),通過對象訪問機(jī)制編寫功能程序,編譯成功后,發(fā)布成EXE應(yīng)用程序文件。程序結(jié)構(gòu)體系如圖2所示 。點擊“數(shù)據(jù)庫”菜單,會彈出“新建數(shù)據(jù)庫”、“打開數(shù)據(jù)庫”、“新建表”、“關(guān)閉數(shù)據(jù)庫”等子菜單,可以實現(xiàn)新建和打開MDB數(shù)據(jù)庫功能,并將表數(shù)據(jù)顯示在窗體的MSHFlexGrid控件對象中;點擊“圖表”菜單,會彈出各類統(tǒng)計圖表的生成子菜單,可以實現(xiàn)柱狀圖、折線圖、餅狀圖、環(huán)狀圖、雷達(dá)圖等常用統(tǒng)計圖表的繪制(包括單式和復(fù)式兩種),操作員在打開MDB數(shù)據(jù)庫后,選擇不同的生成統(tǒng)計圖表子菜單,便可在CorelDRAW頁面中生成相應(yīng)的統(tǒng)計圖表;點擊“修改”菜單,會彈出“立體化”、“點替換”、“數(shù)據(jù)修改”等子菜單,可以對柱狀圖、餅狀圖和環(huán)狀圖等進(jìn)行立體化處理,也可以對折線圖、雷達(dá)圖中的點符號進(jìn)行點替換,還可以對打開的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行修改,其對應(yīng)統(tǒng)計圖表也隨之自動變化。工具欄中不同的工具圖標(biāo),操作員也可通過點擊相應(yīng)工具圖標(biāo)實現(xiàn)各菜單功能。

圖1 程序界面

圖2 程序體系結(jié)構(gòu)
3.2 開發(fā)步驟
1)新建VB工程,通過添加引用“Microsoft ActiveX Data Objects 2.5 Library”和“Corel-CorelDRAW 16.0 Type Library”兩個類庫文件,將工程與ADO和CorelDRAW連接起來,具體方法是在VB工程界面中選擇菜單“工程—引用”,在彈出“引用”對話框中勾選“Microsoft ActiveX Data Objects 2.5 Library”和“Corel-CorelDRAW 16.0 Type Library”兩個引用類庫文件。
2)在工程中添加菜單和相應(yīng)的控件,新建CorelDRAW連接模塊和ADO連接模塊,通過CorelDRAW.Application和ADODB.Connection直接訪問CorelDRAW應(yīng)用程序和MDB數(shù)據(jù)庫文件,實現(xiàn)相互訪問通信。
3)新建數(shù)據(jù)庫功能模塊、統(tǒng)計圖表生成模塊和統(tǒng)計圖表修改模塊,分別編寫各菜單的功能過程、函數(shù)。編譯運行成功后生成EXE應(yīng)用程序,有利于代碼保護(hù),方便共享傳輸。
3.3 統(tǒng)計圖表的實現(xiàn)過程
統(tǒng)計圖表的生成模塊是程序的核心部分,這里重點對統(tǒng)計圖表的數(shù)學(xué)模型進(jìn)行分析。在生成統(tǒng)計圖表前,預(yù)先定義一個顏色數(shù)組,包括10種色彩對比鮮明的RGB色彩值,用于對不同組數(shù)據(jù)生成的復(fù)式統(tǒng)計圖表進(jìn)行不同的填色區(qū)分,方便后期統(tǒng)一的更改編輯。
3.3.1 柱狀圖表
在生成柱形圖表前,首先要進(jìn)行坐標(biāo)軸的繪制。坐標(biāo)軸包括橫坐標(biāo)軸和縱坐標(biāo)軸兩部分,橫坐標(biāo)為變量,縱坐標(biāo)為變量值。為了方便后期的縮放,本文中所采用的橫、縱坐標(biāo)單位刻度長度都為10 mm,坐標(biāo)原點設(shè)置在CorelDRAW頁面左下角頂點處,即(0,0)位置。
1)橫坐標(biāo)軸長度L1是由變量數(shù)N來確定,即
L1=N×10.
(1)
2)縱坐標(biāo)軸長度L2分兩種情況:
①當(dāng)所給數(shù)據(jù)庫中數(shù)據(jù)最大值的首位數(shù)字M大于或等于5時
L2=(M+1)×10.
(2)
②當(dāng)所給數(shù)據(jù)庫中數(shù)據(jù)最大值的首位數(shù)字M小于5時
L2=(M+1)×2×10.
(3)
式(3)可以保證縱坐標(biāo)軸長度不會太短,當(dāng)然此時標(biāo)注單位刻度值也要相應(yīng)減半。
橫坐標(biāo)軸的實現(xiàn)相對簡單些,只是根據(jù)變量數(shù)確定軸長度后,添加刻度線及表中字段1對應(yīng)的變量名即可。橫縱坐標(biāo)軸的具體實現(xiàn)通過在模塊中編寫公共(Public)過程ZuoBiaoZhou(Combo1 As ComboBox),在后期統(tǒng)計圖表繪制過程中調(diào)用該過程即可。
坐標(biāo)軸繪制完成后,再進(jìn)行柱形圖表的生成。程序中是通過方法CreateRectangle(Left As Double, Top As Double, Right As Double, Bottom As Double)來創(chuàng)建矩形的,其中變量Left為矩形左邊橫坐標(biāo),Top為矩形上邊縱坐標(biāo),Right為矩形右邊橫坐標(biāo),Bottom為矩形底邊縱坐標(biāo)。這里假設(shè)所給數(shù)據(jù)庫中縱坐標(biāo)最大刻度值為YTopValue,各個變量值為Value(i),最大變量值為maxValue,最高矩形高長為maxLenth。矩形的高度Top反映出數(shù)據(jù)的大小,即由變量值Value(i)決定。
Top=max Lenth×Value(i)/max Value,
(4)
max Lenth=L2×max Value/YTopValue.
(5)
由式(4)、式(5)可以推出Top化簡后表達(dá)式為
Top=L2×Value(i)/YTopValue.
(6)
表1為2013年1~4月部分省區(qū)財政收入數(shù)據(jù),根據(jù)該數(shù)據(jù)源建立數(shù)據(jù)庫文件后,生成的3種柱狀統(tǒng)計圖表如圖3所示。

表1 2013年1~4月部分省區(qū)財政收入 億元

圖3 生成的3種柱狀統(tǒng)計圖
3.3.2 折線圖表
折線圖與柱形圖具有相同的坐標(biāo)軸,其繪制首先是確定數(shù)據(jù)對應(yīng)的點,再用折線連接各點即可,所以關(guān)鍵是確定點的(X,Y)坐標(biāo)值。其中Y值才能反映數(shù)據(jù)信息,表達(dá)式為
X=10×i-5,
(7)
Y=L2×Value(i)/YTopValue.
(8)
表2為2013年6月第3周武漢市溫度走勢數(shù)據(jù),根據(jù)該數(shù)據(jù)源建立數(shù)據(jù)庫文件后,生成的折線圖表如圖4所示。

表2 2013年6月第3周武漢市溫度走勢 ℃

圖4 生成的折線圖
3.3.3 餅狀圖表和環(huán)狀圖表
餅狀圖表與環(huán)狀圖表的實現(xiàn)類似,都是通過不同數(shù)據(jù)對應(yīng)餅狀圖或環(huán)狀圖中所占圓弧比例來表達(dá)的。即各變量值Value(i)所占該組數(shù)據(jù)總和SumValue的比例決定對應(yīng)的弧度Arc,表達(dá)式為
Arc=360°×Value(i)/SumValue.
(9)
通過CreateEllipse2()方法,從12時方向開始順時針依次繪制各數(shù)據(jù)對應(yīng)圖形(式中i=1,2,…),并通過定義的顏色數(shù)組填充不同色彩。對于環(huán)狀圖而言,在餅狀圖繪制完成后,多一步裁切步驟,即在以餅狀圖圓心繪制一個小同心圓進(jìn)行裁切,便得到環(huán)狀圖。若為復(fù)式圖表,則圓弧半徑與SumValue成正比關(guān)系。根據(jù)表1數(shù)據(jù)生成的兩種餅狀圖表和兩種環(huán)狀圖表分別如圖5、圖6所示。

圖5 生成的兩種餅狀圖

圖6 生成的兩種環(huán)狀圖
3.3.4 雷達(dá)圖表
雷達(dá)圖同樣需要坐標(biāo)軸,但與前面所述橫縱坐標(biāo)軸不同,它的坐標(biāo)軸數(shù)由數(shù)據(jù)變量個數(shù)(數(shù)據(jù)庫表中記錄數(shù))N決定。相鄰兩軸以原點為中心,相差弧度為
Arc=360°/N.
(10)
各坐標(biāo)軸長度與前面所述縱坐標(biāo)軸長度L2一樣,不再重復(fù),各坐標(biāo)軸相同單位刻度用同心圓環(huán)連接。雷達(dá)圖的繪制關(guān)鍵是各組數(shù)據(jù)中各變量值Value(i)對應(yīng)的在各坐標(biāo)軸上位置的確定,程序中,通過定義一個Node類型的數(shù)組變量JieD(1 To N)存放各變量值在對應(yīng)軸上的位置節(jié)點,該節(jié)點由變量值Value(i)在對應(yīng)軸上長度位置處用函數(shù)AddNodeAt(Distance, cdrAbsoluteSegmentOffset) 添加一個節(jié)點得到
Distance=L2×Value(i)/YTopValue.
(11)
參數(shù)Distance確定后,即可獲取該節(jié)點在CorelDRAW頁面中的橫、縱坐標(biāo)(PositionX,PositionY),然后用折線連接各節(jié)點即可輕松完成雷達(dá)圖的繪制。根據(jù)表2數(shù)據(jù)生成的雷達(dá)圖表如圖7所示。

圖7 生成的雷達(dá)圖
CorelDRAW中自動生成的統(tǒng)計圖表,實用性和準(zhǔn)確性很高。對于生成的統(tǒng)計圖表,既可以進(jìn)行立體化、點符號替換、數(shù)據(jù)圖形同步修改等,又可以不失真地等比例縮放和便捷的后期編輯,這樣不但豐富了專題地圖內(nèi)容,而且增強了藝術(shù)效果。此統(tǒng)計圖表的自動生成實現(xiàn),解決了以往傳統(tǒng)方法在CorelDRAW中繪制統(tǒng)計圖時存在的兼容性差、編輯困難、圖形變形、效率低等缺點,大大提高了專題圖制圖效率,并且成功引入了ADO技術(shù),為以后CorelDRAW二次開發(fā)擴(kuò)展了空間。
[1]高小明,湯青慧,溫俊麗.CorelDRAW中基于VBA的二次開發(fā)[J].測繪與空間地理信息,2006,29(6):54-56.
[2]黃仁濤,龐小平,馬晨燕.專題地圖編制[M].武漢:武漢大學(xué)出版社,2003.
[3]戴欣明.基于MapInfo & CorelDRAW的地質(zhì)圖制作[J].測繪通報,2002 (5):39-40.
[4]劉志銘,等.Visual Basic數(shù)據(jù)庫開發(fā)實例解析[M].北京:機(jī)械工業(yè)出版社,2003.
[5]盧記軍.ADO數(shù)據(jù)庫訪問技術(shù)在CorelDRAW中的應(yīng)用[J].微型電腦應(yīng)用,2006(3):56-59.
[6]于冬梅,董羅海,張力果.數(shù)字地圖制圖理論方法與應(yīng)用[J].地球信息科學(xué),2003(6).
[7]熊金華,曹亞妮,程越.基于統(tǒng)計分析方法的地理要素顯示重要性確定研究[J].測繪工程,2012,21(3):26-30.
[責(zé)任編輯:張德福]
AutomaticimplementationofstatisticalchartinthematicmapbasedonCorelDRAWX6
LI Lun, ZHANG Zhi-peng, CHEN Shen
(Troops 61175, Wuhan 430074, China)
Relying on the excellent graphics and text editing function, CorelDRAW is popular with the cartographers, especially which plays an important role in the design and compilation of thematic maps. Based on the need of rapidly and exactly drawing thematic map statistical charts, ActiveX Automation and ADO database accessing technology are combined to apply Visual Basic programming language to do secondary development in CorelDRAW X6 in order to realize the automatic generation of a variety of commonly-used statistical charts, which will provide a reference for all kinds of thematic map content expression in the future.
CorelDRAW X6; ADO; Visual Basic; thematic map; statistical chart
2013-09-02
李 論(1987-),男,助理工程師,碩士研究生.
TP311
:A
:1006-7949(2014)01-0065-05