ArcObjects GIS應(yīng)用開發(fā)-基于C#chap.1課件_第1頁
ArcObjects GIS應(yīng)用開發(fā)-基于C#chap.1課件_第2頁
ArcObjects GIS應(yīng)用開發(fā)-基于C#chap.1課件_第3頁
ArcObjects GIS應(yīng)用開發(fā)-基于C#chap.1課件_第4頁
ArcObjects GIS應(yīng)用開發(fā)-基于C#chap.1課件_第5頁
已閱讀5頁,還剩149頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、GIS 應(yīng) 用 開 發(fā)Developing GIS Applications with ArcObjects using C#.NET江西省研究生優(yōu)質(zhì)課程 主講:蘭小機(jī) GIS博士、教授 Email : QQ :305333315 課件: 4/ 蘭小機(jī)簡(jiǎn)歷主要經(jīng)歷1988年7月畢業(yè)于南方冶金學(xué)院工程測(cè)量專業(yè),獲學(xué)士學(xué)位,并留校任教1994年6月畢業(yè)于武漢測(cè)繪科技大學(xué)工程測(cè)量專業(yè),獲碩士學(xué)位,回校任教2005年6月畢業(yè)于南京師范大學(xué)地圖學(xué)與地理信息系統(tǒng)專業(yè),獲理學(xué)博士學(xué)位,回校任教主要研究方向GML空間數(shù)據(jù)挖掘GML空間數(shù)據(jù)庫理論與GMLGIS空間數(shù)據(jù)集成與共享GIS應(yīng)用開發(fā) 科研項(xiàng)目國(guó)家自然科

2、學(xué)基金項(xiàng)目-面向GML的時(shí)空關(guān)聯(lián)規(guī)則及序列模式挖掘研究(編號(hào):40971234) ,35萬元,主持國(guó)家自然科學(xué)基金項(xiàng)目-本原GML空間數(shù)據(jù)庫理論及GMLGIS與傳統(tǒng)GIS集成研究(編號(hào):40761017) ,16萬元,主持國(guó)家自然科學(xué)基金項(xiàng)目 - GML空間數(shù)據(jù)存儲(chǔ)索引機(jī)制研究(編號(hào):40401045) ,26萬元,排名第二地理信息科學(xué)江蘇省重點(diǎn)實(shí)驗(yàn)室開發(fā)基金項(xiàng)目 -面向?qū)ο蟮腉ML空間數(shù)據(jù)庫及其應(yīng)用研究(編號(hào):JK20050302) ,5萬元主持江西省教育廳科技項(xiàng)目GML空間數(shù)據(jù)庫理論及GMLGIS研究,1萬元,主持萍鄉(xiāng)市基礎(chǔ)地理信息系統(tǒng)研究與開發(fā),22萬元,主持城市公眾地理信息服務(wù)系統(tǒng)研究

3、與開發(fā),10萬元,主持教學(xué)目標(biāo)GIS應(yīng)用開發(fā)課程是GIS本科生、研究生重要的專業(yè)課程,通過課程的學(xué)習(xí),了解ArcGIS 軟件體系結(jié)構(gòu)及ArcObjects組件構(gòu)成,并能熟練使用ArcObjects 進(jìn)行應(yīng)用型GIS開發(fā); 掌握應(yīng)用型GIS開發(fā)的基本思路、技術(shù)方法.教學(xué)內(nèi)容及時(shí)間安排序號(hào)教學(xué)內(nèi)容學(xué)時(shí)1開發(fā)基礎(chǔ) 52ArcGIS Application framework 53使用ArcObjects控件編程 64幾何形體對(duì)象-GEOMETRY 45地圖的組成 66空間數(shù)據(jù)的符號(hào)化 57空間數(shù)據(jù)管理 58地理處理框架29空間分析 410空間數(shù)據(jù)編輯811三維GIS開發(fā)基礎(chǔ)6學(xué)習(xí)基礎(chǔ)熟練掌握ArcG

4、IS Desktop(ArcMap、ArcCatalog)基本操作;了解Geodatabase、ArcSDE基本概念;會(huì)用C#進(jìn)行程序設(shè)計(jì)。計(jì)算機(jī)組件技術(shù)組件GIS組件式的GIS應(yīng)用開發(fā)Chap.1 Fundamentals of developing with ArcObjectsArcGIS 系列產(chǎn)品與開發(fā)方式ArcGIS Visual Studio IDE Integration Framework ArcObjects基礎(chǔ)組件對(duì)象模型.NET平臺(tái)概述.NET組件與COM組件的互操作ArcGIS開發(fā)資源1 ArcGIS 系列產(chǎn)品與開發(fā)方式ArcGIS Desktop ArcGIS Eng

5、ine ArcGIS Server ArcGIS Mobile 開發(fā)類型: To customize or extend the ArcGIS Desktop applicationsTobuild standalone mapping applicationsTo develop Web applicationsArcGIS桌面應(yīng)用程序定制/擴(kuò)展方式使用ArcGIS桌面應(yīng)用程序的定制功能(Customzie),配置應(yīng)用程序界面;使用Python 腳本,自動(dòng)化GIS工作流開發(fā)插件( add-in),定制/擴(kuò)展ArcGIS 桌面應(yīng)用程序開發(fā)定制組件,擴(kuò)展ArcGIS 桌面應(yīng)用程序無需使用ArcO

6、bjects,后續(xù)版本不支持VBA定制需要使用ArcObjects,可以使用C#,VB.NET, Java, C+語言1.1.1 使用Python 腳本,自動(dòng)化GIS工作流Python 是一種免費(fèi)的、跨平臺(tái)的開源編程語言,它功能強(qiáng)大且簡(jiǎn)單易學(xué),因而得到了廣泛應(yīng)用和支持。ESRI 已將 Python 完全納入 ArcGIS 中,成為了一種用于數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化的語言,因而有助于提高工作效率。 易于學(xué)習(xí),非常適合初學(xué)者,也特別適合專家使用可伸縮程度高,適于大型項(xiàng)目或小型的一次性程序(稱為腳本)可移植,跨平臺(tái)可嵌入(使 ArcGIS 可腳本化)穩(wěn)定成熟用戶社區(qū)規(guī)模大Python

7、是地理處理框架的重要組成Python在ArcGIS中的發(fā)展ArcPyArcPy -ArcGIS新的Python庫由arcgisscripting升級(jí)而來包含有函數(shù)(Function)、類(Class)和模塊(Module)功能實(shí)現(xiàn)能訪問所有g(shù)p工具數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理數(shù)據(jù)分析自動(dòng)化制圖ArcPy詳細(xì)參考: ArcGIS Desktop 10幫助專業(yè)庫地理處理ArcPy站點(diǎn)包ArcPy 模塊模塊為通常包含函數(shù)和類的 Python 文件。有一系列模塊支持 ArcPy,包括制圖模塊 (arcpy.mapping)、Spatial Analyst 模塊 (arcpy.sa) 和Geostatistica

8、l Analyst 模塊 (arcpy.ga)。ArcPy 類ArcPy 類,如 SpatialReference 和 Extent 類,通常用作地理處理工具參數(shù)設(shè)置的快捷方式,否則的話,這些參數(shù)會(huì)使用更加復(fù)雜的字符串。ArcPy 函數(shù)函數(shù)是用于執(zhí)行某項(xiàng)特定任務(wù)程序單元。 在 ArcPy 中,所有地理處理工具均以函數(shù)形式提供,但并非所有函數(shù)都是地理處理工具。除工具之外,ArcPy 還提供多種函數(shù)來更好地支持 Python 地理處理工作流。函數(shù)或方法可用于列出某些數(shù)據(jù)集、檢索數(shù)據(jù)集的屬性、在將表添加到地理數(shù)據(jù)庫之前驗(yàn)證表名稱,或執(zhí)行其他許多有用的腳本任務(wù)。獨(dú)立的 Python 腳本Python

9、腳本是可以執(zhí)行的 .py 文件。獨(dú)立 Python 腳本可通過兩種方式執(zhí)行:通過操作系統(tǒng)提示或開發(fā)應(yīng)用程序(如 PythonWin),或在 Windows 資源管理器中雙擊 .py 文件。Python 腳本工具Python 腳本工具是已添加到地理處理工具箱的 Python 腳本。添加為腳本工具后,便可以像使用其他地理處理工具一樣使用此腳本工具 - 可以從工具對(duì)話框打開和執(zhí)行、可以在 Python 窗口和 ModelBuilder 中使用,并可以從其他腳本和腳本工具中調(diào)用。簡(jiǎn)單實(shí)例:ArcGIS引入了后臺(tái)地理處理(Background Geoprocessing)的概念,允許Geoprocess

10、ing工具、ArcGIS操作同時(shí)運(yùn)行(使用多核CPU)。1.1.2 使用DLL組件擴(kuò)展ArcGIS桌面使用DLL組件擴(kuò)展ArcGIS桌面的優(yōu)勢(shì):They can be easily delivered to end users via custom setup programs.You can hide your code and logic in a binary file.You can extend and customize virtually every aspect of the ArcGIS technology.ArcGIS Desktop Add-inAdd-in是一種能夠快

11、速擴(kuò)展桌面應(yīng)用程序功能的全新擴(kuò)展方式更加容易創(chuàng)建更加容易共享更加安全更易安裝管理ArcGIS 10 Add-in所支持的類型按鈕和工具組合框菜單和右鍵菜單Multi-items工具條Tool palettes可停靠窗體Application extensionsEditor extensionsArcGIS 10 Add-in支持的開發(fā)環(huán)境Visual Studio 2008 + .Net3.5Visual Studio 2010 + .Net3.5或者.Net4.0Visual Basic/C# 2008 Express Edition + .Net3.5Visual Basic/C# 20

12、10 Express Edition +.Net3.5 或者.Net4.0Eclipse IDE for Java DevelopersXML Metadata( Config.esriaddinx )Add-in的部署復(fù)制/郵件發(fā)送編譯好的esriaddin文件到需要部署機(jī)器上(已經(jīng)安裝好ArcGIS 桌面);在部署機(jī)器上雙擊esriaddin文件,彈出Add-in安裝界面,讓用戶查看該插件的一些元信息,然后讓用戶決定是否安裝該插件;安裝插件是不需要重啟任何ArcGIS Desktop應(yīng)用程序的。安裝完之后,就可以通過相應(yīng)ArcGIS Desktop應(yīng)用程序的Add-in Manager來查

13、看已安裝的Add-in,也可以通過它來卸載。一些Add-in所包含的對(duì)象,例如Command、Tool、Toolbar,是需要用戶通過Customize窗口定制添加到界面上的。Extension對(duì)象,則需要用戶通過Extensions窗口勾選加載。Add-in共享與安全實(shí)現(xiàn)局域網(wǎng)內(nèi)共享設(shè)置共享目錄、設(shè)置安全級(jí)別Add-in 數(shù)字簽名工具:ESRISignAddin.exeC:Program FilesCommon FilesArcGISbinESRISignAddIn.exe1.2 ArcGIS Engine ArcGIS Engine是一個(gè)完整的嵌入GIS組件庫和工具,開發(fā)人員可以用來創(chuàng)建新

14、的獨(dú)立的GIS應(yīng)用程序或者在自定義的應(yīng)用程序或已經(jīng)存在的應(yīng)用程序中嵌入GIS功能。ArcGIS Engine是ArcObjects的子集,主要用于獨(dú)立的GIS應(yīng)用開發(fā),它不依賴于ArcGIS Desktop。ArcGIS Engine由兩部分組成:一個(gè)軟件開發(fā)包(SDK)和一個(gè)可分發(fā)的運(yùn)行時(shí)(Runtime)。除此之外,應(yīng)用程序的功能可以使用可選的擴(kuò)展模塊來進(jìn)行擴(kuò)展。ArcGIS Engine支持Windows平臺(tái)及跨平臺(tái)開發(fā)。Windows平臺(tái)開發(fā),有以下APIs: .NET VC+ 跨平臺(tái)開發(fā),有以下APIs:Java C+ for Windows C+ for Solaris/Linux

15、 使用ArcGIS Engine控件開發(fā)獨(dú)立的GIS應(yīng)用Using the Winforms ArcGIS Engine controlsUsing ArcGIS Engine Controls in WPF (New in ArcGIS 10)1.3 ArcGIS ServerArcGIS Server 是功能強(qiáng)大的基于服務(wù)器的 GIS 產(chǎn)品,用于構(gòu)建集中管理的、支持多用戶的、具備高級(jí)GIS功能的企業(yè)級(jí)GIS應(yīng)用與服務(wù)。 開發(fā)者使用ArcGIS Server可以構(gòu)建Web應(yīng)用、Web服務(wù)、以及其它運(yùn)行在標(biāo)準(zhǔn)的.NET和J2EE Web服務(wù)器上的企業(yè)應(yīng)用。 ArcGIS Server包含兩個(gè)主

16、要部分:GIS服務(wù)器和多種的開發(fā)框架。ArcGIS Server提供的開發(fā)環(huán)境:ArcGIS Server SDK for .NET and JavaArcGIS JavaScript APIArcGIS JavaScript extension for the Google Maps APIArcGIS JavaScript extension for Bing MapsArcGIS API for Microsoft Silverlight/Windows Presentation Foundation (WPF)ArcGIS API for FlexArcGIS Server Repre

17、sentational State Transfer (REST) APIArcGIS Server Simple Object Access Protocol (SOAP) SDK 1.4 Mobile GISArcGIS技術(shù)可以部署到一系列的移動(dòng)設(shè)備上,從輕量級(jí)的設(shè)備到PDA、筆記本電腦以及平板電腦。在野外工作中使用GIS,主要依靠將應(yīng)用程序定制成簡(jiǎn)單的移動(dòng)工作任務(wù)以及對(duì)中心GIS Web服務(wù)器的無線訪問。ArcGIS為用戶提供了三種移動(dòng)GIS解決方案。ArcGIS Desktop和使用ArcGIS Engine建立的應(yīng)用程序:這種方案常常部署在用于野外的筆記本電腦或者平板電腦上。ArcP

18、ad:ArcPad為使用Windows CE兼容設(shè)備的野外工作人員提供了一個(gè)以GIS為中心的解決方案。 ArcGIS Mobile SDK:ArcGIS Server 包含的一個(gè)軟件開發(fā)包,可以被用于智能手機(jī)、PocketPC等設(shè)備上的應(yīng)用開發(fā)。2 ArcGIS Visual Studio IDE Integration Framework為了提高軟件開發(fā)效率,ArcGIS開發(fā)包為開發(fā)人員提供了集成于VS環(huán)境的模板、向?qū)?、命令、代碼段等。ArcGIS開發(fā)包的安裝ArcGIS桌面開發(fā)包ArcObjects(AO)ArcGIS Engine開發(fā)包- ArcGIS Engine(AE)ArcGIS

19、Server開發(fā)包ArcGIS開發(fā)包安裝后VS IDE集成框架(開發(fā)環(huán)境元素)開發(fā)類庫開發(fā)文檔ArcGIS Visual Studio IDE Integration FrameworkArcGIS Visual Studio IDE Integration Framework for add-ins(New in ArcGIS 10)ArcGIS Visual Studio IDE Integration Framework for extending ArcObjectsArcGIS Visual Studio IDE Integration Framework for server ob

20、ject extensionsWeb Mapping Application2.1 ArcGIS Visual Studio IDE Integration Framework for add-ins在VS環(huán)境下開發(fā):創(chuàng)建解決方案(Solution)一到多個(gè)項(xiàng)目(Projects)一到多個(gè)類(Classes)2.2 ArcGIS Visual Studio IDE Integration Framework for extending ArcObjectsArcGIS VS IDE 集成框架元素:ArcGIS Project templates (項(xiàng)目模板)ArcGIS Project wiz

21、ard ArcGIS Item templates (類模板)ArcGIS Add Class wizardArcGIS SnippetsArcGIS Reference dialog boxArcGIS Component Category Registrar dialog box ArcGIS License Initializer dialog box ArcGIS Toolbox Reference dialog box ArcGIS .Net Code Converter Toolbox configuration2.1 ArcGIS Project templates(項(xiàng)目模板)T

22、he following are the available project templates:Desktop: Windows Application Console Application Class Library (General) Class Library (ArcMap) Class Library (ArcCatalog) Class Library (ArcScene) Class Library (ArcGlobe) Engine: Windows Application Console Application Class Library (General) MapCon

23、trol Application GlobeControl Application server object extensions REST SOAPServer Web ApplicationWeb Mapping ApplicationToolbox configuration:Adds ArcGIS controls in the Visual Studio Toolbox window. ArcGIS Project wizard(項(xiàng)目向?qū)?當(dāng)使用ArcGIS 項(xiàng)目模板來創(chuàng)建一個(gè)新項(xiàng)目時(shí), ArcGIS 項(xiàng)目向?qū)?huì)自動(dòng)打開,通過自動(dòng)添加ArcGIS引用及許可初始化代碼,來幫助你高效地

24、搭建新的ArcGIS 定制項(xiàng)目。Class Library (ArcMap )Windows Application (Desktop)Windows Application (Engine)2.3 ArcGIS item templates Add-in 組件模板類模板ArcGIS Add Class (最通用的類模板) Wizard當(dāng)選擇“ArcGIS Class”模板后,添加類向?qū)?huì)自動(dòng)顯示,指導(dǎo)你完成類的創(chuàng)建。ArcGIS Add Class Wizard include the following 3 steps:Base Implementation option Componen

25、t Category option Optional Interfaces option Base Implementation option Customization group Base component Component Category option Categories Category properties Optional Interfaces option Available optional interfaces Selected interfaces 2.4 ArcGIS Reference dialog box 2.5 ArcGIS Component Catego

26、ry Registrar dialog box 2.6 ArcGIS License Initializer dialog box不管是ArcGIS桌面應(yīng)用程序還是獨(dú)立的GIS應(yīng)用程序,在訪問ArcObjects 組件之前,需要明確地使用合適的ArcGIS 產(chǎn)品許可進(jìn)行初始化。開發(fā)人員可以使用“ArcGIS License Initializer dialog box”來產(chǎn)生并添加許可初始化代碼到項(xiàng)目中的適當(dāng)位置。但如果選用項(xiàng)目模板,創(chuàng)建過程中包含選擇合適的產(chǎn)品許可選項(xiàng)。2.7 ArcGIS Toolbox Reference dialog box This dialog box allows

27、 you to create a managed assembly for a custom ArcGIS toolbox, with one class representing each geoprocessing tool in the toolbox. You can then use these classes to set up and run geoprocessing tools. 2.8 Snippets in ArcGIS for .NET developers為了幫助ArcGIS軟件開發(fā)人員進(jìn)一步提高軟件的開發(fā)效率,“ArcGIS Visual Studio IDE In

28、tegration Framework”提供了可重用的代碼段供開發(fā)人員使用。ArcGIS 10 offers a fully integrated ArcGIS Snippet insertion and finder tool. C:Program FilesMicrosoft Visual Studio 10.0VC#SnippetsArcObjects VS- -工具- -代碼段管理器(T)使用代碼段管理代碼段編輯、重建、查找代碼段ArcGIS Snippet Editor ManagerArcGIS Snippet Editor WizardArcGIS Snippet Finder在

29、VS中根據(jù)已有代碼生成Snippet2.9 Walkthrough: Create a command by inheriting from BaseCommandCreate a simple command that zooms the extent of the selected layer Create a new class library Add references Create a ZoomToLayer command Change the default icon bitmap Inherit the BaseCommand abstract class Add code

30、to the overridden constructor of BaseCommand Add the ZoomToLayer functionality Expose the ZoomToLayer class to COM Compile the project Use the command in ArcMap Debugging the command Demo:Creating a command that zooms the extent of the selected layerSnippets3 ArcObjects基礎(chǔ)ArcObjects簡(jiǎn)介ArcObjects的組件庫理解

31、對(duì)象模型圖3.1 ArcObjects簡(jiǎn)介ArcObjects是 ESRI公司ArcGIS系列產(chǎn)品的開發(fā)平臺(tái),它是基于Microsoft COM技術(shù)所構(gòu)建的GIS組件產(chǎn)品,是一套可重用的通用的二次開發(fā)組件產(chǎn)品,它可以用于大量開發(fā)框架中,包括流行的像 .NET 、Visual C+、Java等開發(fā)環(huán)境。ArcObjects不是為最終用戶而是專門為開發(fā)人員提供的二次開發(fā)組件。ArcObjects是ArcGIS系列產(chǎn)品的基礎(chǔ),大部分ArcGIS產(chǎn)品都是由ArcObjects構(gòu)建的。3.2 ArcObjects的組件庫ArcObjects是一套龐大的COM組件集合,ArcGIS 各版本各種COM類型統(tǒng)

32、計(jì)見下表: Enums Structs Interfaces Classes Total ArcGIS 9.0 628 35 3029 2322 6014 ArcGIS 9.1 933 36 3918 3043 7930 ArcGIS 9.2 1100 40 4798 3832 9770 ArcGIS 9.3 1195 51 5206 4050 10502 ArcGIS 10.01053935555408110782為了更好地管理ArcObjects中數(shù)目眾多的COM對(duì)象,ESRI將它們放置在不同的組件庫中,對(duì)于.NET 來說,一個(gè)組件庫就是一個(gè)assembly(程序集),一個(gè)assembly

33、有多個(gè)不同的命名空間。如ESRI.ArcGIS.ADF Assembly 的Namespaces:ESRI.ArcGIS.ADF ESRI.ArcGIS.ADF.BaseClasses ESRI.ArcGIS.ADF.CATIDs ESRI.ArcGIS.ADF.COMSupport ESRI.ArcGIS.ADF.Resources ArcObjects 10的組件庫共65個(gè)(65assemblies ),詳細(xì)內(nèi)容參見Learning ArcObjects、ArcObjects SDK API Reference如果不記得某個(gè)接口或?qū)ο髮儆谀膫€(gè)命名空間的時(shí)候,可以通過開發(fā)幫助查找。 3.3

34、理解對(duì)象模型圖ESRI提供了多種方法讓用戶了解ArcObjects組件及不同組件之間的關(guān)系ESRI提供的一系列OMD的PDF文件開發(fā)幫助、API ReferenceVS.NET中的對(duì)象瀏覽器通過閱讀ArcObjects的對(duì)象模型圖 (Object Model Diagram,OMD) ,可以快速了解ArcObjects的結(jié)構(gòu)和不同組件之間的關(guān)系。OMD使用UML(Unified Modeling Language,統(tǒng)一建模語言)描述,它補(bǔ)充了在對(duì)象瀏覽器中看不到的信息,可以幫助程序員了解類之間的關(guān)系,如何從一個(gè)類到另一個(gè)類,選擇正確的接口,獲取需要的屬性和方法等。VS 中的對(duì)象瀏覽器3.3.1

35、 類與對(duì)象在ArcObjects中存在三種類型的類:抽象類(Abstract Class)組件類(CoClass)普通類(Class)抽象類不能用于產(chǎn)生一個(gè)新的對(duì)象,但是可以用于定義一個(gè)子類。組件類是一個(gè)可以直接用new創(chuàng)建對(duì)象實(shí)例的類,它的實(shí)例對(duì)象不依賴其他對(duì)象的存在而存在,其生存周期也不用其他的對(duì)象管理。普通類不能夠直接產(chǎn)生一個(gè)對(duì)象,但它可以用其他的普通類或組件類的方法產(chǎn)生,而不是使用new關(guān)鍵字來完成。 3.3.2 類與類的關(guān)系A(chǔ)rcObjects的類之間存在四種關(guān)系依賴關(guān)系關(guān)聯(lián)關(guān)系組合關(guān)系類型繼承 WorkspaceFactory WorkspaceMapControl MapMapL

36、ayer*CurveSegment PathPolyCurve4 組件對(duì)象模型 軟件開發(fā)歷史什么是組件對(duì)象模型4.1 軟件開發(fā)歷史軟件重用和開發(fā)效率始終是軟件開發(fā)的核心問題。 在早期(面向過程語言),人們?yōu)榱酥赜?,將一些基本的?shù)學(xué)計(jì)算函數(shù)和界面設(shè)計(jì)函數(shù)設(shè)計(jì)成函數(shù)庫,讓其他軟件開發(fā)人員調(diào)用。它為應(yīng)用開發(fā)者提供了方便,但是重用的粒度太小。面向?qū)ο笳Z言的出現(xiàn),提高編程的粒度。面向?qū)ο笳Z言的基本單位是類,它封裝了數(shù)據(jù)成員和函數(shù)成員 ,將最小組件的粒度提高了一個(gè)等級(jí)。但是,一個(gè)類提供了很多種方法和屬性,使用和管理很不方便。COM技術(shù)(接口)的出現(xiàn),解決了以上問題,將類的內(nèi)部屬性和方法進(jìn)行分類。例如在Ma

37、p類中有好幾個(gè)接口,在這些接口中定義不同功能組的方法和屬性,Map實(shí)現(xiàn)了這些接口,這樣就可以使用接口進(jìn)行定義。但COM也存在一個(gè)嚴(yán)重的問題:DLL災(zāi)難。.NET 技術(shù)的出現(xiàn)解決了“DLL災(zāi)難”問題。4.2 什么是組件對(duì)象模型組件技術(shù)標(biāo)準(zhǔn)COM(DCOM):微軟的組件對(duì)象模型(Distributed) Component Object Model )JavaBean:Sun公司的基于Java的組件技術(shù)CORBA:對(duì)象管理組織(Object Management Group,OMG)的組件技術(shù)標(biāo)準(zhǔn),公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(Common Object Request Broker Architectu

38、re,CORBA)。COM知識(shí)要點(diǎn)COM是一種二進(jìn)制級(jí)別的組件通信標(biāo)準(zhǔn)-接口(Interface),它定義了組件之間應(yīng)該如何通信、一個(gè)COM對(duì)象之間的不同接口如何查詢等。COM對(duì)象也是基于面向?qū)ο髽?biāo)準(zhǔn)的。COM對(duì)象可以以DLL或者EXE文件形式存在,它包含著接口的具體實(shí)現(xiàn)。使用者可以通過接口來訪問它內(nèi)部的方法、屬性。COM對(duì)象必須實(shí)現(xiàn)IUnknown接口,它負(fù)責(zé)管理COM對(duì)象生命周期并在運(yùn)行時(shí)刻提供類型查詢,當(dāng)COM對(duì)象不使用的時(shí)候,是這個(gè)接口定義的方法負(fù)責(zé)釋放內(nèi)存。 QI (Query Interface),即所謂查詢接口由于一個(gè)COM對(duì)象有很多個(gè)接口,不同的接口管理著COM的不同類型的方法

39、、屬性,因此從一個(gè)接口可以使用的屬性方法轉(zhuǎn)到另一個(gè)接口可以使用的屬性方法的過程稱為QI。這個(gè)過程也是由IUnknown接口管理的。IMap pMap ; IActiveView pActiveView ;pMap = axMapControl1.Map; /獲取控件中的地圖 pActiveView = pMap as IActiveView; /QI (Or pActiveView = (IActiveView)pMap ; ) 每個(gè)組件都有一個(gè)獨(dú)一無二的標(biāo)識(shí)GUID。接口的GUID稱為IID,而組件類的GUID稱為CLSID。CLSID還有一個(gè)文本別名,即所謂的ProgID,它是一個(gè)由項(xiàng)目名

40、加組件類類名組成的字符串。一個(gè)COM對(duì)象可以有多個(gè)接口,一個(gè)接口也可以被多個(gè)COM對(duì)象實(shí)現(xiàn)。接口分為兩種,即內(nèi)向接口和外向接口。內(nèi)向接口(Inbound Interface)是組織COM對(duì)象相關(guān)的方法和屬性,COM對(duì)象必須實(shí)現(xiàn)所有的接口內(nèi)容;外向接口(Outbound Interface)是用于組織COM對(duì)象相關(guān)的事件,開發(fā)人員根據(jù)需要實(shí)現(xiàn)事件接口。接口可以從多個(gè)父接口繼承(C# 類呢)接口繼承機(jī)制是非常有用的,在很多時(shí)候程序員可以將一個(gè)子接口類型的對(duì)象定義為父接口類型的對(duì)象,從而實(shí)現(xiàn)一般化的操作,如:Private void CreateGeometry (IPolygon pPolygon

41、)Private void CreateGeometry (IGeometry pPolygon)COM對(duì)象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”結(jié)尾的接口,都是這樣發(fā)展的產(chǎn)物。COM組件必須被注冊(cè)后才能使用。COM的缺陷:由于COM對(duì)象可以被重用,這樣多個(gè)程序可能共用一個(gè)COM對(duì)象,如果這個(gè)COM組件升級(jí)了,就很可能出現(xiàn)其中某個(gè)程序無法使用新組件,導(dǎo)致程序不能運(yùn)行的情況,這種情況被稱為“DLL HELL”(DLL災(zāi)難)。5 .NET平臺(tái)概述針對(duì)Windows平臺(tái)存在的缺陷,微軟提出了全新的.NET技術(shù)體系,其主要包括 .NET Fra

42、meworkVisual Studio.NETVisual Studio .NET 是一套完整的開發(fā)工具,用于生成各種類型的應(yīng)用程序,包括 ASP Web 應(yīng)用程序、XML Web services、桌面應(yīng)用程序和移動(dòng)應(yīng)用程序。.NET Framework 是生成、部署和運(yùn)行 各種應(yīng)用程序的平臺(tái)。 .NET Framework 具有兩個(gè)主要組成部分:通用語言運(yùn)行時(shí)(Common Language Runtime-CLR),是 .NET Framework 的基礎(chǔ).NET Framework 類庫。 .NET Framework體系結(jié)構(gòu) Operating SystemCommon Langua

43、ge Runtime(CTS, JIT, Memory Management)Base Class Library(System.IO, System.Drawing,System.Threading)Data Classes(ADO.NET, XML, SQL)Windows FormsWeb Applications Web ServicesWeb Forms ASP .NET MobileCommon Language SpecificationVBC+C#J#Operating SystemCommon Language Runtime(CTS, JIT, Memory Managem

44、ent)Base Class Library(System.IO, System.Drawing,System.Threading)Data Classes(ADO.NET, XML, SQL)Windows FormsWeb Applications Web ServicesWeb Forms ASP .NET MobileVisual Studio .NET5.1 通用語言運(yùn)行時(shí)(CLR)通用語言運(yùn)行時(shí)管理內(nèi)存、線程執(zhí)行、代碼執(zhí)行、代碼安全驗(yàn)證、編譯以及其他系統(tǒng)服務(wù)。CLR處于.NET Framework的最底層,是.NET Framework的基礎(chǔ),它為C#.NET、VB.NET、C+、

45、J#等多種語言提供了統(tǒng)一的運(yùn)行環(huán)境,使得用某種高級(jí)語言編寫的應(yīng)用程序可以在不同的操作系統(tǒng)和硬件上運(yùn)行,而不需要按照特定環(huán)境重寫應(yīng)用程序。 .NET 環(huán)境下程序編譯執(zhí)行過程 Traditional Compilation:Source CodeLanguage CompilerNative EXE DLLCompilationExecuting in OSExecutionCompilation and Execution in .NETSource codeCompilerVB.NETC+C#CompilerCompilerOperating System ServicesCommon Lan

46、guage RuntimeJIT CompilerNative CodeAssembliesManaged codeIL Code+MetadataIL Code+MetadataIL Code+MetadataUnmanagedComponentGarbage Collector具體的運(yùn)行過程:使用VB、C# 或任一種CLR支持的編程語言編寫應(yīng)用程序源代碼由編程語言對(duì)應(yīng)的編譯器將源代碼翻譯成一個(gè)程序集(Assembly)- .NET組件,為一EXE或DLL文件。這個(gè)程序集包括中間語言MSIL代碼、元數(shù)據(jù)和一個(gè)文件清單。MSIL代碼也簡(jiǎn)稱IL代碼,其特點(diǎn)是獨(dú)立于特定操作系統(tǒng)和硬件平臺(tái)。元數(shù)據(jù)詳

47、細(xì)描述了MSIL代碼正確執(zhí)行所需的各種相關(guān)數(shù)據(jù)類型,包括描述Assembly的信息,描述類型的信息,描述其它屬性的信息等。這樣就使.NET應(yīng)用程序代碼具備了自描述特性。清單則列出了程序集中的所有文件和軟件組件,同時(shí)指出了CLR在哪里可以找到應(yīng)用程序運(yùn)行時(shí)需要的其它組件。CLR加載IL代碼,同時(shí)收集有關(guān)應(yīng)用程序的事實(shí)信息。即時(shí)編譯器JIT將IL代碼動(dòng)態(tài)編譯成可執(zhí)行的本機(jī)代碼。不同的機(jī)器使用不同的JIT編譯器,所以同一個(gè)應(yīng)用程序的MSIL代碼經(jīng)不同機(jī)器的JIT編譯器編譯之后,便可以在不同的機(jī)器上執(zhí)行。Single file assemblyMulti-file assembly通用類型系統(tǒng)CLR借

48、助通用類型系統(tǒng)(Common Type System,CTS)對(duì)代碼類型進(jìn)行嚴(yán)格的安全檢查,避免了不同組件之間可能存在的類型不匹配的問題。5.2 .NET Framework 類庫.NET Framework類庫(FCL)是一套軟件組件,用于編寫在CLR控制下運(yùn)行的代碼。類庫分級(jí)組成了一個(gè)龐大的功能集,包括顯示圖形用戶界面、讀寫XML數(shù)據(jù)、在Internet上通信、訪問數(shù)據(jù)庫等多種功能。Same classes forall languages!5.3 .NET 的強(qiáng)命名程序集以前在Windows下開發(fā)程序時(shí)常會(huì)遭遇“DLL Hell”問題,即動(dòng)態(tài)鏈接庫的向后兼容問題。微軟在.Net產(chǎn)生前,使

49、用Guid來唯一的標(biāo)識(shí)每一個(gè)COM組件,為了運(yùn)行COM組件就必須在組冊(cè)表中對(duì)其進(jìn)行注冊(cè)。多個(gè)應(yīng)用程序可以共享相同的COM組件,當(dāng)COM組件版本升級(jí)時(shí),可能導(dǎo)致原來引用此COM組件的程序不能正確運(yùn)行,等等。在.Net中,微軟引入了一種新的解決方案:強(qiáng)命名程序集(Strong Name),以及與之配套的全局程序集緩存(GAC -Global Assembly Cache )來解決這個(gè)問題。強(qiáng)命名程序集:.Net使用Name、Version、Culture、PublicToken四個(gè)屬性來唯一標(biāo)識(shí)一個(gè)程序集。創(chuàng)建一個(gè)強(qiáng)命名程序集需要獲得一個(gè)用強(qiáng)命名實(shí)用工具(StrongNameUtility,即SN

50、.exe)產(chǎn)生的密鑰。全局程序集緩存(GAC): 如果一個(gè)Assembly要被多個(gè)應(yīng)用程序訪問,那么它就必須放在一個(gè)CLR已確知的目錄下,并且CLR在探測(cè)到有對(duì)該Assembly的引用時(shí),它必須能自動(dòng)到該目錄下尋找這個(gè)程序集。這個(gè)已確知的目錄稱作GAC,就是全局程序集緩存。它一般位于下面的目錄下:C:WindowsAssembly 使用gacutil.exe命令可以將具有強(qiáng)命名的程序集添加到全局程序集緩存。命令行下看到的GAC在開發(fā)一般的、非共享的程序時(shí),不需要使用強(qiáng)命名的程序集,僅將項(xiàng)目(Project)編譯成.DLL或者.EXE即可。但是,如果開發(fā)的是組件庫、框架時(shí),通過對(duì)程序集進(jìn)行強(qiáng)命名

51、,并將其部署到GAC中,可以保證程序集不會(huì)出現(xiàn)版本問題。6 .NET組件與COM組件的互操作COM Model.NET Model Type libraries MetadataDLLAssembliesInterface basedObject basedGUIDsStrong namesQueryInterface CastReference countingMemory management(Garbage collection)RegistryGlobal Assembly Cache (gacutil.exe可以將具有強(qiáng)命名的程序集添至全局程序集緩存)本節(jié)內(nèi)容:COM包裝(COM W

52、rappers)ESRI提供的Primary Interop Assemblies 向COM公開.NET對(duì)象COM到.NET的類型轉(zhuǎn)換6.1 COM包裝(COM Wrappers)為了實(shí)現(xiàn)傳統(tǒng)的COM程序與.NET程序之間的相互調(diào)用,.NET提供了兩個(gè)包裝類:運(yùn)行時(shí)可調(diào)用包裝(runtime callable wrapper,RCW)和COM可調(diào)用包裝(COM callable wrapper,CCW)。每當(dāng)一個(gè).NET客戶程序調(diào)用一個(gè)COM對(duì)象的方法時(shí)就會(huì)創(chuàng)建一個(gè)RCW對(duì)象;相反,每當(dāng)一個(gè)COM客戶程序調(diào)用一個(gè).NET對(duì)象的方法時(shí)就會(huì)創(chuàng)建一個(gè)CCW對(duì)象。6.2 ESRI提供的Primary

53、Interop Assemblies Primary interop assemblies(PIAs,主互操作程序集)是COM軟件廠商提供的為其COM組件在.NET環(huán)境下運(yùn)行的互操作程序集,PIAs暴露COM組件中的所有類、接口和常量,作為 .NET 托管類。ESRI為所有的ArcObjects類型庫提供了PIAs,ArcGIS的.NET開發(fā)人員只能使用這些安裝在GAC (Global Assembly Cache,缺省安裝目錄為C:WINDOWSassembly)下的PIAs. 這些PIAs的公鑰標(biāo)記(public key)為8FC3CC631E44AD86.Controls PIAsStr

54、ongly named assemblies provide an RCW for each Engine ActiveX control. RCW class inherits .NET Framework AxHost class. Allows controls to be hosted on Windows forms6.3 向COM公開.NET對(duì)象Registering .NET Components with COMRegistering .NET Classes in COM Component Categories6.3.1 注冊(cè).NET組件使用定制的.NET組件來擴(kuò)展ArcG

55、IS應(yīng)用程序,需要在COM注冊(cè)表中注冊(cè).NET組件,并將.NET的程序集輸出為COM的類型庫(tlb),完成這一任務(wù)有兩條途徑:一是使用.NET Framework提供的Regasm工具二是使用Visual Studio.NET開發(fā)環(huán)境(Register for COM Interop)。程序集注冊(cè) (Regasm.exe) 的命令行工具用來注冊(cè)或注銷與 COM 一起使用的程序集。Regasm.exe 會(huì)將有關(guān)類的信息添加到系統(tǒng)注冊(cè)表中,以便 COM 客戶端透明地使用 .NET 類。例如:regasm EditTools.dll /tlb:EditTools.tlb /codebase在Vis

56、ual Studio.NET開發(fā)環(huán)境中,通過下列步驟來來自動(dòng)完成.NET組件的注冊(cè):在“解決方案資源管理器”中,鼠標(biāo)右鍵點(diǎn)擊要注冊(cè)的項(xiàng)目(即正在開發(fā)的.NET組件), 然后點(diǎn)擊“屬性”;在項(xiàng)目“屬性頁”對(duì)話框中,點(diǎn)擊“生成”,在右邊的窗格中,選中“為COM Interop注冊(cè)” ,點(diǎn)擊“確定”按鈕,即可完成.NET組件的自動(dòng)注冊(cè)。6.3.2 在COM組件類目中注冊(cè).NET類大量的ArcGIS擴(kuò)展都依賴COM組件類目。事實(shí)上,大部分定制的ArcGIS組件類必須注冊(cè)到合適的COM組件類目中才能正常使用,例如,所有的ArcMap命令和工具必須注冊(cè)到“ESRI Mx Commands”組件類目中。 可

57、以通過下列途徑將.Net 類注冊(cè)到COM組件類目中。定制對(duì)話框組件類目管理工具ArcGIS Component Category Registrar使用COM注冊(cè)函數(shù)(COMRegisterFunction)定制對(duì)話框在.NET環(huán)境下自定義的ArcGIS命令和工具可以通過ArcGIS的Customize對(duì)話框中的Add From File按鈕快速地添加到工具條中。在這種情況下,只需要簡(jiǎn)單地瀏覽一下TLB并打開它。ArcGIS框架會(huì)自動(dòng)地將從類型庫中選中的類添加到合適的組件類目中。組件類目管理工具使用Component Catesories Manager(Categories.exe),瀏覽類

58、型庫,并選擇合適的類目。 ArcGIS Component Category RegistrarThis dialog box, as part of the ArcGIS Visual Studio integrated development environment (IDE) Integration Framework, allows you to register classes in the current project to ESRI component categories. 使用COM注冊(cè)函數(shù)(COMRegisterFunction)添加注冊(cè)代碼到.NET類中,這樣每當(dāng)注冊(cè).NET組件的時(shí)候,會(huì)在特定的組件類目中自動(dòng)注冊(cè).NET類。.NET Framework類庫中包含兩個(gè)屬性類(ComRegisterFunction和ComUnregisterFunction),它們?cè)试S用戶指定方法注冊(cè)或注銷.NET類。 在組件類目?jī)?nèi)注

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論