劉 金,李 鋼,陳國(guó)良
(1.中國(guó)礦業(yè)大學(xué) 環(huán)境與測(cè)繪學(xué)院,江蘇 徐州221116;2.徐州市國(guó)土資源局,江蘇 徐州221116)
一般來說,地圖符號(hào)的設(shè)計(jì)和實(shí)現(xiàn)方法分為兩種:一是在已有軟件的基礎(chǔ)上利用其二次開發(fā)語言及自身的圖形編輯功能進(jìn)行自定義符號(hào),如ArcInfo,AutoCAD,MapInfo,ArcView以及Corel-Draw等[1-3];二是利用程序語言自己開發(fā)符號(hào)設(shè)計(jì)軟件平臺(tái)實(shí)現(xiàn)符號(hào),目前,最流行的就是OOP和COM技術(shù)等[4-10]。地圖符號(hào)庫主要是針對(duì)計(jì)算機(jī)而不是專門針對(duì)地理信息可視化,而我國(guó)的各種比例尺地圖中的地理信息內(nèi)容十分豐富,要素表述非常詳盡,現(xiàn)無法擴(kuò)展復(fù)雜和特殊的符號(hào)。
為了克服組件MapObjects自帶缺省符號(hào)的缺乏無法滿足工程的需要,主要研究一種在地理信息工程中可以根據(jù)地圖符號(hào)規(guī)范來制作地圖面符號(hào)庫,具有良好的擴(kuò)充作用,滿足相應(yīng)工程需要,應(yīng)用于實(shí)際工程,同時(shí)對(duì)制作點(diǎn)線符號(hào)庫也有很大的參考價(jià)值。
面狀符號(hào)是指地圖上用來表示呈面狀分布的物體或地理現(xiàn)象的符號(hào),它在二維圖的各方向上都能按比例表示,如按比例表示的耕地、果園、水域等符號(hào)。
面狀符號(hào)除了擁有地圖符號(hào)的一般特點(diǎn)外,面狀符號(hào)還有如下特點(diǎn):
1)面狀符號(hào)一般有一個(gè)封閉輪廓邊界線,這個(gè)邊界線可以是有形的也可以是無形的。
2)面狀符號(hào)的面積和范圍都是依比例表示的,其大小隨地圖比例尺變化而變化。
3)為區(qū)別邊界線范圍內(nèi)的對(duì)象,不同的面狀符號(hào)在邊界線范圍內(nèi)填充不同的點(diǎn)符號(hào)、線符號(hào)、位圖或顏色來區(qū)分。
面狀符號(hào)實(shí)際上是一種組合符號(hào),一般都是由填充組合而成。一般面狀符號(hào)的填充方式有三種:點(diǎn)狀符號(hào)填充、暈線填充、簡(jiǎn)單填充。
三種填充方式各有特點(diǎn),通過查閱大量文獻(xiàn)比較和比較各種符號(hào)制作軟件,設(shè)計(jì)出一種比較好的制作方式。在CorelDRAW中設(shè)置版面,按照地形圖圖式規(guī)范進(jìn)行繪制,可以準(zhǔn)確設(shè)置符號(hào)大小和位移間隔。需要注意的是頁面設(shè)置大小能符合循環(huán),圖1示出了用CorelDRAW繪制菜地的實(shí)例。為了在應(yīng)用工程調(diào)用比較好的效果,再輸出bmp格式根據(jù)需要調(diào)整大小。
圖1 菜地制作與規(guī)范
位圖繪制比較方便,繪制位圖地圖符號(hào)基本可以滿足點(diǎn)狀地物及復(fù)雜點(diǎn)狀地物。在GIS中,利用位圖表示面狀地物有以下幾個(gè)優(yōu)點(diǎn)[11]:
1)對(duì)客觀世界中的目標(biāo)地物抽象時(shí)丟失的許多直觀信息可以通過該地物的實(shí)際圖片或象形圖片展示,能直接了解地物信息。
2)對(duì)空間信息的可視化有重要的幫助,由于位圖的設(shè)計(jì)可以很方便地融合藝術(shù)的手段,這些在矢量圖形編程中有時(shí)并不容易做到。通過位圖提供的豐富的符號(hào),可以通過這種方式應(yīng)用到系統(tǒng)中,增強(qiáng)信息的表達(dá)能力和視覺美觀。
3)利用位圖符號(hào)可以直接作為專題圖的圖例用,可以直接創(chuàng)建諸如點(diǎn)要素分布的專題地圖。
MapObjects是由美國(guó)環(huán)境系統(tǒng)研究所(ESRI)開發(fā)的一組供應(yīng)用開發(fā)人員使用的制圖與GIS功能組件。它由一個(gè)ActiveX控件和一系列可編程OLE(對(duì)象鏈接與嵌入)對(duì)象組成[12]。
MapObjects的CMoSymbol對(duì)象為用戶提供了有限的缺省的符號(hào)樣(SymbolStyle)。MO默認(rèn)缺省面狀符號(hào)11種,符號(hào)類型和值分別通過Style,SymbolType屬性設(shè)置。這種方式符號(hào)數(shù)目少,樣式單一,不具有專業(yè)領(lǐng)域應(yīng)用前景,不能滿足實(shí)際應(yīng)用系統(tǒng)對(duì)符號(hào)表現(xiàn)多樣化的要求。
MapObjects雖然本身不帶有豐富的符號(hào)庫,但它能提供自定義符號(hào)的接口函數(shù),使得符號(hào)的設(shè)計(jì)和擴(kuò)展成為可能[13]。提供的接口自定義符號(hào),可以建立一套自己需要的符號(hào)庫系統(tǒng)。使用ICustomMarker用來實(shí)現(xiàn)點(diǎn)狀符號(hào)的接口。對(duì)于MapObjects中實(shí)現(xiàn)自定義符號(hào)繪制的自動(dòng)化對(duì)象,至少要實(shí)現(xiàn)3個(gè)基本函數(shù)[14],分別為
1)SetupDC:該函數(shù)用來建立繪制符號(hào)的設(shè)備上下文(Device Context)和設(shè)置一些繪制所需要的參數(shù),如符號(hào)大小、旋轉(zhuǎn)角度等。
2)ReleaseDC:該函數(shù)清除當(dāng)前設(shè)備上下文并恢復(fù)原始的設(shè)備上下文,用來為下一次繪制提供一個(gè)初始設(shè)備上下文。
3)Draw:這個(gè)函數(shù)是自定義符號(hào)中最重要的一個(gè)函數(shù),它實(shí)現(xiàn)了自定義符號(hào)的繪制。
通過利用Windows GDI函數(shù),能靈活地繪制各種符號(hào),包括圖元、幾何圖形以及三維實(shí)體,通過這些符號(hào)能非常形象逼真地顯示客觀世界中的對(duì)象。
用CorelDRAW軟件制作好的相應(yīng)比例尺地圖面符號(hào),可以實(shí)現(xiàn)在工程中的調(diào)用,主要流程如圖2所示。
圖2 自定義面符號(hào)實(shí)現(xiàn)流程
ATL是ActiveX Template Library的縮寫,它是一套C++模板庫。MapObjects已經(jīng)提供的自定義接口,利用ATL很容易生成DLL,所以使用ATL是一種簡(jiǎn)單快捷的方法。
創(chuàng)建自定義面狀符號(hào),選擇接口ICustomFill,以保證能夠執(zhí)行面符接口。三個(gè)基本函數(shù)Setup-DC、ResetDC和Draw,注意面中的points是封閉的點(diǎn)串:
開發(fā)地理信息工程人員,可能對(duì)于Windows GDI繪制符號(hào)不精通,可以用位圖顯示來顯示復(fù)雜地圖符號(hào),很好地解決符號(hào)編程的困難。為每一個(gè)符號(hào)創(chuàng)建一個(gè)自動(dòng)化對(duì)象是不切實(shí)際的,需將面符號(hào)對(duì)象建成一個(gè)對(duì)象庫,并且具有很好的擴(kuò)展性。
主要用到加載位圖和多邊形填充方法來實(shí)現(xiàn)面狀符號(hào)的調(diào)用和填充。關(guān)鍵實(shí)現(xiàn)代碼如下:
編譯生成dll。已經(jīng)生成了一個(gè)自定義面狀狀符號(hào),它放在一個(gè)名CustomFillSymbol.dll的動(dòng)態(tài)庫文件中,并且可以在MapObjects環(huán)境中調(diào)用它。
對(duì)于將同類面符建成同一符號(hào)庫,可以通過ATL簡(jiǎn)單實(shí)現(xiàn),方法與前面相同,可以繼續(xù)添加如Fill2,F(xiàn)ill3等,使用DLL,可以方便在后臺(tái)維護(hù),也方便對(duì)符號(hào)庫的管理。這樣就建立一個(gè)符號(hào)對(duì)應(yīng)表如表1所示,供用戶需要來選擇。
表1 DLL中符號(hào)對(duì)應(yīng)表
在VC++6.0環(huán)境中編寫一個(gè)小的應(yīng)用工程來實(shí)現(xiàn)如何調(diào)用剛才生成的自定義面符號(hào)。
在應(yīng)用工程中包含下面的語句,主要作用是調(diào)用DLL:
利用ICustomFillPtr來定義指針了,為了方便用戶的使用,利用對(duì)話框來實(shí)現(xiàn)交互。具體關(guān)鍵實(shí)現(xiàn)代碼:
在應(yīng)用工程下實(shí)現(xiàn)面狀符號(hào)DLL的調(diào)用(以菜地為例),如圖3所示。
圖3 菜地符號(hào)調(diào)用效果
一般MapObjects默認(rèn)是整個(gè)圖層,但是在實(shí)際工程中往往需要對(duì)不用圖層實(shí)現(xiàn)不同的屬性,所以CMoValueMapRenderer對(duì)象的唯一屬性值符號(hào)化地圖。假設(shè)當(dāng)前有一個(gè)土地使用圖層,它是由不同使用方式的土地組成:一些住宅區(qū),一些是公園,一些是工業(yè)區(qū),還有一些是耕地等?,F(xiàn)在要做的工作是,從記錄字段中提取屬性按土地使用圖層進(jìn)行分類分級(jí)顯示,原理與上述一樣,就是用屬性字段的每一個(gè)值顯示一種符號(hào),以Symbol(i)設(shè)置具體的符號(hào)特性。對(duì)MapObjects自帶的“STATES”面圖層中的“AREA”屬性進(jìn)行分級(jí),其中部分屬性用自定義的面符號(hào)來顯示。具體實(shí)現(xiàn)效果如圖4所示。
圖4 面符號(hào)符號(hào)化效果
主要給出了通過CorelDraw軟件繪制地圖面符號(hào),制作出高精度又可以根據(jù)不同比例尺的地圖符號(hào),同時(shí)很好利用MapObjects提供的面符號(hào)接口,實(shí)現(xiàn)對(duì)符號(hào)庫的制作和擴(kuò)充。
地圖符號(hào)在GIS中占有非常重要的地位,地圖符號(hào)隨著GIS的發(fā)展而改進(jìn),目前在GIS中對(duì)地圖符號(hào)的研究還屬于初級(jí)階段,有許多地方還不夠完善,未來還有很多的工作需要去進(jìn)一步的研究和解決:
1)尚未涉及到點(diǎn)線符號(hào)制作和調(diào)用,尚未解決線狀符號(hào)的快速實(shí)現(xiàn),在用到純函數(shù)繪制時(shí),由于知識(shí)受限,無法繪制復(fù)雜線狀符號(hào),通過在CorelDRAW軟件繪制好符號(hào),在系統(tǒng)中加載位圖或者與ARCGIS中的制作線符號(hào)實(shí)現(xiàn),在后期學(xué)習(xí)中應(yīng)進(jìn)一步研究實(shí)現(xiàn)。
2)地圖符號(hào)庫包括地圖符號(hào)編輯器,利用制作軟件來繪制地圖符號(hào),但不是專門制作GIS地圖符號(hào)的軟件,開發(fā)一個(gè)脫平臺(tái)的地圖符號(hào)編輯器也是后期研究的重點(diǎn)。最好能夠設(shè)計(jì)接口在不同平臺(tái)實(shí)現(xiàn)調(diào)用。
3)主要研究的是二維的地圖符號(hào),而地圖符號(hào)已經(jīng)開始向多方向發(fā)展:從靜態(tài)符號(hào)到動(dòng)態(tài)符號(hào)發(fā)展;從二維符號(hào)向三維符號(hào)發(fā)展以及多媒體地圖符號(hào)的發(fā)展。
[1] 姚興海,馬秋云.基于CorelDraw的地圖符號(hào)庫建庫[J].測(cè)繪通報(bào),2003(2):36-38.
[2] 羅慶洲,張衛(wèi)民,李先華.在常用GIS軟件中實(shí)現(xiàn)自定義地圖符號(hào)[J].測(cè)繪通報(bào),2003(1):44-45.
[3] 程朋根.GeoStar地圖符號(hào)的實(shí)現(xiàn)方法[J].地礦測(cè)繪,1999(3):3-6.
[4] 談曉軍,邊馥苓,何忠煥.地圖符號(hào)可視化系統(tǒng)的面向?qū)ο笤O(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪通報(bào),2003(1):11-13.
[5] 楊春成,宋志剛,吳文會(huì).基于OOP技術(shù)的地圖符號(hào)制作工具的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪科學(xué),2002,27(1):50-53.
[6] 蔡忠亮,李 霖.普通地圖符號(hào)的全開放式設(shè)計(jì)[J].武漢測(cè)繪科技大學(xué)學(xué)報(bào),1999,24(3):259-261.
[7] 吳立新,劉純波,陳桂茹,等.地圖符號(hào)庫的面向?qū)ο蠹夹g(shù)和引用接口[J].礦山測(cè)量,1999(1):32-35.
[8] 程朋根,龔健雅,眭海剛.GIS中地圖符號(hào)設(shè)計(jì)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)圖形圖象學(xué)報(bào),2002,5(A)(12):1006-1011.
[9] FRANK A U,ENGENHOFER M J.Computer cartography for GIS,an object-oriented view on display transformation[J].Computer and Geo-sciences,1992,18(8):975-987.
[10] 王 偉,張 波,殷贛華.基于COM技術(shù)的地圖符號(hào)庫結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)[J].武漢大學(xué)學(xué)報(bào)·信息科學(xué)版,2002,27(3):296-300.
[11] 劉黎明.基于MapObjects的位圖符號(hào)的設(shè)計(jì)與應(yīng)用[OL][2006-07-31].中 國(guó) 科 技 論 文 在 線.http://www.paper.edu.cn.
[12] 胡慶武.基于MapObject的地圖符號(hào)庫設(shè)計(jì)[J].測(cè)繪通報(bào),2001(10):15-17.
[13] 趙冬泉,賈海峰,程聲通.基于MapObjects的排水管道流向表達(dá)與編輯[J].測(cè)繪通報(bào),2004(8):36-37,55.
[14] 戴 維,劉志輝.基于MapObjects的自定義地圖符號(hào)塊的實(shí)現(xiàn)[J].水土保持研究,2008(2),15(1):196-197.