第十一章 GIS組件開發_第1頁
第十一章 GIS組件開發_第2頁
第十一章 GIS組件開發_第3頁
第十一章 GIS組件開發_第4頁
第十一章 GIS組件開發_第5頁
已閱讀5頁,還剩119頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第十一章第十一章 GIS組件開發組件開發第一節第一節 ComGIS的基本概念的基本概念什么是組件式什么是組件式GIS? 組件式GIS,是將復雜的GIS功能按照對象、功能、應用等層次分解為可以互操作和自我管理的組件,這些組件由一種特定的平臺或語言開發且能夠在其它的平臺或語言中重復使用。 簡單地說,組件式組件式GIS就是采用了面向對象技術就是采用了面向對象技術和組件式軟件的和組件式軟件的GIS系統系統(包括基礎平臺和應用系統)宋關福等,1999。第一節第一節 ComGIS的基本概念的基本概念什么是組件式什么是組件式GIS? 組件式GIS分為COM組件和CORBA組件兩種,分別由Microsoft和

2、OMG開發。COM是公共對象模型(Common Object Model)的英文縮寫,微軟官方稱之為組件對象模型(Component Object Model) ,它是OLE(Object Linking & Embedding)和ActiveX共同的基礎。基于分布式環境下的COM被稱作DCOM(Distributed COM),它實現了COM對象與遠程計算機上的另一個對象之間直接進行交互。 第一節第一節 ComGIS的基本概念的基本概念什么是組件式什么是組件式GIS? CORBA是公共對象請求代理體系結構(Common Object Request Broker Architectu

3、re)的英文縮寫,是由對象管理工作組(OMG)開發的一個組件軟件標準。OMG是由成千上百個公司組成的組織,他們致力于構建分布式對象計算的標準體系結構。CORBA基于對象管理體系結構,為廠商提供一個標準框架,使他們使用不同的語言、操作系統和硬件開發出來的應用系統,仍然具有可移植性和互操作性。 第一節第一節 ComGIS的基本概念的基本概念什么是什么是ComGIS? ComGIS是基于COM組件構建的組件式GIS。COM不是一種面向對象的語言,而是一種二進制標準,它建立的是一個軟件模塊與另一個軟件模塊之間的鏈接,當這種鏈接建立之后,模塊之間就可以通過被稱之為“接口”的機制來進行通信。COM標準增加

4、了保障系統和組件完整的安全機制,擴展到分布式環境的DCOM則支持分布式計算、交互操作和有限的移植。第一節第一節 ComGIS的基本概念的基本概念什么是什么是ComGIS? OLE是基于COM的可以使軟件組件進行即插即用互操作的一種技術,其中使用了OCX控件。 ActiveX是一套基于COM的可以使軟件組件在網絡環境中進行互操作而不管該組件是用何種語言創建的技術集。作為針對Internet應用開發的技術,ActiveX被廣泛應用于WEB服務器以及客戶端的各個方面。同時,ActiveX技術也被用于方便地創建普通的桌面應用程序。此外,ActiveX一般具有界面。ActiveX 控件是ActiveX技

5、術中使用的一種可編程、可重用的基于COM的對象。第一節第一節 ComGIS的基本概念的基本概念什么是什么是ComGIS? ComGIS的基本思想是把GIS的各大功能模塊劃分為幾個組件,每個組件完成不同的功能。各個GIS組件之間,以及GIS組件與其它非GIS組件之間,都可以方便地通過可視化的軟件開發工具集成起來,形成最終的GIS基礎平臺以及應用系統。組件如同一堆各式各樣的積木,它們分別實現不同的功能(包括GIS和非GIS功能),根據需要把實現各種功能的 “積木”搭建起來,就構成應用系統。第一節第一節 ComGIS的基本概念的基本概念為什么要使用為什么要使用ComGIS? 傳統GIS雖然在功能上已

6、經比較成熟,但是它們多是屬于獨立封閉的系統。同時,由于GIS軟件變得日益龐大,不僅用戶難以掌握,而且費用昂貴,阻礙了GIS的普及和應用。ComGIS的出現為傳統GIS面臨的多種問題提供了全新的解決思路,已經成為當今軟件技術的潮流之一比爾.蓋茨,1997,為了適應這種技術潮流,“GIS軟件象其它軟件一樣,已經或正在發生著革命性的變化,即由過去廠家提供了全部系統或者具有二次開發功能的軟件,過渡到提供組件由用戶自己再開發的方向上來”徐冠華, 1997。第二節第二節 ComGIS的特點的特點小巧靈活、價格便宜小巧靈活、價格便宜。在組件模型下,各組件都集中地實現與自己最緊密相關的系統功能,組件化的GIS

7、平臺集中提供空間數據管理能力并且能以靈活的方式與數據庫系統連接。在保證功能的前提下,系統表現得小巧靈活,而其價格僅是傳統GIS開發工具的十分之一甚至更少。這樣,用戶便能以較好的性能價格比獲得或開發GIS應用系統;第二節第二節 ComGIS的特點的特點高效無縫的系統集成高效無縫的系統集成。由于組件生產建立在嚴格的標準之上,因此,ComGIS可以嵌入通用的開發環境(如VB、VC、Delphi、PowerBuilder、Notes、Foxpro、Access等)中實現GIS功能,專業模型則可以使用這些通用開發環境來實現,也可以插入其它的專業性模型分析控件,這與傳統GIS專門性開發環境相比,是一種質的

8、飛躍;專業模型ComGIS控件其他控件GIS應用集成系統Visual Basic 等可視集成開發環境第二節第二節 ComGIS的特點的特點強大的強大的GIS功能功能。新的GIS組件都是基于32位系統平臺的,采用InProc直接調用形式,所以無論是管理大數據的能力還是處理速度方面均不比傳統GIS軟件遜色。小小的GIS組件完全能提供拼接、裁剪、疊合、緩沖區等空間處理能力和豐富的空間查詢與分析能力;第二節第二節 ComGIS的特點的特點大眾化大眾化。組件式技術已經成為業界標準,用戶可以象使用其它ActiveX控件一樣使用ComGIS組件,使非專業的普通用戶也能夠開發和集成GIS應用系統,推動了GIS

9、大眾化進程。ComGIS 的出現使GIS不僅是專家們的專業分析工具,同時也成為普通用戶對地理相關數據進行管理的的可視化工具。第二節第二節 ComGIS的特點的特點開發簡捷開發簡捷。ComGIS不需要額外的GIS二次開發語言,只需按照Microsoft的ActiveX控件標準開發接口實現GIS的基本功能函數,這不僅有利于減輕GIS軟件開發者的負擔,而且增強了GIS軟件的可擴展性。GIS應用開發人員只需熟悉基于Windows平臺的通用集成開發環境,以及組件式GIS各個控件的屬性、方法和事件,就可以像管理數據庫表一樣熟練地管理地圖等空間數據,完成應用系統的開發和集成,無須對開發人員進行特殊的培訓。C

10、omGIS與用戶的交互與用戶的交互 傳統GIS軟件與用戶或者二次開發者之間的交互一般通過菜單或工具條按鈕、命令以及二次開發語言進行,ComGIS與用戶和客戶程序之間則主要通過屬性、方法和事件交互。ComGIS 控件(ActiveX 服務器)集成開發環境(ActiveX 容器)與其他COM組件方法事件屬性第三節第三節 ComGIS開發方法開發方法ComGIS開發平臺的結構開發平臺的結構 ComGIS開發平臺通常可設計為基礎組件、高級通用組件和行業性組件三級結構。 基礎組件處于平臺最低層,是整個系統的基礎,主要面向空間數據管理,提供基本的交互過程,并能以靈活的方式與數據庫系統連接。第三節第三節 C

11、omGIS開發方法開發方法ComGIS開發平臺的結構開發平臺的結構 高級通用組件由基礎組件(如顯示工具組件、選擇工具組件、編輯工具組件、屬性瀏覽器組件等)構造而成,面向通用功能,簡化用戶開發過程,它們之間的協同控制消息都被封裝起來,使二次開發更為簡單(如一個編輯查詢系統,若用基礎平臺開發,需要編寫大量的代碼,而利用高級通用組件,只需幾句程序就夠了)。第三節第三節 ComGIS開發方法開發方法ComGIS開發平臺的結構開發平臺的結構 行業性組件抽象出行業應用的特定算法并固化到組件中,進一步加速開發過程。以GPS監控為例。對于GPS應用,除了需要地圖顯示、信息查詢等一般的GIS功能外,還需要特定的

12、應用功能(如動態目標顯示、目標鎖定、軌跡顯示等)。這些GPS行業性應用功能組件被封裝起來后,開發者的工作就可簡化為設置顯示目標的圖例、軌跡顯示的顏色、鎖定的目標以及調用、接受數據的方法等。第三節第三節 ComGIS開發方法開發方法ComGIS的實現形式的實現形式 目前,ComGIS主要有兩種實現形式。 一種形式是由可以實現制圖與一般GIS功能的ActiveX控件集構成的ComGIS,這些控件既可以通過屬性、事件、方法等接口與應用程序進行交互,也可以在可視化開發環境中集成構成應用系統。國內外具有代表性的有:ESRI公司出品的MapObject、MapInfo公司推出的MapX、武漢吉奧公司研發的

13、GeoMap等。第三節第三節 ComGIS開發方法開發方法ComGIS的實現形式的實現形式 另一種形式的ComGIS是基于Microsoft COM技術構建一系列COM組件集,用戶可以利用這些組件開發各種GIS功能并在此基礎上構建GIS應用系統。這種開發模式更為底層,開發也較為復雜,功能更為強大,以ESRI公司的ArcObjects(簡稱AO)組件或ArcEngine (簡稱AE)為典型。 以上兩種開發實現形式的軟件都具有地圖顯示、圖層控制、數據查詢、地圖符號化、專題地圖等基本功能。第三節第三節 ComGIS開發方法開發方法基于基于ActiveX控件的控件的ComGIS開發方法開發方法 以Ac

14、tiveX控件形式設計ComGIS,需要根據功能劃分為多個控件。劃分控件需要根據不同的數據結構和系統模型進行具體分析,要考慮以下幾個方面的問題:(1) 控件間差別最大、控件內差別最小;(2) 純設計用模塊與將隨集成系統發布的模塊分開(例如地圖符號編輯、線型編輯器應與空間查詢分析等模塊分開);(3) 相同顯示窗口的模塊盡可能設計在同一個控件里;(4) 處理相同數據文件的模塊盡可能設計在同一個控件里;(5) 剔除空間查詢分析控件中不必要的內容,減少Internet下載的數據量。第三節第三節 ComGIS開發方法開發方法基于基于ActiveX控件的控件的ComGIS開發方法開發方法 考慮到以上因素,

15、 基于ActiveX控件的ComGIS可以劃分為數據采集與編輯控件、圖像處理控件、三維控件、數據轉換控件、地圖符號編輯/線性編輯控件、空間查詢分析控件等。其中一些無須進行二次開發的模塊不一定以組件方式提供,比如數據采集、數據轉換、符號編輯/線型編輯等模塊可以用獨立運行程序方式提供,數據轉換模塊還可以編譯成動態連接庫。第三節第三節 ComGIS開發方法開發方法基于基于ActiveX控件的控件的ComGIS開發方法開發方法 基于ActiveX控件的ComGIS開發還要注意幾個方面的問題:(1)代碼優化和算法高效。盡管COM技術的二進制通信效率很高,但與獨立運行程序比較運行速度上仍有差距,采用高效的

16、算法并精心優化代碼可以使軟件整體效率有較大改善;(2)數據結構緊湊、簡練。在能夠充分表達地理信息并能有效進行各種處理、分析的前提下,軟件數據結構要盡可能緊湊,這不僅可以加快數據存取速度,同時也為適應Internet傳遞的需要;(3)數據引擎通用。除提供與各種GIS數據文件格式的數據轉換程序外,ComGIS被設計為可以直接訪問多種數據格式,可以提高數據共享方面的能力(例如Intergraph的GeoMedia可以直接訪問ArcView、MGE等著名軟件的數據格式)。第三節第三節 ComGIS開發方法開發方法基于基于AO/AE的的ComGIS開發方法開發方法 在VB開發環境中,首先通過Refere

17、nces將ESRI Object Library(esriCore.olb庫)引用進來。然后根據應用,選擇或查找相關的AO/AE組件類及其接口和要使用的方法與屬性,編寫實現代碼。如在MapControl控件中添加一個空的Feature 圖層,其操作為:Dim pLayer As IFeatureLayer/定義接口變量Set pLayer = New FeatureLayer/實例化變量mapControl1.ActiveView.FocusMap.AddLayer pLayer/添加圖層第三節第三節 ComGIS開發方法開發方法基于基于AO/AE的的ComGIS開發方法開發方法 在VC+開發

18、環境中,也需要引用AO/AE組件的核心庫,在相應工程的.h頭文件中添加如下語句:#import “C:arcgisarcexe92binesriCore.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids , exclude (OLE_COLOR, OLE_HANDLE),就可運用AO/AE提供的接口編程。但是,VC中的定義方式與VB中不同,VC采用智能指針來定義接口,接口定義時須在接口名后添加“Ptr”,實例化既可同時進行也可以另行定義。以上例中的功能為例,主要代碼如下: 第三節第三節 ComGIS開發方法

19、開發方法基于基于AO/AE的的ComGIS開發方法開發方法IFeatureLayerPtr pLayer(CLSID_ FeatureLayer); /定義接口并實例化IMapPtr pMap;pMap .CreateInstance (CLSID_Map);/以上兩句與“IMapPtr pMap(CLSID_Map);”等價pMap-AddLayer(pLayer);在實際開發中,編程語言的選擇,根據具體的需要來定。一般來說,用VB開發效率高,投入少,周期短,更適合功能緊湊的中小型應用系統;采用VC開發,功能強大,可擴展性好,執行效率高,但系統花銷較大,開發周期較長,適合功能齊備、深度開發的

20、大型應用系統。第三節第三節 ComGIS開發方法開發方法基于基于AO/AE的的ComGIS開發方法開發方法 在VC#開發環境中,可通過直接引用如下AO/AE組件的核心庫進行接口編程:ESRI.ArcGIS.ReaderControl, ESRI.ArcGIS.Carto,ESRI.ArcGIS. Controls, ESRI.ArcGIS.MapControl,ESRI.ArcGIS.DataSourceFile, ESRI.ArcGIS.Display,ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Geometry,ESRI.ArcGIS.PageLayoutCo

21、ntrol, ESRI.ArcGIS.System,ESRI.ArcGIS.SystemUI第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE組件簡介組件簡介 AO組件是ESRI公司推出的ArcGIS家族中應用程序ArcMap、ArcCatalog和ArcScene的開發平臺,是基于微軟的組件對象模型(COM)技術開發的一系列COM組件集,它提供了1800多個單獨的基于COM的組件、幾百個具有良好文檔說明的接口及數千個方法,其中囊括了ArcInfo和ArcView中實現的所有功能,開發人員可以使用任何一種兼容COM的編程語言擴展AO組件,定制符合自己要求的組件。因為基于

22、COM工業標準,用AO開發的應用程序與主流IT是兼容的、開放的、可移植的,很容易融合到一個機構的系統中。ArcGIS三大應用程序模塊三大應用程序模塊AO基本體系結構基本體系結構AO應用程序接口應用程序接口第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE組件簡介組件簡介 在目前常用的ArcGIS 9.X版本的AO開發中,有MapControl和PageLayoutControl 2個主要的高級通用控件,它們由AO基礎組件集成而成,向用戶提供地圖視圖窗口。MapControl控件提供了類似ArcMap中的數據視圖(Data View)的視圖窗口,該窗口可以使地圖數據布滿整

23、個客戶區,便于對地圖數據進行操作(如地圖顯示、要素編輯、空間和屬性數據查詢、地圖數據分析等)。PageLayoutControl控件提供了類似ArcMap中的版面視圖(Layout View)的視圖窗口,該窗口主要用于制圖輸出,可以進行制圖版面設置、輔助要素設置、制圖數據操作、地圖整飾操作等操作。通過以上兩個控件可以實現ArcMap中的絕大部分功能。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE組件簡介組件簡介 另外,ArcGIS 9.X版本還提供了SceneViewer控件,主要為ArcGIS 3D分析擴展模塊提供三維可視化視圖窗口,同樣可應用于AO組件編程。用用

24、ArcGIS進行二次開發,先學進行二次開發,先學AO還是直接學還是直接學AE?用用ArcGIS進行二次開發,先學進行二次開發,先學AO還是直接學還是直接學AE?剛接觸剛接觸ArcGIS二次開發時都會有這種疑惑。其實二次開發時都會有這種疑惑。其實AO和和AE的的區別不大,它們只是少數地方不同而已(最主要的區別是極區別不大,它們只是少數地方不同而已(最主要的區別是極個別個別AO中的接口在中的接口在AE中不能用,做二次開發時間長了就能中不能用,做二次開發時間長了就能真正理解了),所以剛開開始學的時候不要過于計較到底是真正理解了),所以剛開開始學的時候不要過于計較到底是學學AO還是還是AE。無論是。無

25、論是AO開發還是開發還是AE開發,主要就是學習開發,主要就是學習要實現的功能用什么接口去實現,而它們兩個的接口大多數要實現的功能用什么接口去實現,而它們兩個的接口大多數情況下用法是一樣的。學習情況下用法是一樣的。學習ArcGIS二次開發只靠一本書是二次開發只靠一本書是不行的,要想快速提高還是要多寫代碼、多上網看資料、多不行的,要想快速提高還是要多寫代碼、多上網看資料、多到論壇問問題,還有學會看幫助文檔和到論壇問問題,還有學會看幫助文檔和OMD(對象模型圖對象模型圖),因為這樣可以讓你舉一反三更加靈活地進行二次開發。因為這樣可以讓你舉一反三更加靈活地進行二次開發。建議:建議:(1)學習學習Arc

26、GIS二次開發前熟練操作二次開發前熟練操作ArcMap(非常必(非常必要),這樣可以更深入更形象地了解接口;要),這樣可以更深入更形象地了解接口;(2)學習學習ArcGIS二次開發前至少要對類、對象和接口有個基本的認識。二次開發前至少要對類、對象和接口有個基本的認識。 第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE組件簡介組件簡介 AO是隨ArcGIS產品一同發布的,必須在ArcGIS Desktop上才能利用AO提供的組件對象來進行應用開發。ArcGIS Engine是在ArcGIS9系列中發布的一個基于AO的新產品,實現了比AO更好的封裝,是一個獨立的產品。第四

27、節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE的特點的特點 1.采用面向對象思想、基于組件技術; 2.支持廣泛的空間數據格式,如ESRI Shape files、 ArcInfo Coverages、AutoCAD的DXF和DWG、ArcSDE layers、ESRI Geodatabase、VPF及各種柵格圖像等; 3.具有強大的GIS功能,可以實現從空間數據編輯到三維顯示與分析等一系列操作和空間數據管理。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE的功能的功能 ArcMap、ArcCatalog和ArcScene這三個應用程序都是由AO

28、搭建起來的,因此從理論上講這些應用程序能完成的任務,通過AO同樣可以完成(空間數據顯示、查詢檢索、編輯和分析,創建各種專題圖和統計報表,高級制圖和輸出,空間數據管理和維護以及三維可視化)。具體地說,主要有:第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE的功能的功能 1.強大的符號庫系統; 2.方便高效的地圖顯示功能; 3.強大靈活的空間數據編輯功能; 4.強大的制圖功能; 5.強大的空間分析功能; 6.豐富的三維顯示和三維分析功能; 7.強大的空間數據管理功能; 8.對動態目標的追蹤功能。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE組件

29、開發類型組件開發類型VBA的開發方式。利用嵌入ArcCatalog和ArcMap中的VBA宏進行嵌入式開發,可以快速地實現針對特殊需求的功能擴展和界面的定制。這是最簡單快速的方法,是有效利用現有平臺與數據的首選開發方式,缺點是不能脫離桌面軟件獨立運行;利用利用VBA對對ArcMap進行定制進行定制第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE組件開發類型組件開發類型創建自己的COM組件。采用任意一種支持COM的高級語言(如VC、VB、Delphi等),在AO/AE組件的基礎上進一步創建自己的COM組件,定義自己的接口、屬性、方法,底層功能調用AO/AE組件加以實現以

30、滿足各種特殊的需求。這種方法生成的COM組件具有很大的靈活性,可以應用在由任何支持COM的語言開發的獨立應用程序中,但這種開發方法需要較高的組件開發技術;基于基于COM的二次開發的二次開發基于基于COM的二次開發的二次開發第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE組件開發類型組件開發類型開發獨立的應用程序。在支持COM的高級編程語言環境下,應用AO/AE組件提供的強大功能,自行開發符合要求的專業化GIS系統。這種開發方式首先要引用AO/AE組件的核心庫esriCore.olb,然后根據COM編程的特點,利用接口編寫代碼。其優點是:開發人員可以根據系統的實際需要,

31、從組件庫中選擇需要應用的組件快速整合系統,所生成的應用程序不依賴于ArcGIS桌面版軟件而獨立運行,為專業人士提供了方便、友好的操作方式。缺點是該方式開發難度較大。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE開發需要的技術基礎開發需要的技術基礎面向對象技術COM技術支持COM的各種開發工具及其環境(如VB、VC、DEPHI等)AO各組件對象的層次組織和相互關系第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE開發方法開發方法 AO/AE組件提供了3種類型的類普通類(Class) 、抽象類(AbstractClass) 和組件類(CoClas

32、s)。普通類可以通過其它類的實例化而不能直接創建對象,其對象可以作為其它類的一個屬性。抽象類不能創建對象,只能作為其它類的父類,其主要目的是為其子類定義公共接口。組件類可以顯式地創建對象。 AO/AE中的Dataset或Geometry classes是抽象類,它不能創建Geometry類的對象,而Polyline是組件類,可以創建Polyline類的對象。這個Polyline對象實際上在類的基礎上實現了Geometry中定義的接口,因此在基類對象中被定義的接口可以從coclass來訪問。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE開發方法開發方法 AO/AE組件

33、是基于COM標準定義的,在實現上也完全遵循該規范,每個功能都需要通過接口來實現。 接口設計必須滿足:1.必須直接或間接地從IUNKNOWN接口繼承(該接口在AO中是省缺的);2.接口必須有唯一的標識符號;3.接口不變性,即一旦分配和公布了ID,接口定義的任何因素都不能改變。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO開發工具包開發工具包ADK(ArcObjects Developer Kit) ADK是進行基于AO應用程序開發所必需的(在AE下稱為SDK),可以選擇在安裝ArcGIS Desktop時或在任何時候使用光盤安裝,安裝后的目錄結構包括:Help包含開發幫助文

34、件AODev.chm、ArcObjects.chm等 Kits附加的開發者素材,諸如投影引擎頭文件,類別ID文件和ESRI 示例命令的源代碼(在9.x版本中,該代碼位置有所變化) Object Model Diagrams包括所有的PDF格式對象模型圖Samples包含所有示例工程文件的源代碼Utilities包含ESRI 對象瀏覽器等工具第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE運行庫運行庫Runtime Runtime是編譯調試程序所必循的運行環境,開發時要使用runtime+sdk,部署時用戶那里只需要runtime和開發的程序。 第四節第四節 ComGI

35、S開發實踐開發實踐以以AO/AE為例為例AO/AE開發資源開發資源1.ArcObjects Developer Help,這是AO開發的首選資源,不管是AO的基礎COM、AO的對象層次圖都提供了說明,此外還提供了大量的開發示例;2.ArcObjects Online,提供了最新的AO組件庫文檔,其中有一個關于AO的技術論壇,非常實用;3.Exploring ArcObjects,一本很不錯的AO技術文檔,對AO的開發進行了很好的組織,而且有大量的示例,可以隨時復制利用;第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE開發資源開發資源4.Building a Geoda

36、tabase,應用都是圍繞數據來展開的,這本書主要是用來設計和創建Geodatabase的,但理解和掌握Geodatabase的層次和建模方法,對AO開發是很好的補充;5.Microsoft MSDN,即使你的AO開發工具不是微軟的,也建議安裝一套完整的MSDN,想多了解和應用COM進行設計開發,MSDN是個寶藏。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE的核心組件庫的核心組件庫esriSystem.olb、esriSystemUI.olb、esriGeometry.olb、esriDisplay.olb、esriGeoDatabase.olb、esriCart

37、o.olb、esriDataSourcesFile.olb、ToolbarControl.ocx、TOCControl.ocx、MapControl.ocx、PageLayoutControl.ocx、ArcReaderControl.ocx。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE控件、類、接口之間的關系控件、類、接口之間的關系 第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE中的核心類與接口中的核心類與接口1.與MapControl控件相關的核心類與接口(1)Map組件類:功能是作為顯示和操作地圖數據的容器,其主要接口是IMap,

38、它是AO/AE各種功能類與接口在MapControl控件上進行體現的入口,通過它可以訪問各種不同來源的圖層數據,可以添加、刪除圖層數據,可以關聯比例尺、圖例等各種圖面要素,可以獲得感興趣區域、地圖坐標單位和空間參考等有關地圖的各種屬性信息;第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE中的核心類與接口中的核心類與接口1.與MapControl控件相關的核心類與接口(2)MapControl組件類:在封裝Map類基礎上擴展了屬性、方法和事件,通過IMapControl接口可以控制地圖的基本表現形式、顯示屬性和地圖控件的屬性,可以添加并管理與控件關聯的圖層數據,可以導入

39、地圖文檔,可以將其它應用中的地圖數據拖放到當前應用中來。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE中的核心類與接口中的核心類與接口2.與SceneViewer控件相關的核心類與接口(1)Scene組件類:功能是作為在三維場景中顯示和操作地圖數據的容器,其主要接口是IScene,它是AO/AE各種功能類與接口在SceneViewer控件上進行體現的入口,通過它可以訪問三維場景中各種不同來源的圖層數據,可以添加、刪除三維場景中的圖層數據,可以設置背景色等三維場景的一些基本屬性,可以設置場景的空間參考屬性;第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為

40、例AO/AE中的核心類與接口中的核心類與接口2.與SceneViewer控件相關的核心類與接口(2)SceneGraph組件類:功能是作為存儲三維場景中的空間數據和與三維場景相關事件的容器,其主要接口是ISceneGraph,它提供了控制和操縱SceneGraph的方法和屬性。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE應用開發的基本過程應用開發的基本過程 一個基于AO/AE應用開發,首先要將控件與相應的核心類、接口聯系起來,然后通過核心類、接口連接相關的功能類和接口,從而實現需要的GIS功能。第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/

41、AE應用開發的基本過程(應用開發的基本過程(VC+6.0) 1.基于MapControl控件的開發void CAoExView:OnInitialUpdate()CFormView:OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();/ 獲取MapControl指針 m_ipMapControl = GetDlgItem(IDC_MAPCONTROL1) -GetControlUnknown();第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例AO/AE應用開發的基本過程(應用開發的基本過程

42、(VC+6.0) 2.基于SceneViewer控件的開發 hr = m_SceneViewerCtrl.GetSceneGraph() -GetScene(&m_ipScene);第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作地圖圖層控制和地圖瀏覽操作添加圖層數據(shp文件、CAD文件和影像文件)圖層控制(添加與刪除、層間關系調整和顯示控制)地圖瀏覽(放大、縮小與漫游)第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0) 首先建立以窗口視圖類FormView

43、為基類的MFC項目,在Form窗體中利用右鍵快捷菜單項Insert ActiveX Controls添加添加ESRI LicenseControl和和ESRI MapControl兩個控件兩個控件,然后通過修改ESRI MapControl的屬性加載一個地圖文檔或圖層。 在StdAfx.h中添加頭文件#include atlbase.h以及如下代碼:第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0)/ AO引入庫#pragma warning(push)#pragma warning(disable: 4192

44、)#pragma warning(disable: 4146)#import C:Program FilesArcGIScomesriSystem.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude(OLE_COLOR, OLE_HANDLE, VARTYPE, IStatusBar)#import C:Program FilesArcGIScomesriSystemUI.olb raw_interfaces_only, raw_native_types, no_namespace, nam

45、ed_guids, exclude(IProgressDialog), rename(ICommand,IESRICommand)#import C:Program FilesArcGIScomesriGeometry.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids#import C:Program FilesArcGIScomesriDisplay.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids第四節第四節 Com

46、GIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0)#import C:Program FilesArcGIScomesriGeoDatabase.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids, rename(IRow,IESRIRow), rename(ICursor,IESRICursor)#import C:Program FilesArcGIScomesriCarto.olb raw_interfaces_only, raw_nati

47、ve_types, no_namespace, named_guids, exclude(UINT_PTR),rename(ITableDefinition,IESRITableDefinition) #import C:Program FilesArcGIScomesriDataSourcesFile.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids#import C:Program FilesArcGIScomesriDataSourcesGDB.olb raw_interfaces_only, raw

48、_native_types, no_namespace, named_guids, exclude(OLE_COLOR, OLE_HANDLE)#import C:Program FilesArcGISbinToolbarControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0)#import C:Program FilesArcGISbinTOCControl.ocx ra

49、w_interfaces_only raw_native_types no_namespace named_guids exclude(esriControlsMousePointer,esriControlsDragDropEffect,esriControlsDropAction,esriControlsAppearance,esriControlsBorderStyle)#import C:Program FilesArcGISbinMapControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids#i

50、mport C:Program FilesArcGISbinPageLayoutControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids#import C:Program FilesArcGISbinArcReaderControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids#pragma warning(pop) 第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制

51、和地圖瀏覽操作(VC+6.0) 定義地圖控件變量并使窗口初始化:IMapControl3Ptr m_ipMapControl; / 地圖控件地圖控件void OnInitialUpdate() CFormView:OnInitialUpdate(); GetParentFrame()-RecalcLayout(); ResizeParentToFit(); / 獲取MapControl指針 m_ipMapControl=GetDlgItem(IDC_MAPCONTROL1)-GetControlUnknown();第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地

52、圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0) 地圖控件隨窗口改變大小:void OnSize(UINT nType, int cx, int cy) CFormView:OnSize(nType, cx, cy); / View窗口改變大小時改變MapControl大小 if(m_ipMapControl!=NULL) CRect rc; GetClientRect(rc); GetDlgItem(IDC_MAPCONTROL1)-MoveWindow(rc); 第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(V

53、C+6.0) 在工具欄內設置選擇、平移、放大、縮小、全圖五個按鈕并添加一個標志當前鼠標操作狀態的成員變量:esriARTool m_ARTool; / 鼠標當前狀態鼠標當前狀態上述五個按鈕的響應函數如下:第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0)/ 選擇狀態void OnMapArrow() m_ARTool = esriARToolNoneSelected; m_ipMapControl-put_MousePointer(esriPointerDefault);/ 地圖平移void OnMapPan(

54、) m_ARTool = esriARToolMapPan; m_ipMapControl-put_MousePointer(esriPointerPan);第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0)/ 地圖放大void OnMapZoomin() m_ARTool = esriARToolMapZoomIn; m_ipMapControl-put_MousePointer(esriPointerZoomIn); / 地圖縮小void OnMapZoomout() m_ARTool = esriARTo

55、olMapZoomOut; m_ipMapControl-put_MousePointer(esriPointerZoomOut);第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0)/ 顯示全圖void OnMapFullextent() IActiveViewPtr ipActiveView; HRESULT hr=m_ipMapControl-get_ActiveView(&ipActiveView); if (FAILED(hr) return; IEnvelopePtr ipEnvelope;

56、hr = ipActiveView-get_FullExtent(&ipEnvelope); if (FAILED(hr) return; ipActiveView-put_Extent(ipEnvelope); ipActiveView-Refresh();第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0) 工具欄按鈕的鼠標事件(MapControl控件響應)函數如下:void OnonMouseDownMapcontrol1(long button, long shift, long x, long

57、 y, double mapX, double mapY) if(1 = button) / 鼠標左鍵按下 IActiveViewPtr ipActiveView; HRESULT hr=m_ipMapControl-get_ActiveView(&ipActiveView); if (ipActiveView = NULL) return ; switch(m_ARTool) case esriARToolNoneSelected: break; 第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0) 工

58、具欄按鈕的鼠標事件(MapControl控件響應)函數如下: case esriARToolMapZoomIn: / 地圖放大 IEnvelopePtr ipEnvelope; hr = ipActiveView-get_Extent(&ipEnvelope); if (FAILED(hr) return ; hr = m_ipMapControl-TrackRectangle(&ipEnvelope); if (FAILED(hr) return ; if(ipEnvelope = NULL) return ; double XMin,YMin,XMax,YMax; XMin

59、=YMin=XMax=YMax=0.0; if(S_OK !=ipEnvelope-get_XMin(&XMin) XMin = 0.0; if(S_OK !=ipEnvelope-get_YMin(&YMin) YMin = 0.0; if(S_OK !=ipEnvelope-get_XMax(&XMax) XMax = 0.0; if(S_OK !=ipEnvelope-get_YMax(&YMax) YMax = 0.0;第四節第四節 ComGIS開發實踐開發實踐以以AO/AE為例為例地圖圖層控制和地圖瀏覽操作(地圖圖層控制和地圖瀏覽操作(VC+6.0)

60、工具欄按鈕的鼠標事件(MapControl控件響應)函數如下: if(XMin!=XMax&YMin!=YMax) / 用戶拉框選擇區域放大 ipActiveView-put_Extent(ipEnvelope); ipActiveView-Refresh(); else / 用戶點擊進行放大 ipActiveView-get_Extent(&ipEnvelope); if (FAILED(hr) return ; IPointPtr ipPoint(CLSID_Point); ipPoint-put_X(mapX); ipPoint-put_Y(mapY); / 設置中心點為用戶點擊為主 ipEnvelope-CenterAt(ipPoint);第四節第四節 ComGIS開發實踐開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論