李雙銀,李嘉星,,曹亞妮,吳永明
(1.68029部隊(duì),甘肅 蘭州 730020;2.信息工程大學(xué) 測(cè)繪學(xué)院,河南 鄭州 450052)
基于GDI+的三維統(tǒng)計(jì)地圖符號(hào)的研究與實(shí)現(xiàn)*
李雙銀1,李嘉星1,2,曹亞妮2,吳永明1
(1.68029部隊(duì),甘肅 蘭州 730020;2.信息工程大學(xué) 測(cè)繪學(xué)院,河南 鄭州 450052)
分析了三維統(tǒng)計(jì)地圖符號(hào)的構(gòu)圖規(guī)律,并將其分為簡(jiǎn)單符號(hào)、復(fù)合符號(hào)和組合符號(hào)3類。在此基礎(chǔ)上,提出了基于GDI+的三維統(tǒng)計(jì)地圖符號(hào)的繪制方法。實(shí)踐證明,利用該方法建立常用的三維統(tǒng)計(jì)地圖符號(hào)庫,并將其應(yīng)用于專題地圖的制作,能取得良好的效果。
GDI+;三維統(tǒng)計(jì)地圖符號(hào);構(gòu)圖規(guī)律;簡(jiǎn)單符號(hào);復(fù)合符號(hào);組合符號(hào)
專題地圖是突出表示一種或幾種自然現(xiàn)象和社會(huì)經(jīng)濟(jì)現(xiàn)象的地圖,如各種應(yīng)急地圖、旅游圖、經(jīng)濟(jì)圖、氣象圖和影像圖等[1]。專題地圖能夠深入地揭示制圖區(qū)域內(nèi)某一種或者幾種自然或社會(huì)經(jīng)濟(jì)現(xiàn)象,對(duì)于地理要素的表達(dá)形象、鮮明、生動(dòng)、深刻。隨著專題地圖在國民經(jīng)濟(jì)生活中的廣泛應(yīng)用,其類型已經(jīng)由單一的定性分析專題地圖發(fā)展到定量、評(píng)價(jià)、三維綜合景觀等多類型專題地圖。統(tǒng)計(jì)專題地圖是專題地圖中最常用、最直觀的一類,目前統(tǒng)計(jì)地圖制作工具主要有Adobe公司的Illustrator和Photoshop兩款圖形、圖像處理軟件以及MapInfo、SuperMap、ArcGIS等GIS軟件中的統(tǒng)計(jì)地圖制作模塊。符號(hào)化是專題地圖制圖的關(guān)建環(huán)節(jié),直接影響著地圖的表達(dá)能力和顯示效果。鑒于這些模塊的統(tǒng)計(jì)符號(hào)都是二維符號(hào)和一些簡(jiǎn)單的三維符號(hào),本文提出了一種基于GDI+的三維統(tǒng)計(jì)地圖符號(hào)的繪制方法,該方法主要是從GIS系統(tǒng)的底層開發(fā)來探討三維統(tǒng)計(jì)符號(hào)的設(shè)計(jì)。
按照符號(hào)與數(shù)據(jù)關(guān)系的復(fù)雜度,統(tǒng)計(jì)地圖符號(hào)可以分為簡(jiǎn)單符號(hào)、復(fù)合符號(hào)、組合符號(hào)3大類,下面詳細(xì)介紹3類統(tǒng)計(jì)符號(hào)的特點(diǎn)。
簡(jiǎn)單統(tǒng)計(jì)地圖符號(hào)無內(nèi)部結(jié)構(gòu),主要用來表示單指標(biāo)、單要素的分級(jí)特征和數(shù)值特征。表示分級(jí)特征時(shí),有點(diǎn)、線、面3種形態(tài)。點(diǎn)狀統(tǒng)計(jì)分級(jí)符號(hào)主要采用各種無內(nèi)部結(jié)構(gòu)的幾何圖形或者圖片符號(hào)來表示。線狀統(tǒng)計(jì)分級(jí)符號(hào)主要通過線狀符號(hào)的粗細(xì)來表示。面狀統(tǒng)計(jì)分級(jí)符號(hào)主要通過色相相同,飽和度或者亮度不同的色彩來表示。表示數(shù)值特征時(shí),可以采用無結(jié)構(gòu)的柱、矩形等基本幾何圖形來表示;也可以用幾何圖形的組合形式,即零錢法來表示,用不同的數(shù)目代表不同的數(shù)值,用戶依據(jù)其數(shù)目來計(jì)算得出專題要素的具體值。簡(jiǎn)單統(tǒng)計(jì)符號(hào),如圖1所示。
圖1 簡(jiǎn)單統(tǒng)計(jì)符號(hào)Fig.1 Simple statistic symbols
復(fù)合統(tǒng)計(jì)地圖符號(hào)是指能夠表示總要素由各個(gè)子要素構(gòu)成的比例關(guān)系的統(tǒng)計(jì)符號(hào)[2,4]。具體可以分為以下幾類:
1)柱狀圖:通過分割柱體來表現(xiàn)總量與分量的對(duì)比關(guān)系。
2)條形圖:在表示數(shù)量關(guān)系時(shí),條形圖的功能與柱狀圖基本一致,但在表現(xiàn)頻率分布時(shí),主要表述的是各組分量的情況。如:人口圖中人口的年齡分組。
3)折(曲)線圖:在表示頻率關(guān)系時(shí)也是以一組分量的形式出現(xiàn),與柱狀圖和條形圖只是形式上差別,當(dāng)分組較多時(shí)不宜采用。
4)餅圖:表示總量百分比的方法,餅圖有許多變種,包括圓環(huán)餅圖、半圓環(huán)餅圖、半圓餅圖和分裂餅圖等。
5)風(fēng)玫瑰圖:表現(xiàn)與空間方位相關(guān)的統(tǒng)計(jì)數(shù)據(jù)的數(shù)量對(duì)比關(guān)系,用于不同區(qū)域風(fēng)向頻率的對(duì)比,在氣候圖中常用到。
復(fù)合統(tǒng)計(jì)符號(hào),見圖2。
圖2 復(fù)合統(tǒng)計(jì)符號(hào)Fig.2 Compound statistic symbols
當(dāng)同一區(qū)域或者同一定位點(diǎn)要配置多個(gè)統(tǒng)計(jì)地圖符號(hào)時(shí),為了顯示的美觀性和有序性,避免產(chǎn)生重疊,將各個(gè)統(tǒng)計(jì)符號(hào)組合為一個(gè)整體,這樣就生成了組合統(tǒng)計(jì)符號(hào)。組合統(tǒng)計(jì)符號(hào)中的各個(gè)統(tǒng)計(jì)符號(hào)是相互獨(dú)立的。常用的組合方式有柱狀圖與環(huán)狀圖、餅狀圖的組合,半圓和半圓的組合、以及圓與圓環(huán)的組合等。
在多數(shù)情況下依靠時(shí)間軸將其聯(lián)系在一起,通過采用相同量綱的復(fù)合統(tǒng)計(jì)圖型的排列、疊置、翻轉(zhuǎn)展示不同時(shí)段數(shù)據(jù)間的對(duì)比關(guān)系,最常見的如相互疊置的餅圖,順序排列的帶有構(gòu)成的柱狀圖等。
以同一種統(tǒng)計(jì)符號(hào)出現(xiàn)時(shí),可以根據(jù)數(shù)據(jù)相關(guān)類型考慮將兩個(gè)符號(hào)放置成平行或?qū)Ρ鹊男问健S袝r(shí)幾組數(shù)據(jù)間表面上沒有直接的關(guān)聯(lián),往往可以采用幾種統(tǒng)計(jì)符號(hào)來表達(dá),常見的有用柱狀表示一個(gè)區(qū)域的各月平均降雨量,用折線表示平均氣溫、日照時(shí)數(shù)等,這樣的組合統(tǒng)計(jì)符號(hào)反映了該區(qū)域的氣候特點(diǎn)。組合統(tǒng)計(jì)符號(hào),如圖3所示。
圖3 組合統(tǒng)計(jì)符號(hào)Fig.3 Combination statistic symbols
圖4中顯示了各種統(tǒng)計(jì)符號(hào)[7],越靠近中間符號(hào)越簡(jiǎn)單,越往邊上符號(hào)構(gòu)成越復(fù)雜。
圖4 統(tǒng)計(jì)地圖符號(hào)的種類Fig.4 The kinds of statistic map symbols
目前對(duì)矢量系統(tǒng)開發(fā)有較好支持的圖形庫主要有微軟的GDI+,開源的 AGG,Cairo等[2]。作為微軟的產(chǎn)品,GDI+在Windows系統(tǒng)下得能到較好的支持,是Windows系統(tǒng)底層開發(fā)的首要選擇。設(shè)備環(huán)境是Windows程序、驅(qū)動(dòng)程序和輸出設(shè)備(如打印機(jī)、繪圖儀)之間的紐帶,GDI是一組C++類,它在驅(qū)動(dòng)程序的協(xié)助下把數(shù)據(jù)描繪在硬件上,位于應(yīng)用程序與硬件之間,把數(shù)據(jù)從一方傳到另一方。在.Net中Microsoft解決了GDI中的許多問題,并讓它變得更容易使用,這就是GDI的升級(jí)版本GDI+。
利用GDI+繪圖的一個(gè)好處就是程序員不必知道任何關(guān)于數(shù)據(jù)在設(shè)備上渲染的細(xì)節(jié),只需要知道對(duì)應(yīng)的接口函數(shù)如何使用。與傳統(tǒng)的GDI相比,GDI+主要有漸變畫刷、獨(dú)立的路徑對(duì)象、矩陣對(duì)象、區(qū)域和多格式圖片支持等特點(diǎn)。另外,GDI+能夠定義Alpha通道合成運(yùn)算,能夠自定義線條樣式,設(shè)置線寬并支持線頭和線冒及線條拐角處的鏈接樣式;提供了對(duì)矩陣計(jì)算的支持,可以通過矩陣運(yùn)算來進(jìn)行圖形的平移、縮放、旋轉(zhuǎn)、變換等操作;使用了浮點(diǎn)數(shù)作為數(shù)據(jù)源,提高了顯示精度。
VC6.0中默認(rèn)支持GDI繪圖[3],并不支持GDI+的繪圖包,因此需要下載微軟的GDIPlus支持包。一個(gè)完整的GDI+支持包至少應(yīng)包括頭文件 gdiplus.h,動(dòng)態(tài)庫文件 gdiplus.lib和gdiplus.dll三個(gè)文件。一般從官方網(wǎng)站上下載的支持包是一個(gè)文件夾,里面大致有26個(gè)文件,如圖5所示。
圖5 GDI+文件夾結(jié)構(gòu)Fig.5 GDI+folder construction
在VC6.0中使用GDI+時(shí),應(yīng)將GDI+文件夾拷貝到工程目錄下,并在項(xiàng)目工程中進(jìn)行如下設(shè)置:
1)在頭文件stdafx.h中加入3行代碼:
#include"GDI+//GdiPlus.h"
using namespace Gdiplus;
#pragma comment(lib,"GDI+//GdiPlus.lib")
2)在APP類的頭文件中聲明一個(gè)全局變量m_gdiplusToken:
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
3)在APP類的InitInstance()函數(shù)、ExitInstance()函數(shù)中加入以下代碼:
InitInstance中添加:
GdiplusStartup(&m_gdiplusToken,&m_gdiplusStartupInput,NULL);
ExitInstance中添加:
GdiplusShutdown(m_gdiplusToken);
通過這些設(shè)置就可以在工程中利用GDI+提供的函數(shù)繪制三維地圖符號(hào)。
符號(hào)的三維效果(光影效果)是通過GDI+中的漸變畫刷來實(shí)現(xiàn)的,先由繪圖函數(shù)生成圖形路徑,再由不同的顏色生成畫刷,最終用畫刷填充圖形路徑即可得到對(duì)應(yīng)的三維符號(hào),如圖6所示。
統(tǒng)計(jì)符號(hào)雖然多樣,但很多都是由各種簡(jiǎn)單符號(hào)組合而成的[5],而且在符號(hào)組合中需要考慮的問題很多,如定位點(diǎn)、壓蓋關(guān)系、顏色匹配等,圖7顯示出組合符號(hào)的實(shí)現(xiàn)過程。
根據(jù)上述方法,利用GDI+的繪圖函數(shù),本文實(shí)現(xiàn)了一些組合的復(fù)雜統(tǒng)計(jì)地圖符號(hào),如圖8所示。
為了管理這些三維統(tǒng)計(jì)地圖符號(hào),本文還設(shè)計(jì)了一個(gè)統(tǒng)計(jì)地圖符號(hào)庫,用于管理和維護(hù)所生成的符號(hào) 。符號(hào)庫的設(shè)計(jì)遵循了完備性、靈活性、精確性、易用性、開放性這5個(gè)原則,能夠有效地組織管理文中提到的3類統(tǒng)計(jì)符號(hào)。用戶不僅可以對(duì)符號(hào)庫內(nèi)的符號(hào)進(jìn)行增加、刪除、修改,而且還可以用簡(jiǎn)單符號(hào)自己組合生成新的符號(hào)。本文設(shè)計(jì)實(shí)現(xiàn)的符號(hào)庫,見圖9。
圖6 三維效果的實(shí)現(xiàn)過程Fig.6 Implementation process of 3D effect
圖7 組合符號(hào)的實(shí)現(xiàn)過程Fig.7 Implementation process of combination symbols
圖8 三維統(tǒng)計(jì)符號(hào)的實(shí)現(xiàn)效果圖Fig.8 Implementation effect diagram of 3D statistic symbols
圖9 統(tǒng)計(jì)符號(hào)庫管理界面Fig.9 Management interface of library of statistic symbols
以河南省各類糧食產(chǎn)量、畝產(chǎn)量及增長(zhǎng)率為實(shí)驗(yàn)數(shù)據(jù),制作分區(qū)組合統(tǒng)計(jì)圖,用結(jié)構(gòu)環(huán)表示各類糧食的產(chǎn)量,用中間的柱表示糧食增長(zhǎng)率,如圖10所示。
本文在研究統(tǒng)計(jì)地圖符號(hào)構(gòu)圖規(guī)律的基礎(chǔ)上,著重探討了基于GDI+的三維統(tǒng)計(jì)地圖符號(hào)的實(shí)現(xiàn)方法,利用GDI+的繪圖函數(shù)繪制各種復(fù)雜的三維統(tǒng)計(jì)符號(hào),并設(shè)計(jì)了符號(hào)庫對(duì)符號(hào)進(jìn)行管理。以河南糧食數(shù)據(jù)為例,制作了分區(qū)統(tǒng)計(jì)圖表三維專題圖,驗(yàn)證了符號(hào)的實(shí)用性。本研究為三維統(tǒng)計(jì)地圖符號(hào)的設(shè)計(jì)和實(shí)現(xiàn)提供了一個(gè)新思路,有利于提高統(tǒng)計(jì)地圖的顯示效果,提升各類專題信息的傳輸效率。
圖10 分區(qū)統(tǒng)計(jì)圖表專題地圖Fig.10 The thematic map of the subarea statistics graphics
[1]曹亞妮.面向快速制作的專題地圖符號(hào)生成研究[D].鄭州:解放軍信息工程大學(xué),2010.
[2]扈洋,楊世杰.基于GDI+的數(shù)字地圖符號(hào)設(shè)計(jì)[J].地理信息世界,2010(3):20 -24.
[3]李利正,楊世杰.基于 GDI+特殊統(tǒng)計(jì)圖的設(shè)計(jì)[J].科技信息,2007(35):571-572.
[4]王宇紅.專題地圖可視化符號(hào)自動(dòng)生成的研究[D].西安:陜西師范大學(xué),2004.
[5]王海龍.統(tǒng)計(jì)數(shù)據(jù)地圖可視化研究[D].鄭州:解放軍信息工程大學(xué),2007.
[6]謝超,陳毓芬.基于GDI+的電子地圖符號(hào)庫的改進(jìn)[J].測(cè)繪工程,2006,15(2):45 -49.
[7]陳棉,王秀斌,施建勇.空間信息多媒體可視化設(shè)計(jì)探討[J].測(cè)繪通報(bào),2007(7):54-57.
Research and Practice of 3D Statistic Map Symbols Based on GDI+
LI Shuang-yin1,LI Jia-xing1,2,CAO Ya-ni1,WU Yong-ming1
(1.68029 Troops,Lanzhou Gansu 730020,China;2.Department of Surveying and Mapping,Information Engineering University,Zhengzhou Henan 450052,China)
This paper analyzes the rule of composition of a map of 3D statistic map symbols.They are divided into three kinds:simple symbols,compound symbols and combination symbols.The paper puts forward drawn method of 3D statistic map symbols based on GDI+.The practice proved to apply that the method establish 3D statistic map symbols library in common use,and application to the making of thematic map could get better effect.
GDI+;3D statistic map symbols;composition rule of a map;simple symbol;compound symbol;combination symbol
P 285;TP 302.4
A
1007-9394(2011)03-0012-03
2011-03-28
李雙銀(1972~),男,甘肅臨洮人,碩士,高級(jí)工程師,主要研究方向:數(shù)字地圖制圖和遙感攝影測(cè)量。