ArcGIS Engine在地圖打印系統開發中的應用研究
摘要: 利用ArcGIS Engine組件開發地圖打印系統。在介紹ArcGIS Engine了中用于地圖打印功能的組件基礎上,闡述了該系統的總體設計方案和主要功能實現,基本達到制圖輸出的目的。這種基于ArcGIS Engine的開發方法,方便快捷且能實現較好的打印效果,廣泛用于地圖打印領域中。
關鍵詞: ArcGIS Engine;C#;地圖打印
Research on ArcGIS Engine Application in Map Printing
Kou Jingxing1 Wang QingShan1 Zhang Lichao1 Yin Xiaohui1,2 Wang HanYing1,3
(1 Institute of Surveying and Mapping,Information Engineering University ,66 Longhai Road, Zhengzhou 450052,China)
ABSTRACT: This paper is to empolder the map printing system based on ArcGIS Engine.After presentating the map printing’s groupware,this expounds the whole design and the main function of the system, achieves the purpose of cartography’s output.
Keywords: ArcGIS Engine; C#; Map Printing
About the first author:Kou Jingxing, postgraduate, majors in GIS.
1引言
電子地圖的打印輸出就是將電子地圖轉化為紙質地圖。與紙質地圖相比,電子地圖最顯著的特征是數據的存貯與顯示相分離。由此產生電子地圖的一系列新特點,如動態性、交互性、多媒體集成性、多尺度性等。但電子地圖具有很強的設備依賴性,且不如紙質地圖直觀[1]。而將電子地圖打印輸出為紙質地圖,既利用了電子地圖制作簡單、省時省力的優勢,又具有了紙張使用方便的特點,逐漸成為紙質地圖生產的一種新方法[2]。
目前,眾多地圖打印輸出軟件的開發中,ESRI公司的ArcGIS Engine作為一個GIS組件庫,它在實現地圖打印輸出功能中,能夠大大提高開發效率,而且使用可視化軟件開發工具開發出來的應用程序具有更好的外觀效果。
2 開發環境
ArcGIS Engine是ArcGIS的系列產品之一,是用來構建制定應用的一個完整的嵌入式的GIS組件庫。利用ArcGIS Engine,開發者能將ArcGIS功能集成到一些應用軟件如Microsoft Word和Excel中,還可以為用戶提供針對GIS解決方案的定制應用[3]。
本文實例以Visual Studio.NET為開發平臺,采用C#可視化編程語言,建立基于ArcGIS Engine組件的地圖打印輸出模塊,主要實現在生成的電子地圖基礎上,對其進行圖面整飾,最后實現制圖輸出。
3 AE中用于打印輸出功能的組件
ArcGIS Engine組件環境下的用于地圖打印輸出的組件有頁面組件,打印組件和紙張組件。
頁面組件對象對應著ArcGIS中的版面視圖,控制著應用程序的窗口,是一個圖形容器(graphics container),可以存放各種圖形要素,如文字要素,框架要素如地圖框架等。為了實現硬拷貝輸出功能,頁面組件對象會自動創建咬合網格,咬合向導、標尺設置以及頁對象。IPageLayout接口是頁面布局對象所實現的首要接口。使用該接口,可以訪問標尺設置、咬合網格、咬合向導以及頁對象,同時還提供一些方法來實現視圖縮放、改變當前地圖等。
打印組件用來實現繪圖儀或打印機這樣的硬拷貝(hardcopy)設備輸出。有三個打印機對象(EmfPrinter、PsPrinter和ArcPressPrinter)繼承打印機抽象類。每個對象都支持向硬拷貝設備的打印。但是各自有著不同的方法來達到這一目的。
選擇哪一個對象來發送輸出,取決于用戶希望使用的打印種類以及可獲取的打印設備。所有的打印機對象都實現了IPrinter接口,紙張Paper屬性是根據應用程序所在系統的默認打印機初始化的,用戶可以創建自己的紙張對象來使用不同的打印機。PrintToFile屬性使得發送輸出文件成為可能。DoseDriveSupportPrinter方法允許開發者測得選定的打印機是否受到當前驅動的支持。使用StartPrinting方法,將返回一個hDC(指向打印機設備上下文的句柄),這可以被用在IActiveView. Outout方法中以向打印機發送輸出。然后,可以利用IPrinter.FinishPrinting方法直接把所有信息寫入打印機或繪圖儀內存。
紙張組件是地圖輸出中的一個關鍵組件。該組件負責維護有關紙張及打印的屬性。應用程序啟動時,會根據系統默認的打印機來初始化紙張對象。要是用另外的打印機,開發者必須定義一個新的紙張對象,并且通過PrinterName 屬性來設置到打印機或繪圖儀。這樣紙張對象就可以通過IPrinter.Paper屬性來關聯到打印機對象。
4 系統的總體設計及功能實現
4.1總體設計
與紙質地圖相比,電子地圖打印輸出的總體設計要更為復雜。在紙質地圖的總體設計中,需要確定內容的結構編排、地圖的分幅方案、地圖的尺寸,設計數學基礎、版面、制印工藝等基本內容[4]。而在電子地圖的打印設計中,上述內容不僅都有涉及并且還有許多不同,同時還包括可視化交換工具的設計。總體設計的內容為圖1所示。
(1)確定地圖的輸出內容
電子地圖具有動態、多尺度、無邊界等特點,地圖的內容隨用戶的操作而變化。因此,打印地圖的內容就應由用戶來確定。從打印范圍上講,可以由用戶指定任意的范圍打印。但從圖面的完整性來講,不具有地圖知識的用戶很可能將打印地圖的范圍設置得不合理。這樣就需要為用戶提供兩種選擇:完全按照用戶設置的范圍打印或自適應完整的打印范圍。從內容上講,電子地圖由于屏幕尺寸及分辨率的影響,無法像紙質地圖一樣顯示得非常精細。因此也需提供兩種選擇:按照所見即所得的方式打印或適應打印比例尺的內容要求。
(2)確定地圖的數學基礎
在紙質地圖的生產中,設計者根據地圖用途和制圖區域范圍確定一種投影方式及比例尺。而在電子地圖的打印中,用戶可以在設計階段自由選擇投影方式和比例尺。因此,必須提供各種投影的正解、反解變換,以及各投影之間的變換[5]。從智能化的角度講,應該能夠根據打印范圍的大小,提供若干種適合該制圖區域大小的備選投影。由于打印的范圍可以由用戶指定,可能會遇到很多問題,如坐標的標注,經緯網線及方里網線的繪制等,都需要具有一定的智能化和交互性。
(3)地圖整飾
地圖整飾在很大程度上影響了打印地圖的效果。地圖整飾可以分為解釋性整飾和裝飾性整飾兩種類型。其中解釋性整飾的作用是向讀者提供某些必要的信息,提高地圖的可讀性,如圖名、比例尺、圖例和文字說明等,這類整飾的設計要以便于讀者閱讀為基本依據,兼顧美觀性;裝飾性整飾如圖框主要起到裝飾的作用,因此要注意其藝術性以及與地圖主題的匹配[6]。
(4)交互工具設計
交互工具是體現制圖者地圖認知結果和經驗、與用戶進行交流的窗口。工具的設計應在制圖規則允許的前提下具有最大程度的靈活性、易用性,界面應友好。在功能方面,應具有選擇打印區域、比例尺、投影方式、輸出紙張等基本功能,還應具有交互式編輯圖名、比例尺、圖例等圖外整飾的式樣與內容的功能。
4.2系統主要功能
在.NET框架下,將ArcGIS Engine中的頁面控件(AxPagaLayoutControl)添加至引用中,并在代碼寫入using ESRI.ArcGIS .PageLayoutControl ,即可調用頁面控件。以此為基礎實現以下功能。
(1) 地圖顯示基本操作
地圖的基本操作包括圖形的顯示、放大、縮小、全圖顯示,以及圖形平滑漫游。本系統通過頁面控件中LoadMxFile方法實現地圖顯示,調用ControlCommands中的ControlsMapZoomInToolClass()、ControlsMapZoomOutToolClass()、ControlsMapPanToolClass()
來實現地圖放大、縮小、漫游等操作。
(2) 編輯地圖整飾要素
在程序中,創建了類(CMapSurround)用于生成圖飾要素,其中定義了AddTextToLayout()方法用于向頁面中添加文本標題,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 ) ;
}
在主程序中初始化此類,就可調用這些內部的方法來為頁面添加圖飾。系統中地圖整飾的菜單截屏如圖2所示。
在添加圖飾過程中,還要注意圖面的配置要有一定的靈活性,如圖名的位置、圖名字體的大小等;但還要遵循一定的原則,如圖名字的大小不得超過圖邊長度的一半、說明性文字盡量放置在圖的下方等[7]。
(3) 實現地圖打印
完成圖飾的添加后,最后打印頁面視圖。調用GetPrinter()獲取打印機設備,利用IPageLayout接口對打印紙張進行設置,包括用紙的大小和橫豎方向。調用PrintPageLayout函數實現打印。
5結語
電子地圖的打印輸出是一個完整的地理信息系統所不可缺少的功能模塊,采用ArcGIS Engine組件在開發此模塊中具有簡單、快捷、高效、方便等諸多優點。它和面向對象的高級計算機編程語言結合的方式使得它既能充分發揮管理空間地圖數據的優勢,又能使開發者快速生成友好的用戶界面,便于實際應用。本系統就是在ArcGIS Engine組件的基礎上實現了宗地圖的自動輸出功能。雖然系統在某些方面還不是十分成熟,但實踐表明利用ArcGIS Engine組件的基本功能可以實現較復雜的地圖打印。
聲明①:文章部分內容來源互聯網,如有侵權請聯系刪除,郵箱 cehui8@qq.com
聲明②:中測網登載此文出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其描述,文章內容僅供參考。
加群提示:我們創建了全國32個省份的地方測繪群,旨在打造本地測繪同行交流圈,有需要請聯系管理員測小量(微信 cexiaoliang)進群,一人最多只能進入一個省份群,中介人員勿擾