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