佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > ArcGIS Engine在地圖打印系統(tǒng)開發(fā)中的應(yīng)用研究

ArcGIS Engine在地圖打印系統(tǒng)開發(fā)中的應(yīng)用研究

熱門標(biāo)簽:呼叫中心系統(tǒng) 臨汾電銷 柳州電銷 資陽電銷 六安電銷 搭建電銷機器人 太原電銷 濟寧電銷
1994 1引言
電子地圖的打印輸出就是將電子地圖轉(zhuǎn)化為紙質(zhì)地圖。與紙質(zhì)地圖相比,電子地圖最顯著的特征是數(shù)據(jù)的存貯與顯示相分離。由此產(chǎn)生電子地圖的一系列新特點,如動態(tài)性、交互性、多媒體集成性、多尺度性等。但電子地圖具有很強的設(shè)備依賴性,且不如紙質(zhì)地圖直觀[1]。而將電子地圖打印輸出為紙質(zhì)地圖,既利用了電子地圖制作簡單、省時省力的優(yōu)勢,又具有了紙張使用方便的特點,逐漸成為紙質(zhì)地圖生產(chǎn)的一種新方法[2]。
目前,眾多地圖打印輸出軟件的開發(fā)中,ESRI公司的ArcGIS Engine作為一個GIS組件庫,它在實現(xiàn)地圖打印輸出功能中,能夠大大提高開發(fā)效率,而且使用可視化軟件開發(fā)工具開發(fā)出來的應(yīng)用程序具有更好的外觀效果。 2 開發(fā)環(huán)境
ArcGIS Engine是ArcGIS的系列產(chǎn)品之一,是用來構(gòu)建制定應(yīng)用的一個完整的嵌入式的GIS組件庫。利用ArcGIS Engine,開發(fā)者能將ArcGIS功能集成到一些應(yīng)用軟件如Microsoft Word和Excel中,還可以為用戶提供針對GIS解決方案的定制應(yīng)用[3]。
本文實例以Visual Studio.NET為開發(fā)平臺,采用C#可視化編程語言,建立基于ArcGIS Engine組件的地圖打印輸出模塊,主要實現(xiàn)在生成的電子地圖基礎(chǔ)上,對其進(jìn)行圖面整飾,最后實現(xiàn)制圖輸出。
3 AE中用于打印輸出功能的組件
ArcGIS Engine組件環(huán)境下的用于地圖打印輸出的組件有頁面組件,打印組件和紙張組件。
頁面組件對象對應(yīng)著ArcGIS中的版面視圖,控制著應(yīng)用程序的窗口,是一個圖形容器(graphics container),可以存放各種圖形要素,如文字要素,框架要素如地圖框架等。為了實現(xiàn)硬拷貝輸出功能,頁面組件對象會自動創(chuàng)建咬合網(wǎng)格,咬合向?qū)?、?biāo)尺設(shè)置以及頁對象。IPageLayout接口是頁面布局對象所實現(xiàn)的首要接口。使用該接口,可以訪問標(biāo)尺設(shè)置、咬合網(wǎng)格、咬合向?qū)б约绊搶ο?,同時還提供一些方法來實現(xiàn)視圖縮放、改變當(dāng)前地圖等。
打印組件用來實現(xiàn)繪圖儀或打印機這樣的硬拷貝(hardcopy)設(shè)備輸出。有三個打印機對象(EmfPrinter、PsPrinter和ArcPressPrinter)繼承打印機抽象類。每個對象都支持向硬拷貝設(shè)備的打印。但是各自有著不同的方法來達(dá)到這一目的。
選擇哪一個對象來發(fā)送輸出,取決于用戶希望使用的打印種類以及可獲取的打印設(shè)備。所有的打印機對象都實現(xiàn)了IPrinter接口,紙張Paper屬性是根據(jù)應(yīng)用程序所在系統(tǒng)的默認(rèn)打印機初始化的,用戶可以創(chuàng)建自己的紙張對象來使用不同的打印機。PrintToFile屬性使得發(fā)送輸出文件成為可能。DoseDriveSupportPrinter方法允許開發(fā)者測得選定的打印機是否受到當(dāng)前驅(qū)動的支持。使用StartPrinting方法,將返回一個hDC(指向打印機設(shè)備上下文的句柄),這可以被用在IActiveView. Outout方法中以向打印機發(fā)送輸出。然后,可以利用IPrinter.FinishPrinting方法直接把所有信息寫入打印機或繪圖儀內(nèi)存。
紙張組件是地圖輸出中的一個關(guān)鍵組件。該組件負(fù)責(zé)維護(hù)有關(guān)紙張及打印的屬性。應(yīng)用程序啟動時,會根據(jù)系統(tǒng)默認(rèn)的打印機來初始化紙張對象。要是用另外的打印機,開發(fā)者必須定義一個新的紙張對象,并且通過PrinterName 屬性來設(shè)置到打印機或繪圖儀。這樣紙張對象就可以通過IPrinter.Paper屬性來關(guān)聯(lián)到打印機對象。
4 系統(tǒng)的總體設(shè)計及功能實現(xiàn)
4.1總體設(shè)計
與紙質(zhì)地圖相比,電子地圖打印輸出的總體設(shè)計要更為復(fù)雜。在紙質(zhì)地圖的總體設(shè)計中,需要確定內(nèi)容的結(jié)構(gòu)編排、地圖的分幅方案、地圖的尺寸,設(shè)計數(shù)學(xué)基礎(chǔ)、版面、制印工藝等基本內(nèi)容[4]。而在電子地圖的打印設(shè)計中,上述內(nèi)容不僅都有涉及并且還有許多不同,同時還包括可視化交換工具的設(shè)計??傮w設(shè)計的內(nèi)容為圖1所示。
(1)確定地圖的輸出內(nèi)容
電子地圖具有動態(tài)、多尺度、無邊界等特點,地圖的內(nèi)容隨用戶的操作而變化。因此,打印地圖的內(nèi)容就應(yīng)由用戶來確定。從打印范圍上講,可以由用戶指定任意的范圍打印。但從圖面的完整性來講,不具有地圖知識的用戶很可能將打印地圖的范圍設(shè)置得不合理。這樣就需要為用戶提供兩種選擇:完全按照用戶設(shè)置的范圍打印或自適應(yīng)完整的打印范圍。從內(nèi)容上講,電子地圖由于屏幕尺寸及分辨率的影響,無法像紙質(zhì)地圖一樣顯示得非常精細(xì)。因此也需提供兩種選擇:按照所見即所得的方式打印或適應(yīng)打印比例尺的內(nèi)容要求。
(2)確定地圖的數(shù)學(xué)基礎(chǔ)
在紙質(zhì)地圖的生產(chǎn)中,設(shè)計者根據(jù)地圖用途和制圖區(qū)域范圍確定一種投影方式及比例尺。而在電子地圖的打印中,用戶可以在設(shè)計階段自由選擇投影方式和比例尺。因此,必須提供各種投影的正解、反解變換,以及各投影之間的變換[5]。從智能化的角度講,應(yīng)該能夠根據(jù)打印范圍的大小,提供若干種適合該制圖區(qū)域大小的備選投影。由于打印的范圍可以由用戶指定,可能會遇到很多問題,如坐標(biāo)的標(biāo)注,經(jīng)緯網(wǎng)線及方里網(wǎng)線的繪制等,都需要具有一定的智能化和交互性。
(3)地圖整飾
地圖整飾在很大程度上影響了打印地圖的效果。地圖整飾可以分為解釋性整飾和裝飾性整飾兩種類型。其中解釋性整飾的作用是向讀者提供某些必要的信息,提高地圖的可讀性,如圖名、比例尺、圖例和文字說明等,這類整飾的設(shè)計要以便于讀者閱讀為基本依據(jù),兼顧美觀性;裝飾性整飾如圖框主要起到裝飾的作用,因此要注意其藝術(shù)性以及與地圖主題的匹配[6]。
(4)交互工具設(shè)計
交互工具是體現(xiàn)制圖者地圖認(rèn)知結(jié)果和經(jīng)驗、與用戶進(jìn)行交流的窗口。工具的設(shè)計應(yīng)在制圖規(guī)則允許的前提下具有最大程度的靈活性、易用性,界面應(yīng)友好。在功能方面,應(yīng)具有選擇打印區(qū)域、比例尺、投影方式、輸出紙張等基本功能,還應(yīng)具有交互式編輯圖名、比例尺、圖例等圖外整飾的式樣與內(nèi)容的功能。
4.2系統(tǒng)主要功能
在.NET框架下,將ArcGIS Engine中的頁面控件(AxPagaLayoutControl)添加至引用中,并在代碼寫入using ESRI.ArcGIS .PageLayoutControl ,即可調(diào)用頁面控件。以此為基礎(chǔ)實現(xiàn)以下功能。
(1) 地圖顯示基本操作
地圖的基本操作包括圖形的顯示、放大、縮小、全圖顯示,以及圖形平滑漫游。本系統(tǒng)通過頁面控件中LoadMxFile方法實現(xiàn)地圖顯示,調(diào)用ControlCommands中的ControlsMapZoomInToolClass()、ControlsMapZoomOutToolClass()、ControlsMapPanToolClass()
來實現(xiàn)地圖放大、縮小、漫游等操作。
(2) 編輯地圖整飾要素
在程序中,創(chuàng)建了類(CMapSurround)用于生成圖飾要素,其中定義了AddTextToLayout()方法用于向頁面中添加文本標(biāo)題,CreateLegend()方法用于生成圖例,CreateScaleBar()方法用于生成比例尺條,CreateScaleText()方法用于生成比例尺文本。以AddTextToLayout()為例,程序代碼如下:
public void AddTextToLayout(IActieView pActiveView,IGraphicsContainer
pGraphicsContainer,int x,int y)
{
ITextElement pTextElement;
IElement pElement;
pTextElement=new TextElementClass();
pElement=pTextElement as IElement ;
pTextElement.Text = "…";//此處為要添加的文本
pElement.Geometry=pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x,y);
pGraphicsContainer.AddElement( pTextElement as IElement , 0);
pActiveView.PartialRefresh( esriViewDrawPhase.esriViewGraphics, null, null ) ;
}
在主程序中初始化此類,就可調(diào)用這些內(nèi)部的方法來為頁面添加圖飾。系統(tǒng)中地圖整飾的菜單截屏如圖2所示。 在添加圖飾過程中,還要注意圖面的配置要有一定的靈活性,如圖名的位置、圖名字體的大小等;但還要遵循一定的原則,如圖名字的大小不得超過圖邊長度的一半、說明性文字盡量放置在圖的下方等[7]。
(3) 實現(xiàn)地圖打印
完成圖飾的添加后,最后打印頁面視圖。調(diào)用GetPrinter()獲取打印機設(shè)備,利用IPageLayout接口對打印紙張進(jìn)行設(shè)置,包括用紙的大小和橫豎方向。調(diào)用PrintPageLayout函數(shù)實現(xiàn)打印。
5結(jié)語
電子地圖的打印輸出是一個完整的地理信息系統(tǒng)所不可缺少的功能模塊,采用ArcGIS Engine組件在開發(fā)此模塊中具有簡單、快捷、高效、方便等諸多優(yōu)點。它和面向?qū)ο蟮母呒売嬎銠C編程語言結(jié)合的方式使得它既能充分發(fā)揮管理空間地圖數(shù)據(jù)的優(yōu)勢,又能使開發(fā)者快速生成友好的用戶界面,便于實際應(yīng)用。本系統(tǒng)就是在ArcGIS Engine組件的基礎(chǔ)上實現(xiàn)了宗地圖的自動輸出功能。雖然系統(tǒng)在某些方面還不是十分成熟,但實踐表明利用ArcGIS Engine組件的基本功能可以實現(xiàn)較復(fù)雜的地圖打印。

標(biāo)簽:畢節(jié) 楊凌 德陽 柳州 廈門 怒江 新鄉(xiāng) 綏化

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ArcGIS Engine在地圖打印系統(tǒng)開發(fā)中的應(yīng)用研究》,本文關(guān)鍵詞  ArcGIS,Engine,在,地圖,打印,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ArcGIS Engine在地圖打印系統(tǒng)開發(fā)中的應(yīng)用研究》相關(guān)的同類信息!
  • 本頁收集關(guān)于ArcGIS Engine在地圖打印系統(tǒng)開發(fā)中的應(yīng)用研究的相關(guān)信息資訊供網(wǎng)民參考!
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    宜宾县| 益阳市| 高邮市| 浦北县| 宣汉县| 宁蒗| 驻马店市| 香河县| 柳江县| 长垣县| 乌拉特前旗| 奇台县| 彭泽县| 苍梧县| 阜阳市| 金川县| 沽源县| 宜宾县| 琼结县| 齐齐哈尔市| 林芝县| 舟曲县| 浪卡子县| 汶川县| 衡阳市| 丽江市| 视频| 敦化市| 仪陇县| 麻江县| 景洪市| 临泉县| 尼玛县| 无棣县| 沁源县| 双桥区| 新蔡县| 宣城市| 余干县| 安阳县| 凌云县|