AO 入门介绍
第一章 了解ArcObjects
歡迎加入AO(ArcObjects的縮寫)的世界! 本節將把您引進AO的天地,并回答一些相關的問題,如:AO是什么,為什么AO使得開發功能更加強大,如何學習和獲取相關的資源 信息。
1.1AO是什么?
AO是ESRI公司ArcGIS? 家族中應用程序ArcMap?, ArcCatalog? 和 ArcScene?的開發平臺,它是基于Microsoft? COM技術所構建的一系列COM組件集。應該澄清的是到目前為止,AO還不是一個獨立的應用產品, 是依附在你的ArcGIS DeskTop產品中的軟件開發包。也就是說,你購買了ArcGIS Desktop的任何一個產品,不管是ArcView還是ArcInfo,你都有了這套強大的AO組件集,利用AO提供的組件對 象來進行應用開發。
1.2AO的功能
通過AO你可完成以下甚至更多的GIS功能:
?空間數據的顯示、查詢檢索、編輯和分析;
?創建各種專題圖和統計報表;
?高級的制圖和輸出功能;
?空間數據管理和維護;
…………………………
等等。其實是ArcMap、ArcCatalog和ArcScene這三個應用程序都是由AO搭建起來的,因此從理論上講這些應 用程序能完成的任務,通過AO同樣可以完成(但重新搭建一個ArcMap式的應用程序先不考慮其代價,就可靠性和穩定性而言就值 得懷疑,在以后的內容里我會談到這個問題)。我們現在絕大部分時候要做的---就是要利用ESRI提供的這些AO組件來進行積木 式的組裝任務。 AO已經提供了許多底層的基本功能,而你的任務是按照應用需求將這些底層功能組裝集合成一個更強大的COM對象。我們現在知道A O是基于微軟的COM技術來構建的,因此它的開放性和擴展性很強大。這兒的開放性是指在開發環境的選擇上可以有VBA、VB、V C++、DEPHI等多種支持COM標準的開發工具,而擴展性是指AO組件沒有提供的功能,如需要定義一種新的數據格式,你就可 以利用COM技術來寫自己的COM組件,對AO組件庫進行擴展補充。在ESRI的文擋中曾經看過類似‘用AO開發功能是沒有限制 的,這取決于你的想象力’這樣的話,是不是覺得有些很狂妄。喔,不要理解錯啊,AO的確非常強大 ,看看ArcMap給我們展現出來的功能就知道了。由于采用了COM技術,因此你不但可以在AO的基礎上構造自己的COM組件, 而且可以自己來完成一個COM組件來對AO進行補充。至于為什么AO會基于COM技術,就我個人而言,目前和以后GIS的發展會 和主流IT技術融合的越來越緊密,畢竟任何一個軟件產品最終是要拿來用的,所以除了提供專業的GIS功能外,從易用性和擴展性來 說也是極其重要的,而COM技術提供了一個解決之道。是不是有些羅嗦,強調其重要性的理由無非是在開始我們對AO的開發前先需要 您打針興奮劑,雖然功能強大、使用方便的應用程序從來不是簡單的幾行代碼和控件的拖來拖去就可以搞定的,還需要您不斷地學習和掌 握更多的新的東西,但對于一個開發人員而言這些投入是值得的,對于嘗試利用AO做開發的人員也是如此。那我們還不開始嗎?
1.3需要的技術基礎
如何進入AO軟件的領域開發?對于高級的AO程序設計人員我想必須跨越四大技術障礙:
1.面向對象技術思想;
2.COM技術;
3.AO各組件對象的層次組織和相互關系;
4.支持COM的各種開發工具及其環境(如VB、VC、DEPHI等)
真正屬于ESRI自己的東西無非就是這套AO組件庫。對于初次進入AO開發領域的人員來說,我個人覺得(至于COM還有其它暫時 可以先放一邊,照貓畫虎完成許多任務還是沒有問題的了)可以先從ArcGIS Desktop的應用開始,對AO的層次及相關概念有一個了解(如Map、Layer、View、Label、支持的數據格式等 ),否則等看到AO的示例時可能會一下子云里霧里,兩廂印證我覺得最有可能豁然貫通吧。
1.4AO開發工具包
AO開發工具包的安裝可以選擇在安裝ArcGIS Desktop時,也可以任何時候使用安裝光盤下的\ArcGIS\ArcObjects Developer Kit目錄下的Setup.exe文件進行安裝。下面是AO開發包安裝完成后的目錄結構:
Arcobjects Developer Kit
Help --- 包含開發幫助文件:AODev.chm, ArcObjects.chm等
Kits --- 附加的開發者素材諸如投影引擎頭文件,類別ID文件和ESRI 示例命令的源代碼 (在最新的8.2版本中,該代碼位置有所變化)
Object Model Diagrams --- 包括所有的PDF格式對象模型圖
Samples --- 包含所有示例工程文件的源代碼
Utilities --- 包含ESRI 對象瀏覽器等工具
1.5AO開發資源
1.《ArcObjects Developer Help》 ----- 這是AO開發的首選資源,個人覺得一定程度上甚至可以和微軟的MSDN相媲美。不管是AO的基礎COM、AO的對象層次圖都提供 了說明,此外還提供了大量的開發示例。
2.《ArcObjects Online》 ----- 提供了最新的AO組件庫文檔,其中有一個關于AO的技術論壇相信會讓大家有很多意外的收獲;
3.《Exploring ArcObjects》 -----一本很不錯的AO技術文檔,對AO的開發進行了很好的組織,而且有大量的示例,可以隨時復制利用;
4.《Building a Geodatabase》 -----應用都是圍繞數據來展開的,這本書主要是用來設計和創建Geodatabase的,但理解和掌握Geodatabas e的層次和建摸方法,對AO的開發是很好的補充。
5.《Microsoft MSDN》----即使你的AO開發工具不是微軟的,也建議安裝一套完整的MSDN,想多了解和應用COM進行設計開發,MSD N是個寶藏。
第二章 AO的基礎-----COM
組件化程序設計思想在今天應用已經非常普及,那么關于COM都有哪些東西呢? 在本節中我會介紹什么是CLASS,OBJECT,INTERFACE等COM等相關概念。
2.1CLASS AND OBJECT(類和對象)
要介紹COM,就不能不提到面向對象思想,那么讓我們先來看看什么是對象吧?在日常生活中,你我都是一個個對象,有姓名,有身高 、體重等外在的特征,也有各自所具備的工作技能,也需要彼此間進行語言交流,同樣在開發應用和GIS中也有對象的概念存在。
你在窗體上使用了一個控件,這個控件本身有大小、位置、顏色、名稱等一系列稱之為屬性(Properties)的外在表示,而且 也會有CLICK等稱之為事件(Events)的通信動作存在。在AO的世界里,每個東西都是一個對象,有象Map、Form、 Layer這些我們可以看到的對象,也有在表中產生查詢結果集時的游標(Cursor)-這類不可見的對象。那么對象是如何產生 的呢?哦,它是由類(CLASS)實例化產生的,許多AO類對我們來說很熟悉(象Point,Line,Polygon,Lay er,Table,如果你對GIS還不是很陌生的話)。不用太多的廢話,就先實際進入AO來展示下什么是類和對象吧。
Map Class
Properties Methods
MapScale (1:3,800,000) AddLayer (+)
MapUnits (6234233.32,5234234.56) ClearSelection
(很遺憾在這里我不能用圖形來表達上述概念,突然覺得有些滑稽—在寫一個GIS的話題)。
如果你用過ArcMap應用程序并且還有印象的話,你會發現這個MapScale其實就是應用程序中那個文本框的內容,而Add Layer這個方法呢好象就是那個用來增加圖層的“+”的行為。
2.2COM是什么?
(關于COM實在有太多的東西,以下的內容對AO的初始開發者而言,權當是一個了解吧,現在大可不必去深究)。
終于開始COM了,一個很沉重也很值得玩味的東西,我想許多AO的開發者對此都會有不同的感受。COM是Microsoft的C omponent Object Model縮寫,它不僅定義了組件程序之間進行交互的標準,而且也提供了組件程序運行所需要的環境(COM本身要實現一個稱為C OM庫(COM library)的API,它提供諸如客戶對組件的查詢,以及組件的注冊/反注冊等一系列服務,一般來說,COM庫由操作系統加 以實現,我們不必關心其實現的細節,象大家經常看到的ActiveX,DirectX,OLEDB都是基于COM技術的),主要 應用于Microsoft Windows操作系統平臺上。COM通常的發布形式是:以win32動態鏈接庫(DLL)或可執行文件(EXE)的形式發布。
2.3COM的目標和特性
建立在二進制代碼級上的可重用性(通過包容和聚合);
語言無關性,只要其能生成符合COM規范即可;
對使用COM對象的客戶程序而言的進程透明性;
2.4對象、類和接口
對象是COM的基本要素之一,和C++中的對象不同的是其封裝特性是真正意義上的封裝,對于對象使用者(通常稱為客戶)而言是不 可見的,此外,COM對象的可重用性表現在COM對象的包容和聚合,一個對象可以完全使用另一個對象的所有功能,而C++對象的 可重用性表現在c++類的繼承性。
接口是指組件對象的接口,它是包含了一組函數的數據結構,通過這組數據結構,客戶代碼可以調用組件對象的功能,組件對象間的訪問 都是通過接口來進行的。接口設計必須滿足:
1. 必須直接或間接地從IUNKNOWN接口繼承(該接口在AO中是省缺的);
2. 接口必須有唯一的標識符號;接口不變性,一旦分配和公布了IID,接口定義的任何因素都不能改變。
用COM開發意味著使用接口,也可以稱為基于接口的設計模型。對象間的所有通信都是通過它們的接口來進行的,COM接口是抽象的 ,意味著相關的接口沒有實現,和接口相關的代碼來自于一個類實現。如何實現接口對于不同對象是不同的,因此對象只是繼承接口的類 型,而不是它的實現,這稱為類型繼承。功能用接口被抽象地構造,并且用類去真正實現。在COM中類和接口通常被當作‘做什么’和 ‘怎么做’,接口定義一個對象能做什么,類定義它怎么去做。
COM類提供了一個或多個接口相關的代碼,因此功能實體封裝在類中。幾個類可以有同樣的接口,但是它們的實現可能是極不相同的。 通過實現這些接口,COM實現了面向對象的多態性,COM不支持多重繼承概念,然而,這不是一個缺點因為一個類可以實現多個接口 。
2.5COM的其它組成
COM對象的接口可以是雙接口,雙接口不同于普通接口(Custom Interface)之處在于雙接口是從Automation基本接口Idispatch繼承的,而普通接口是從Iunknow n接口直接繼承來的,缺省的接口模型是雙接口模型是雙接口。
2. 入接口和出接口(Inbound interface,Outbound interface)
COM調用既可以是單向的(即客戶程序創建組件對象,然后客戶程序調用對象所提供的功能,在適當時候再把對象釋放掉),通常稱為 入接口。如果一個COM對象支持一個或多個主動與客戶程序進行通信的接口,則這種接口稱為出接口,是因為這些接口并不由對象實現 ,而是由客戶程序實現。類型庫(Type Library)
一個類型庫被作為一個接口定義語言(IDL)文件的二進制版本,是一系列COM對象和接口的集合,并被編譯進一個形如OLB、D LL或OCX這樣的二進制文件中。為了支持一個不依賴于開發語言工具的組件集,關于ArcObjects庫所有相關的數據都被打 包進esricore.olb的類型庫,它就包括了一個所有coclasses的二進制描述,接口,方法和服務器類型。
Microsoft提供了多個COM接口用于類型庫,這兩個接口是ITypeInfo 和ItypeLib。利用標準的COM接口,不同的開發工具和編譯器能夠獲得由一個特定庫支持的coclasses和接口有關信 息。
4. 雙向COM支持 是指有可能既在一種語言中使用COM對象,又可使用這種語言編寫COM對象;
5. 進程內COM、本地COM和遠程COM
COM是一個客戶/服務器體系,服務器(或對象)提供功能,并且客戶程序使用這些功能。如果COM程序和客戶程序在同一進程地址 空間內,則稱之為進程內COM,這通常是以DLL形式實現,而本地COM是指同一計算機上不同進程中的EXE,遠程COM則是指 不同計算機中的DLL或EXE。有不耐煩或現在回過頭看這章而且存有疑問的人嗎?講了那么多COM AND COM,那么我在DEPHI或VB下用AO寫一個DLL,這個DLL到底算什么呢?好,就讓我來用C/S的概念來做一個解釋。如 果你是自己寫的應用程序框架,那么你的應用程序就是客戶端,而調用的DLL其實就是服務器了;如果你在ArcMap中,那么Ar cMap應用程序其實就充當了客戶端的角色發出請求,這個請求通過COM機制傳遞給COM服務器—那個你寫的DLL來完成相應的 功能,而這個服務器外部和內部就是由ESRI AO的接口及類來完成的。
第三章 AO對象的使用
在第二章中我們談到了許多關于COM的概念,象類,對象,接口,方法等,那么一個實際的AO開發中是如何體現這些COM概念的呢 ---既然AO是基于COM的。在本節中,我將使用VB代碼來說明如何使用AO的對象,并對如何閱讀OMD(Object Model Diagram)進行介紹。
3.1AO對象的使用
讓我們直接用AO相關的代碼來開始這段旅程吧,如果你覺得的是的話。:)
Dim pMap as IMap
Set pMap = New Map
PMap.name =”地圖名稱為-Tour”
…………………….
…………………….
Pmap.ClearLayers
Pmap.Clear //ERROR
如何運行這段代碼是下一章的內容,先看看為什么代碼會這么寫吧,里面奧妙不少。
Dim pMap as Imap
我們知道在COM中對對象的訪問是通過接口來完成,因此不能象許多可視化控件那樣,可以直接通過其名稱來調用屬性或執行其方法。 那么這句其實就是定義了一個接口變量(題外注釋:其實準確地講應該是一個指向接口的指針變量才對,好在VB把這一切都給演示了) 。有了這個接口變量還不行,因為接口是定義在對象上的,那么下來的步驟應該是產生一個對象,而對象又是從那里來的呢---類。
于是就有了這樣的代碼Set pMap = New Map。
在這句中不單純只是實例化出一個Map對象,并且將上句的pMap接口變量做為了該對象的缺省接口。OK,現在我們就可以通過這 個接口來對地圖名進行修改,或者調用ClearLayer方法來刪除掉該地圖中的所有圖層了。再看看增加最后一句的執行情況—會 出錯,至于為什么,原因很簡單,不同的接口中的方法或屬性只能通過其接口來訪問,而Clear方法屬于Map類的另外一個接口I activeView所有。可以通過查詢接口(Query Interface)來’切換‘到IactiveView上。代碼如下
Dim mView as IactiveView
set mview=pmap
mview.clear
3.2OMD的作用
OMD(對象模型圖)是基于OMT(Object Modeling Technique)的表示方法,先來看看OMD能幫我們做些什么?
1. 該類支持哪些接口;
2. 完成任務需要哪些對象;
3. 如何使用該類的對象;
4. 是否可以直接實例化類;
5. 接口有哪些方法和屬性;
6. 是否有其它類也支持該接口;
7. 對象間的關系
3.3OMD符號解釋
在OMD中有三類class,分別是抽象類(AbstractClass)、組件類(CoClass)和普通類(Class)。 抽象類的主要目的是為它的子類定義公共接口,一個抽象類將把它的部分或全部實現延遲到子類中,因此,一個抽象類不能被實例化。一 個組件類對象可以被直接創建,普通類對象雖然不能直接創建,但它可以可以作為其它類的一個屬性或者從其它類的實例化來創建。AO 中的Dataset或Geometry classes是抽象類的示例,一個Geometry類型對象不能被創建,但是一個Polyline可以被創建。這個Polyl ine對象實際上在類的基礎上實現了Geometry中定義的接口,因此在基類對象中被定義的接口可以從coclass來訪問。
在OMD中的關系類型主要有類型繼承(Type inheritance)、創建(Instantiation)、組成(Composition)以及關聯(Associati ons)等。類型繼承我們在COM一章過提到過,實際上就是繼承完全繼承了超類的接口,這點可以利用AO對象瀏覽器工具清楚的看 到,而組成關系指的是對象間的主次關系,也就是說主體的生命存在與否決定著次體的存在與否。
3.4AO的組織劃分
整個AO的OMD看起來密密麻麻,讓人有些頭暈眼花的感覺。還好,ESRI對整個AO進行了結構的組織分割,按照不同的應用領域 可以找到相應的PDF格式的OMD。從AO開發幫助中我們可以發現劃分為以下的幾個子系統:
1. 3D Analyst Extension ---用于3D可視化和表面建模的組件對象;
2. Application Framework ---讓開發者在ArcMap和ArcCatalong中通過程序來定制用戶界面;
3. ArcCatalog --- 能夠讓開發者擴展數據對象模型并集成定制對象和視圖到ArcCatalog應用框架中;.
4. ArcMap --- 提供了ArcMap應用程序的核心功能,用于操作和顯示地圖文檔;
5. ArcMap Editor--- 包括了對象編輯器擴展組件對象,要做編輯開發來這吧;
6. Display --- GIS的一個重要應用就是數據表現,對國內的許多最終用戶更是熱衷于此,利用這里包含的對象可以完成諸如地圖符號顯示、圖形編輯 反饋軌跡、坐標轉換和屏幕控制等功能;
7. Geocoding --- 主要用于創建和管理地理編碼服務等;
8. Geodatabase--- AO開發中一個不可或缺,畢竟GIS的應用都是圍繞數據展開的,所以有關的GIS數據創建、加載、管理和存儲等都是通過這里的對 象進行的;
9. Geometry--- 不管是要素還是圖形,涉及到空間信息的獲取和應用來這兒找吧;
10. IMS ---提供了連接到ArcIMS服務器并訪問ArcIMS圖象和要素服務的功能;
11. NetWork--- 提供了網絡創建、管理和完成分析操作等功能,打算定制和開發特定網絡應用可以利用NetWork對象;
12. OutPut ---有入就有出,如果想把制作好的地圖輸出怎么辦,通過這里提供的對象來完成吧;
13. Raster --- 用于訪問和管理柵格數據的的AO對象;
14. Spatial Reference--- 用于完成空間參考的設置;
15.StreetMap USA Extension---這個和國內的用戶關系不大。
誠然,在AO的開發中對象的層次和相互關系是極其重要的,稍有撼缺的是OMD中的對象層次組織看起來有些紛亂,個人覺得《Exp loring ArcObjects》里的對象模型圖更適合入門使用-----它將一些常用和重要的對象抽取出來并以上下層次結構來表示。
第四章 AO開發
絮語閑聊,權當消遣- 最近抽時間整理一些以前寫的程序,也開始了解MO(ESRI MapObject)的應用,有些感受一起吐出。在GIS應用中最大的工作就是數據的采集整理了,雖然你可以采用MO、MAPX 等一些地圖控件(我曾經還看到過一個南非人用DEPHI寫的地圖控件,也是很有些特點的),如果你夠超人,甚至可以自己去做一個 地圖控件,來完成一個實用性也很個性化的系統出來。可是它終究只是一個應用系統而已。 ???你應該知道我要講什么的了吧。所有的應用都是基于一定的數據結構,你可以在自己的應用開發中定義數據模型,但是數據的來源 呢。不是CAD,就是COVERAGE,SHAPE,(標準嘛)你可以針對一兩種數據格式進行轉換,只是現實中的數據類型是多樣 的,總不能都去寫吧,況且你的數據格式能否得到認可呢。再想想看你要做多少工作---那是一個GIS平臺才能完成的事情。這就是 許多情形下我們為什么沒法完全用底層或地圖控件去寫一個完整GIS系統主要的原因吧。
扯遠了。。。在本章中,我會實現一個特定功能的DLL,用來說明AO開發的幾種模式,AO工具包的使用,如何應用寫好的組件。在 ArcObjects Developer Help中有許多完整和詳盡的示例代碼,這兒主要想就方法做一個簡要的說明。
4.1選擇一個開發模式
AO可選的的開發方式可以分為兩種,一種是在ArcMap應用框架基礎上進行定制開發,另一種是脫離ArcMap應用框架去開發 獨立的應用程序。通常情況下,我們都是在ArcMap框架下進行定制開發。開發環境可以選擇ArcMap本身自帶的VBA,也可 以選擇VB、VC、DEPHI(AO 8.2以上的版本開始支持C#)。
4.2選擇一個開發工具
作為首選的是VB語言,這樣不管是在VBA,還是編寫COM組件,你都有最充足的資源可以使用(AO開發文檔中最多的SAMPL E就是VB代碼了)。第二種是VC(我更愿意將VC做為一個強有力的后備工具),第三種在我看來應該是一種無奈之舉了,即用DE PHI(有一堆人該貶我了:)一直對DEPHI是仰慕有加心儀已久的,只是在AO中有關DEPHI的例子太少了,這對快速應用開 發來說是致命的)。
4.3最簡單的“Hello,world”程序
討論開發工具多少有點離題,現在讓我們來轉回到一個出名的小應用程序—“Hello,world”,許多語言都是以此做為第一個 應用的,我也就不例外了。
打開ArcMap應用程序,選擇TOOLS菜單下的MACROS子菜單,打開其中的VBA環境。選擇Project工程下的Ar cMap Object ,雙擊打開其中的ThisDocument對象,在右邊的編輯環境中選擇對象列表中的MxDocument對象,在任務列表中選 擇OpenDocumen,然后鍵入以下的代碼:
//Private Function MxDocument_OpenDocument() As Boolean
Dim pmap As IMap
Set pmap = New Map
pmap.Name = "Hello,world"
MsgBox pmap.Name
//End Function
然后按CTRL+S保存后退出ArcMap。當你再次打開你所保存的工程文檔時看到了什么?呵呵呵,不知道ESRI的設計人員看 到這樣的一個SAMPLE會不會暈掉。
有人說了,你這一堆VB代碼對我來說我搞不懂啊,我熟悉的是VC,總不能讓我先去學VB再來做AO開發吧。OK,沒關系,下面我 就以這個“Hello,world”來寫一個組件并在ArcMap中來使用。
1. 啟動VC,使用ATL COM AppWizard創建一個DLL工程;
2. 在INSERT菜單下選擇NEW ATL OBJECT來增加一個ATL COM對象,
3. 給這個COM對象就起個“world”的名字吧,選擇Custom接口類型(至于為什么不選擇DUAL,你可以琢磨下)
4. 在工作空間上選擇Cworld類,并右鍵選擇Implement Interface,在類型庫中引入ESRI OBJECT Library,選擇你要實現的接口(這兒我們選擇Icommand)
5. 增加一個全局變量(IApplicationPtr m_ipApp;)來引用到一個應用程序。注意到沒有,這兒的接口變量定義和VB的有什么不同,除了本身的語法。就是接口多了‘ Ptr’。因此,在VC中如何使用AO的對象你現在應該猜到一些了吧。
6. 下面的工作就是實現接口了。看看Iworld接口中都有哪些東西,哦,這個OnClick()應該是我們想要做些事情的地方了。
// STDMETHODIMP CZoomIn::OnClick(){
IDocumentPtr ipDoc;
m_ipApp->get_Document(&ipDoc);
IMxDocumentPtr ipMxDoc(ipDoc);
IMapPtr ipmap;
ipMxDoc->get_FocusMap(&ipmap)
ipmap->put_Name(_bstr_t("Hello,world"));
…………
::MessageBox(NULL,_T("Hello World!"),_T("Wellcom AO"), MB_OK);
return S_OK;
//}
7.編譯連接工程;
8.在 ArcMap中注冊后就可以將該按鈕直接拖放到ArcMap中來使用了。(當你點擊時,會彈出當前地圖被修改后的名稱----“ Hello,world”。
4.4AO程序實現的一般過程
不管是用VB還是VC或是其它,要做的第一步就是在集成環境因入AO對象庫(Esricore.olb),剩下的工作在接口中實 現你要做的事情。關于如何進入VB和VC開發的完整代碼及說明,請參閱ArcObject Developer Help。
第五章 AO高級通用組件
可能是有感于獨立AO應用程序開發群的迅速擴大,ESRI在其最新的ArcGIS8.2版本中不但繼續提供對MapContro l控件的開發支持,而且新增了一個PageLayoutControl控件,這對于有制圖應用的開發者來說無疑帶來了福音。許多 時候可能會對組件和控件有些糊涂,其實Active X并不能代表整個COM,它只是COM對象的封裝技術,由于COM對象使用的復雜性,因此才會創建框架(如Active X控件)來簡化它。所以這兩個控件也可稱為AO高級通用組件,它由AO基礎組件構造而成,面向通用功能,簡化了用戶開發過程,組 件之間的協同控制消息都被封裝起來。這級組件經過封裝后,使二次開發更為簡單。如一個簡單的AO應用系統,若用基礎AO組件對象 開發,需要編寫不少的代碼,而利用高級通用組件,只需幾句代碼就夠了。
5.1MapControl控件
MapControl控件提供了類似ArcMap中的數據視圖(Data View)的窗口,通過它你可完成以下甚至更多功能:
*?顯示圖層地圖。
*?放大,縮小,漫游。
*?生成圖形元素,如點,線,圓,多邊形。
*?說明注記
*?識別地圖上被選中的元素,進行空間或屬性查詢。
*?標注地圖元素。
總之在ArcMap中能能夠完成的大部分任務,通過MapControl控件也可以完成。通過設置MapControl General, Layers, Map 屬性,你甚至不需要寫一行代碼可以獲得一些GIS功能。關于MapControl控件有許多完整的應用示例,存放在\\ArcObjects Developer Kit\Samples\Controls目錄下。
5.2PageLayout控件
PageLayout控件提供了類似ArcMap中的版面視圖的窗口,它有以下的屬性、方法和事件:
*?管理控件的外觀設置
*? 管理控件的顯示屬性
*?管理頁面屬性
*? 在控件中增加和查找元素
*? 加載地圖文檔到控件
*?可以直接從資源管理器和ArcCatalog中拖放數據到控件中
*?打印頁面設計.
至于它的功能嘛,ArcMap的Layout 視圖能完成的工作,使用PageLayoutControl同樣可以完成,象增加和設置圖例、打印輸出等許多功能。關于Page Layout控件有許多完整的應用示例,也存放在\\ArcObjects Developer Kit\Samples\Controls目錄下。
5.3MapControl和MapObject的關系
確切地講,MapControl和MapObject控件沒有直接的聯系。首先,MapControl控件是AO的一部分,至少 到目前為止它還不是一個獨立的產品,而MapObject是ESRI的一個獨立的低端應用產品。第二,MapControl比M apObject功能要強大許多和完善許多,MapObject產品的定位就是提供一些基本的地圖功能,高級的功能這得完全靠開 發者自己去實現,而依托強大的AO組件庫MapControl可以實現許多高級的GIS分析及應用。
加油,哥們,現在開始!
轉載于:https://www.cnblogs.com/zhmore/archive/2008/01/31/1059929.html
總結
- 上一篇: 收藏几个按钮
- 下一篇: 关于MOSS SDK的Web Conte