




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ù)庫(kù)理論與GMLGIS
2、 空間數(shù)據(jù)集成與共享 GIS應(yīng)用開發(fā),科研項(xiàng)目,國(guó)家自然科學(xué)基金項(xiàng)目-面向GML的時(shí)空關(guān)聯(lián)規(guī)則及序列模式挖掘研究(編號(hào):40971234) ,35萬(wàn)元,主持 國(guó)家自然科學(xué)基金項(xiàng)目-本原GML空間數(shù)據(jù)庫(kù)理論及GMLGIS與傳統(tǒng)GIS集成研究(編號(hào):40761017) ,16萬(wàn)元,主持 國(guó)家自然科學(xué)基金項(xiàng)目 - GML空間數(shù)據(jù)存儲(chǔ)索引機(jī)制研究(編號(hào):40401045) ,26萬(wàn)元,排名第二 地理信息科學(xué)江蘇省重點(diǎn)實(shí)驗(yàn)室開發(fā)基金項(xiàng)目 -面向?qū)ο蟮腉ML空間數(shù)據(jù)庫(kù)及其應(yīng)用研究(編號(hào):JK20050302) ,5萬(wàn)元主持 江西省教育廳科技項(xiàng)目GML空間數(shù)據(jù)庫(kù)理論及GMLGIS研究,1萬(wàn)元,主持 萍鄉(xiāng)市基
3、礎(chǔ)地理信息系統(tǒng)研究與開發(fā),22萬(wàn)元,主持 城市公眾地理信息服務(wù)系統(tǒng)研究與開發(fā),10萬(wàn)元,主持,教學(xué)目標(biāo),GIS應(yīng)用開發(fā)課程是GIS本科生、研究生重要的專業(yè)課程,通過(guò)課程的學(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í)間安排,教材及參考材料,教材: 基于ArcObjects與C#.NET的GIS應(yīng)用開發(fā),蘭小機(jī)等編著,冶金工業(yè)出版社,2011年12月 最新課件 參考材料: ArcObjects SDK 10 Microsoft .NET Framework Ar
4、cGIS 開發(fā)工具包中的文檔,包括ArcGIS開發(fā)幫助、組件幫助、對(duì)象模型圖和示例,學(xué)習(xí)基礎(chǔ),熟練掌握ArcGIS Desktop(ArcMap、ArcCatalog)基本操作; 了解Geodatabase、ArcSDE基本概念; 會(huì)用C#進(jìn)行程序設(shè)計(jì)。,課程考核,開發(fā)一個(gè)小型的GIS應(yīng)用系統(tǒng),按GIS軟件工程的要求進(jìn)行設(shè)計(jì),并提供完整的設(shè)計(jì)開發(fā)方案,開發(fā)的小系統(tǒng)應(yīng)具備GIS的基本功能,主要包括: 打開、保存地圖文檔、添加數(shù)據(jù) 自定義命令、工具、菜單 空間數(shù)據(jù)符號(hào)化 空間數(shù)據(jù)管理 空間查詢與空間分析 空間數(shù)據(jù)編輯功能:基本編輯功能、高級(jí)編輯功能,計(jì)算機(jī)組件技術(shù),組件GIS,組件式的GIS應(yīng)用開
5、發(fā),Chap.1 Fundamentals of developing with ArcObjects,ArcGIS 系列產(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 Engine ArcGIS Server ArcGIS Mobile,開發(fā)類型: To customize or extend the ArcGIS Desktop app
6、lications Tobuild standalone mapping applications To develop Web applications,1.1 ArcGIS Desktop及其擴(kuò)展,ArcGIS Desktop是GIS專業(yè)人員編輯、使用和管理地理信息的主要平臺(tái),它按功能分為三個(gè)不同級(jí)別的產(chǎn)品: ArcView ArcEditor ArcInfo 每個(gè)產(chǎn)品主要包括:ArcMap、ArcCatlog、ArcGlobe、ArcScene桌面應(yīng)用程序.,ArcGIS桌面應(yīng)用程序定制/擴(kuò)展方式 使用ArcGIS桌面應(yīng)用程序的定制功能(Customzie),配置應(yīng)用程序界面; 使用Py
7、thon 腳本,自動(dòng)化GIS工作流 開發(fā)插件( add-in),定制/擴(kuò)展ArcGIS 桌面應(yīng)用程序 開發(fā)定制組件,擴(kuò)展ArcGIS 桌面應(yīng)用程序,1.1.1 使用Python 腳本,自動(dòng)化GIS工作流,Python 是一種免費(fèi)的、跨平臺(tái)的開源編程語(yǔ)言,它功能強(qiáng)大且簡(jiǎn)單易學(xué),因而得到了廣泛應(yīng)用和支持。 ESRI 已將 Python 完全納入 ArcGIS 中,成為了一種用于數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化的語(yǔ)言,因而有助于提高工作效率。 易于學(xué)習(xí),非常適合初學(xué)者,也特別適合專家使用 可伸縮程度高,適于大型項(xiàng)目或小型的一次性程序(稱為腳本) 可移植,跨平臺(tái) 可嵌入(使 ArcGIS 可腳
8、本化) 穩(wěn)定成熟 用戶社區(qū)規(guī)模大,ArcGIS中的Python,Python是地理處理框架的重要組成,Python在ArcGIS中的發(fā)展,ArcPy,ArcPy -ArcGIS新的Python庫(kù) 由arcgisscripting升級(jí)而來(lái) 包含有函數(shù)(Function)、類(Class)和模塊(Module) 功能實(shí)現(xiàn) 能訪問(wèn)所有g(shù)p工具 數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理 數(shù)據(jù)分析 自動(dòng)化制圖,ArcPy詳細(xì)參考: ArcGIS Desktop 10幫助專業(yè)庫(kù)地理處理ArcPy站點(diǎn)包,ArcPy 模塊 模塊為通常包含函數(shù)和類的 Python 文件。有一系列模塊支持 ArcPy,包括制圖模塊 (arcpy.ma
9、pping)、Spatial Analyst 模塊 (arcpy.sa) 和Geostatistical Analyst 模塊 (arcpy.ga)。 ArcPy 類 ArcPy 類,如 SpatialReference 和 Extent 類,通常用作地理處理工具參數(shù)設(shè)置的快捷方式,否則的話,這些參數(shù)會(huì)使用更加復(fù)雜的字符串。,ArcPy 函數(shù) 函數(shù)是用于執(zhí)行某項(xiàng)特定任務(wù)程序單元。 在 ArcPy 中,所有地理處理工具均以函數(shù)形式提供,但并非所有函數(shù)都是地理處理工具。除工具之外,ArcPy 還提供多種函數(shù)來(lái)更好地支持 Python 地理處理工作流。函數(shù)或方法可用于列出某些數(shù)據(jù)集、檢索數(shù)據(jù)集的屬性
10、、在將表添加到地理數(shù)據(jù)庫(kù)之前驗(yàn)證表名稱,或執(zhí)行其他許多有用的腳本任務(wù)。,獨(dú)立的 Python 腳本 Python 腳本是可以執(zhí)行的 .py 文件。獨(dú)立 Python 腳本可通過(guò)兩種方式執(zhí)行:通過(guò)操作系統(tǒng)提示或開發(fā)應(yīng)用程序(如 PythonWin),或在 Windows 資源管理器中雙擊 .py 文件。 Python 腳本工具 Python 腳本工具是已添加到地理處理工具箱的 Python 腳本。添加為腳本工具后,便可以像使用其他地理處理工具一樣使用此腳本工具 - 可以從工具對(duì)話框打開和執(zhí)行、可以在 Python 窗口和 ModelBuilder 中使用,并可以從其他腳本和腳本工具中調(diào)用。,Py
11、thon 窗口 ArcGIS 10使用 Python 窗口代替原來(lái)的命令行窗口, 通過(guò)Python窗口,用戶可以快捷地在 ArcGIS 內(nèi)部使用 Python,從而以交互方式運(yùn)行地理處理工具和功能以及充分利用其他 Python 模塊和庫(kù)。此窗口還為用戶學(xué)習(xí) Python 提供了一個(gè)途徑。 Python窗口提供了智能感知和代碼自動(dòng)完成功能.,簡(jiǎn)單實(shí)例:,ArcGIS引入了后臺(tái)地理處理(Background Geoprocessing)的概念,允許Geoprocessing工具、ArcGIS操作同時(shí)運(yùn)行(使用多核CPU)。,1.1.2 使用DLL組件擴(kuò)展ArcGIS桌面,使用DLL組件擴(kuò)展ArcG
12、IS桌面的優(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.,使用DLL組件擴(kuò)展ArcGIS桌面 開發(fā)插件( add-in),定制/擴(kuò)展ArcGIS 桌面應(yīng)用程序(New in ArcGIS 10) 開發(fā)定制組件,擴(kuò)展ArcGIS 桌面應(yīng)用程序,A
13、rcGIS Desktop Add-in,Add-in是一種能夠快速擴(kuò)展桌面應(yīng)用程序功能的全新擴(kuò)展方式 更加容易創(chuàng)建 更加容易共享 更加安全 更易安裝管理,ArcGIS 10 Add-in所支持的類型 按鈕和工具 組合框 菜單和右鍵菜單 Multi-items 工具條 Tool palettes 可停靠窗體 Application extensions Editor extensions,ArcGIS 10 Add-in支持的開發(fā)環(huán)境 Visual Studio 2008 + .Net3.5 Visual Studio 2010 + .Net3.5或者.Net4.0 Visual Basic/
14、C# 2008 Express Edition + .Net3.5 Visual Basic/C# 2010 Express Edition +.Net3.5 或者.Net4.0 Eclipse IDE for Java Developers,XML Metadata( Config.esriaddinx ),Add-in的部署 復(fù)制/郵件發(fā)送編譯好的esriaddin文件到需要部署機(jī)器上(已經(jīng)安裝好ArcGIS 桌面); 在部署機(jī)器上雙擊esriaddin文件,彈出Add-in安裝界面,讓用戶查看該插件的一些元信息,然后讓用戶決定是否安裝該插件;安裝插件是不需要重啟任何ArcGIS Desk
15、top應(yīng)用程序的。安裝完之后,就可以通過(guò)相應(yīng)ArcGIS Desktop應(yīng)用程序的Add-in Manager來(lái)查看已安裝的Add-in,也可以通過(guò)它來(lái)卸載。 一些Add-in所包含的對(duì)象,例如Command、Tool、Toolbar,是需要用戶通過(guò)Customize窗口定制添加到界面上的。Extension對(duì)象,則需要用戶通過(guò)Extensions窗口勾選加載。,Add-in共享與安全,實(shí)現(xiàn)局域網(wǎng)內(nèi)共享,設(shè)置共享目錄、設(shè)置安全級(jí)別,Add-in 數(shù)字簽名,工具:ESRISignAddin.exe C:Program FilesCommon FilesArcGISbinESRISignAddIn
16、.exe,1.2 ArcGIS Engine,ArcGIS Engine是一個(gè)完整的嵌入GIS組件庫(kù)和工具,開發(fā)人員可以用來(lái)創(chuàng)建新的獨(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ò)展模塊來(lái)進(jìn)行擴(kuò)展。,ArcGIS Engine支持Windows平臺(tái)及跨平臺(tái)開發(fā)。 Windows平臺(tái)開發(fā),有以下
17、APIs: .NET VC+ 跨平臺(tái)開發(fā),有以下APIs: Java C+ for Windows C+ for Solaris/Linux,使用ArcGIS Engine控件開發(fā)獨(dú)立的GIS應(yīng)用,Using the Winforms ArcGIS Engine controls Using ArcGIS Engine Controls in WPF (New in ArcGIS 10),1.3 ArcGIS Server,ArcGIS Server 是功能強(qiáng)大的基于服務(wù)器的 GIS 產(chǎn)品,用于構(gòu)建集中管理的、支持多用戶的、具備高級(jí)GIS功能的企業(yè)級(jí)GIS應(yīng)用與服務(wù)。 開發(fā)者使用ArcGIS
18、Server可以構(gòu)建Web應(yīng)用、Web服務(wù)、以及其它運(yùn)行在標(biāo)準(zhǔn)的.NET和J2EE Web服務(wù)器上的企業(yè)應(yīng)用。 ArcGIS Server包含兩個(gè)主要部分:GIS服務(wù)器和多種的開發(fā)框架。,ArcGIS Server提供的開發(fā)環(huán)境:,ArcGIS Server SDK for .NET and Java ArcGIS JavaScript API ArcGIS JavaScript extension for the Google Maps API ArcGIS JavaScript extension for Bing Maps ArcGIS API for Microsoft Silverl
19、ight/Windows Presentation Foundation (WPF) ArcGIS API for Flex ArcGIS Server Representational State Transfer (REST) API ArcGIS Server Simple Object Access Protocol (SOAP) SDK,1.4 Mobile GIS,ArcGIS技術(shù)可以部署到一系列的移動(dòng)設(shè)備上,從輕量級(jí)的設(shè)備到PDA、筆記本電腦以及平板電腦。在野外工作中使用GIS,主要依靠將應(yīng)用程序定制成簡(jiǎn)單的移動(dòng)工作任務(wù)以及對(duì)中心GIS Web服務(wù)器的無(wú)線訪問(wèn)。,ArcGIS為用
20、戶提供了三種移動(dòng)GIS解決方案。 ArcGIS Desktop和使用ArcGIS Engine建立的應(yīng)用程序:這種方案常常部署在用于野外的筆記本電腦或者平板電腦上。 ArcPad: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)境的模板、向
21、導(dǎo)、命令、代碼段等。 ArcGIS開發(fā)包的安裝 ArcGIS桌面開發(fā)包ArcObjects(AO) ArcGIS Engine開發(fā)包- ArcGIS Engine(AE) ArcGIS Server開發(fā)包 ArcGIS開發(fā)包安裝后 VS IDE集成框架(開發(fā)環(huán)境元素) 開發(fā)類庫(kù) 開發(fā)文檔,ArcGIS Visual Studio IDE Integration Framework ArcGIS Visual Studio IDE Integration Framework for add-ins(New in ArcGIS 10) ArcGIS Visual Studio IDE Integr
22、ation Framework for extending ArcObjects ArcGIS Visual Studio IDE Integration Framework for server object extensions Web Mapping Application,2.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 Integrat
23、ion Framework for extending ArcObjects,ArcGIS VS IDE 集成框架元素: ArcGIS Project templates (項(xiàng)目模板) ArcGIS Project wizard ArcGIS Item templates (類模板) ArcGIS Add Class wizard ArcGIS Snippets ArcGIS Reference dialog box ArcGIS Component Category Registrar dialog box ArcGIS License Initializer dialog box ArcG
24、IS Toolbox Reference dialog box ArcGIS .Net Code Converter Toolbox configuration,2.1 ArcGIS Project templates(項(xiàng)目模板),The following are the available project templates: Desktop: Windows Application Console Application Class Library (General) Class Library (ArcMap) Class Library (ArcCatalog) Class Libr
25、ary (ArcScene) Class Library (ArcGlobe) Engine: Windows Application Console Application Class Library (General) MapControl Application GlobeControl Application server object extensions REST SOAP Server Web Application Web Mapping Application,Toolbox configuration:Adds ArcGIS controls in the Visual S
26、tudio Toolbox window.,ArcGIS Project wizard(項(xiàng)目向?qū)?,當(dāng)使用ArcGIS 項(xiàng)目模板來(lái)創(chuàng)建一個(gè)新項(xiàng)目時(shí), ArcGIS 項(xiàng)目向?qū)?huì)自動(dòng)打開,通過(guò)自動(dòng)添加ArcGIS引用及許可初始化代碼,來(lái)幫助你高效地搭建新的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)選
27、擇“ArcGIS Class”模板后,添加類向?qū)?huì)自動(dòng)顯示,指導(dǎo)你完成類的創(chuàng)建。,ArcGIS Add Class Wizard include the following 3 steps: Base Implementation option Component Category option Optional Interfaces option,Base Implementation option Customization group Base component,Component Category option Categories Category properties,Optio
28、nal Interfaces option Available optional interfaces Selected interfaces,2.4 ArcGIS Reference dialog box,2.5 ArcGIS Component Category Registrar dialog box,2.6 ArcGIS License Initializer dialog box,不管是ArcGIS桌面應(yīng)用程序還是獨(dú)立的GIS應(yīng)用程序,在訪問(wèn)ArcObjects 組件之前,需要明確地使用合適的ArcGIS 產(chǎn)品許可進(jìn)行初始化。 開發(fā)人員可以使用“ArcGIS License Init
29、ializer dialog box”來(lái)產(chǎn)生并添加許可初始化代碼到項(xiàng)目中的適當(dāng)位置。 但如果選用項(xiàng)目模板,創(chuàng)建過(guò)程中包含選擇合適的產(chǎn)品許可選項(xiàng)。,2.7 ArcGIS Toolbox Reference dialog box,This dialog box allows 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
30、set up and run geoprocessing tools.,2.8 Snippets in ArcGIS for .NET developers,為了幫助ArcGIS軟件開發(fā)人員進(jìn)一步提高軟件的開發(fā)效率,“ArcGIS Visual Studio IDE Integration Framework”提供了可重用的代碼段供開發(fā)人員使用。 ArcGIS 10 offers a fully integrated ArcGIS Snippet insertion and finder tool.,C:Program FilesMicrosoft Visual Studio 10.0VC#S
31、nippetsArcObjects VS- -工具- -代碼段管理器(T),使用代碼段,管理代碼段,編輯、重建、查找代碼段 ArcGIS Snippet Editor Manager ArcGIS Snippet Editor Wizard ArcGIS Snippet Finder,在VS中根據(jù)已有代碼生成Snippet,2.9 Walkthrough: Create a command by inheriting from BaseCommand,Create a simple command that zooms the extent of the selected layer Crea
32、te a new class library Add references Create a ZoomToLayer command Change the default icon bitmap Inherit the BaseCommand abstract class Add code to the overridden constructor of BaseCommand Add the ZoomToLayer functionality Expose the ZoomToLayer class to COM Compile the project Use the command in
33、ArcMap Debugging the command,Demo: Creating a command that zooms the extent of the selected layer Snippets,3 ArcObjects基礎(chǔ),ArcObjects簡(jiǎn)介 ArcObjects的組件庫(kù) 理解對(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等
34、開發(fā)環(huán)境。 ArcObjects不是為最終用戶而是專門為開發(fā)人員提供的二次開發(fā)組件。 ArcObjects是ArcGIS系列產(chǎn)品的基礎(chǔ),大部分ArcGIS產(chǎn)品都是由ArcObjects構(gòu)建的。,3.2 ArcObjects的組件庫(kù),ArcObjects是一套龐大的COM組件集合,ArcGIS 各版本各種COM類型統(tǒng)計(jì)見(jiàn)下表:,為了更好地管理ArcObjects中數(shù)目眾多的COM對(duì)象,ESRI將它們放置在不同的組件庫(kù)中,對(duì)于.NET 來(lái)說(shuō),一個(gè)組件庫(kù)就是一個(gè)assembly(程序集),一個(gè)assembly有多個(gè)不同的命名空間。如ESRI.ArcGIS.ADF Assembly 的Namespac
35、es: ESRI.ArcGIS.ADF ESRI.ArcGIS.ADF.BaseClasses ESRI.ArcGIS.ADF.CATIDs ESRI.ArcGIS.ADF.COMSupport ESRI.ArcGIS.ADF.Resources,ArcObjects 10的組件庫(kù)共65個(gè)(65assemblies ),詳細(xì)內(nèi)容參見(jiàn)Learning ArcObjects、ArcObjects SDK API Reference 如果不記得某個(gè)接口或?qū)ο髮儆谀膫€(gè)命名空間的時(shí)候,可以通過(guò)開發(fā)幫助查找。,3.3 理解對(duì)象模型圖,ESRI提供了多種方法讓用戶了解ArcObjects組件及不同組件之間的
36、關(guān)系 ESRI提供的一系列OMD的PDF文件 開發(fā)幫助、API Reference VS.NET中的對(duì)象瀏覽器,通過(guò)閱讀ArcObjects的對(duì)象模型圖 (Object Model Diagram,OMD) ,可以快速了解ArcObjects的結(jié)構(gòu)和不同組件之間的關(guān)系。 OMD使用UML(Unified Modeling Language,統(tǒng)一建模語(yǔ)言)描述,它補(bǔ)充了在對(duì)象瀏覽器中看不到的信息,可以幫助程序員了解類之間的關(guān)系,如何從一個(gè)類到另一個(gè)類,選擇正確的接口,獲取需要的屬性和方法等。,VS 中的對(duì)象瀏覽器,3.3.1 類與對(duì)象,在ArcObjects中存在三種類型的類: 抽象類(Abst
37、ract 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)鍵字來(lái)完成。,3.3.2 類與類的關(guān)系,ArcObjects的類之間存在四種關(guān)系 依賴關(guān)系 關(guān)聯(lián)關(guān)系 組合關(guān)系 類型繼承,WorkspaceFactory,Workspace,MapControl,Map,Map,Layer,*,Curve,Segment,
38、Path,PolyCurve,4 組件對(duì)象模型,軟件開發(fā)歷史 什么是組件對(duì)象模型,4.1 軟件開發(fā)歷史,軟件重用和開發(fā)效率始終是軟件開發(fā)的核心問(wèn)題。 在早期(面向過(guò)程語(yǔ)言),人們?yōu)榱酥赜茫瑢⒁恍┗镜臄?shù)學(xué)計(jì)算函數(shù)和界面設(shè)計(jì)函數(shù)設(shè)計(jì)成函數(shù)庫(kù),讓其他軟件開發(fā)人員調(diào)用。它為應(yīng)用開發(fā)者提供了方便,但是重用的粒度太小。 面向?qū)ο笳Z(yǔ)言的出現(xiàn),提高編程的粒度。面向?qū)ο笳Z(yǔ)言的基本單位是類,它封裝了數(shù)據(jù)成員和函數(shù)成員 ,將最小組件的粒度提高了一個(gè)等級(jí)。但是,一個(gè)類提供了很多種方法和屬性,使用和管理很不方便。,COM技術(shù)(接口)的出現(xiàn),解決了以上問(wèn)題,將類的內(nèi)部屬性和方法進(jìn)行分類。例如在Map類中有好幾個(gè)接口,在
39、這些接口中定義不同功能組的方法和屬性,Map實(shí)現(xiàn)了這些接口,這樣就可以使用接口進(jìn)行定義。但COM也存在一個(gè)嚴(yán)重的問(wèn)題:DLL災(zāi)難。 .NET 技術(shù)的出現(xiàn)解決了“DLL災(zāi)難”問(wèn)題。,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 Architecture,CO
40、RBA)。,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)。使用者可以通過(guò)接口來(lái)訪問(wè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的不同類型的方法
41、、屬性,因此從一個(gè)接口可以使用的屬性方法轉(zhuǎn)到另一個(gè)接口可以使用的屬性方法的過(guò)程稱為QI。這個(gè)過(guò)程也是由IUnknown接口管理的。 IMap pMap ; IActiveView pActiveView ; pMap = axMapControl1.Map; /獲取控件中的地圖 pActiveView = pMap as IActiveView; /QI (Or pActiveView = (IActiveView)pMap ; ) ,每個(gè)組件都有一個(gè)獨(dú)一無(wú)二的標(biāo)識(shí)GUID。接口的GUID稱為IID,而組件類的GUID稱為CLSID。CLSID還有一個(gè)文本別名,即所謂的ProgID,它是一個(gè)由
42、項(xiàng)目名加組件類類名組成的字符串。 一個(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 (IPolygo
43、n pPolygon) 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è)程序無(wú)法使用新組件,導(dǎo)致程序不能運(yùn)行的情況,這種情況被稱為“DLL HELL”(DLL災(zāi)難)。,5 .NET平臺(tái)概述,針對(duì)Windows平臺(tái)存在的缺陷,微軟提出了全新的.NET技術(shù)體
44、系,其主要包括 .NET Framework Visual Studio.NET,Visual 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ǔ)言運(yùn)行時(shí)(Common Language Runtime-CLR),是 .NET Framework 的基礎(chǔ) .NET Framework 類庫(kù)。,.NET Framework體系結(jié)構(gòu),5.1 通用語(yǔ)言
45、運(yùn)行時(shí)(CLR),通用語(yǔ)言運(yùn)行時(shí)管理內(nèi)存、線程執(zhí)行、代碼執(zhí)行、代碼安全驗(yàn)證、編譯以及其他系統(tǒng)服務(wù)。 CLR處于.NET Framework的最底層,是.NET Framework的基礎(chǔ),它為C#.NET、VB.NET、C+、J#等多種語(yǔ)言提供了統(tǒng)一的運(yùn)行環(huán)境,使得用某種高級(jí)語(yǔ)言編寫的應(yīng)用程序可以在不同的操作系統(tǒng)和硬件上運(yùn)行,而不需要按照特定環(huán)境重寫應(yīng)用程序。,.NET 環(huán)境下程序編譯執(zhí)行過(guò)程,Traditional Compilation:,Compilation and Execution in .NET,具體的運(yùn)行過(guò)程: 使用VB、C# 或任一種CLR支持的編程語(yǔ)言編寫應(yīng)用程序源代碼 由編
46、程語(yǔ)言對(duì)應(yīng)的編譯器將源代碼翻譯成一個(gè)程序集(Assembly)- .NET組件,為一EXE或DLL文件。這個(gè)程序集包括中間語(yǔ)言MSIL代碼、元數(shù)據(jù)和一個(gè)文件清單。 MSIL代碼也簡(jiǎn)稱IL代碼,其特點(diǎn)是獨(dú)立于特定操作系統(tǒng)和硬件平臺(tái)。 元數(shù)據(jù)詳細(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)編
47、譯成可執(zhí)行的本機(jī)代碼。不同的機(jī)器使用不同的JIT編譯器,所以同一個(gè)應(yīng)用程序的MSIL代碼經(jīng)不同機(jī)器的JIT編譯器編譯之后,便可以在不同的機(jī)器上執(zhí)行。,Single file assembly,Multi-file assembly,通用類型系統(tǒng),CLR借助通用類型系統(tǒng)(Common Type System,CTS)對(duì)代碼類型進(jìn)行嚴(yán)格的安全檢查,避免了不同組件之間可能存在的類型不匹配的問(wèn)題。,5.2 .NET Framework 類庫(kù),.NET Framework類庫(kù)(FCL)是一套軟件組件,用于編寫在CLR控制下運(yùn)行的代碼。類庫(kù)分級(jí)組成了一個(gè)龐大的功能集,包括顯示圖形用戶界面、讀寫XML數(shù)據(jù)、
48、在Internet上通信、訪問(wèn)數(shù)據(jù)庫(kù)等多種功能。,5.3 .NET 的強(qiáng)命名程序集,以前在Windows下開發(fā)程序時(shí)常會(huì)遭遇“DLL Hell”問(wèn)題,即動(dòng)態(tài)鏈接庫(kù)的向后兼容問(wèn)題。 微軟在.Net產(chǎn)生前,使用Guid來(lái)唯一的標(biāo)識(shí)每一個(gè)COM組件,為了運(yùn)行COM組件就必須在組冊(cè)表中對(duì)其進(jìn)行注冊(cè)。多個(gè)應(yīng)用程序可以共享相同的COM組件,當(dāng)COM組件版本升級(jí)時(shí),可能導(dǎo)致原來(lái)引用此COM組件的程序不能正確運(yùn)行,等等。 在.Net中,微軟引入了一種新的解決方案:強(qiáng)命名程序集(Strong Name),以及與之配套的全局程序集緩存(GAC -Global Assembly Cache )來(lái)解決這個(gè)問(wèn)題。,強(qiáng)命
49、名程序集:.Net使用Name、Version、Culture、PublicToken四個(gè)屬性來(lái)唯一標(biāo)識(shí)一個(gè)程序集。 創(chuàng)建一個(gè)強(qiáng)命名程序集需要獲得一個(gè)用強(qiáng)命名實(shí)用工具(StrongNameUtility,即SN.exe)產(chǎn)生的密鑰。 全局程序集緩存(GAC): 如果一個(gè)Assembly要被多個(gè)應(yīng)用程序訪問(wèn),那么它就必須放在一個(gè)CLR已確知的目錄下,并且CLR在探測(cè)到有對(duì)該Assembly的引用時(shí),它必須能自動(dòng)到該目錄下尋找這個(gè)程序集。這個(gè)已確知的目錄稱作GAC,就是全局程序集緩存。它一般位于下面的目錄下:C:WindowsAssembly 使用gacutil.exe命令可以將具有強(qiáng)命名的程序集
50、添加到全局程序集緩存。,命令行下看到的GAC,在開發(fā)一般的、非共享的程序時(shí),不需要使用強(qiáng)命名的程序集,僅將項(xiàng)目(Project)編譯成.DLL或者.EXE即可。但是,如果開發(fā)的是組件庫(kù)、框架時(shí),通過(guò)對(duì)程序集進(jìn)行強(qiáng)命名,并將其部署到GAC中,可以保證程序集不會(huì)出現(xiàn)版本問(wèn)題。,6 .NET組件與COM組件的互操作,本節(jié)內(nèi)容:,COM包裝(COM Wrappers) 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提供
51、了兩個(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 Interop Assemblies,Primary interop assemblies(PIAs,主互操作程序集)是COM軟件廠商提供的為其COM組件在.NET環(huán)境下運(yùn)行的互操作程序集,PIAs暴露COM組件中的所有類、接口和常量,作為 .
52、NET 托管類。 ESRI為所有的ArcObjects類型庫(kù)提供了PIAs,ArcGIS的.NET開發(fā)人員只能使用這些安裝在GAC (Global Assembly Cache,缺省安裝目錄為C:WINDOWSassembly)下的PIAs. 這些PIAs的公鑰標(biāo)記(public key)為8FC3CC631E44AD86.,Controls PIAs,Strongly named assemblies provide an RCW for each Engine ActiveX control. RCW class inherits .NET Framework AxHost class.
53、Allows controls to be hosted on Windows forms,6.3 向COM公開.NET對(duì)象,Registering .NET Components with COM Registering .NET Classes in COM Component Categories,6.3.1 注冊(cè).NET組件,使用定制的.NET組件來(lái)擴(kuò)展ArcGIS應(yīng)用程序,需要在COM注冊(cè)表中注冊(cè).NET組件,并將.NET的程序集輸出為COM的類型庫(kù)(tlb),完成這一任務(wù)有兩條途徑: 一是使用.NET Framework提供的Regasm工具 二是使用Visual Studio.N
54、ET開發(fā)環(huán)境(Register for COM Interop)。 程序集注冊(cè) (Regasm.exe) 的命令行工具用來(lái)注冊(cè)或注銷與 COM 一起使用的程序集。Regasm.exe 會(huì)將有關(guān)類的信息添加到系統(tǒng)注冊(cè)表中,以便 COM 客戶端透明地使用 .NET 類。例如: regasm EditTools.dll /tlb:EditTools.tlb /codebase,在Visual Studio.NET開發(fā)環(huán)境中,通過(guò)下列步驟來(lái)來(lái)自動(dòng)完成.NET組件的注冊(cè): 在“解決方案資源管理器”中,鼠標(biāo)右鍵點(diǎn)擊要注冊(cè)的項(xiàng)目(即正在開發(fā)的.NET組件), 然后點(diǎn)擊“屬性”; 在項(xiàng)目“屬性頁(yè)”對(duì)話框中,點(diǎn)
55、擊“生成”,在右邊的窗格中,選中“為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”組件類目中。 可以通過(guò)下列途徑將.Net 類注冊(cè)到COM組件類目中。 定制對(duì)話框 組件類目管理工具 ArcGIS Component Category Registrar 使用COM注冊(cè)函數(shù)(COMRegisterFuncti
56、on),定制對(duì)話框,在.NET環(huán)境下自定義的ArcGIS命令和工具可以通過(guò)ArcGIS的Customize對(duì)話框中的Add From File按鈕快速地添加到工具條中。 在這種情況下,只需要簡(jiǎn)單地瀏覽一下TLB并打開它。ArcGIS框架會(huì)自動(dòng)地將從類型庫(kù)中選中的類添加到合適的組件類目中。,組件類目管理工具,使用Component Catesories Manager(Categories.exe),瀏覽類型庫(kù),并選擇合適的類目。,ArcGIS Component Category Registrar,This dialog box, as part of the ArcGIS Visual S
57、tudio 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類庫(kù)中包含兩個(gè)屬性類(ComRegisterFunction和ComUnregisterFunction),它們?cè)试S用戶指定方法注冊(cè)或注銷.NET類。 在組件類目?jī)?nèi)注冊(cè)一個(gè)組件類,需要程序員知道組件類目的唯一ID(CATID)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 付費(fèi)搭建店鋪合同范本
- 內(nèi)墻抹灰施工合同范本
- 農(nóng)民工工資付款合同范本
- 關(guān)于規(guī)范使用合同范本
- 辦公輔助崗位合同范本
- 住宅消防維修采購(gòu)合同范本
- mind+ 星球大戰(zhàn) 教學(xué)設(shè)計(jì)
- 出售貨架合同范本
- 與勞務(wù)外包簽訂合同范本
- 勘探合同屬于合同范本
- 患者隱私保護(hù)的考試試題及答案
- 2025年中考數(shù)學(xué)一輪教材復(fù)習(xí)-第六章 圓 與圓有關(guān)的概念及性質(zhì)
- 運(yùn)維服務(wù)體系建立實(shí)施方案(5篇)
- 路面基層(級(jí)配碎石)施工方案
- 2025年村兩委工作計(jì)劃
- 2025年日歷(日程安排-可直接打印)
- 事業(yè)單位考試職業(yè)能力傾向測(cè)驗(yàn)(社會(huì)科學(xué)專技類B類)試題及答案指導(dǎo)(2025年)
- 中小學(xué)反詐宣傳課件
- 口腔執(zhí)業(yè)醫(yī)師定期考核試題(資料)帶答案
- 2024年三八婦女節(jié)婦女權(quán)益保障法律知識(shí)競(jìng)賽題庫(kù)及答案(共260題)
- 北京工業(yè)大學(xué)《機(jī)器學(xué)習(xí)基礎(chǔ)》2022-2023學(xué)年期末試卷
評(píng)論
0/150
提交評(píng)論