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)

文檔簡介

GIS應(yīng)用開發(fā)DevelopingGISApplicationswithArcObjectsusingC#.NET江西省研究生優(yōu)質(zhì)課程主講:蘭小機(jī)GIS博士、教授

Email:landcom8835@163.com

QQ:305333315課件:4/

蘭小機(jī)簡歷主要經(jīng)歷1988年7月畢業(yè)于南方冶金學(xué)院工程測量專業(yè),獲學(xué)士學(xué)位,并留校任教1994年6月畢業(yè)于武漢測繪科技大學(xué)工程測量專業(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)目國家自然科學(xué)基金項(xiàng)目--面向GML的時(shí)空關(guān)聯(lián)規(guī)則及序列模式挖掘研究(編號(hào):40971234),35萬元,主持國家自然科學(xué)基金項(xiàng)目--本原GML空間數(shù)據(jù)庫理論及GMLGIS與傳統(tǒng)GIS集成研究(編號(hào):40761017),16萬元,主持國家自然科學(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)研究與開發(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ǔ)

52ArcGISApplicationframework

53使用ArcObjects控件編程

64幾何形體對(duì)象--GEOMETRY

45地圖的組成

66空間數(shù)據(jù)的符號(hào)化

57空間數(shù)據(jù)管理

58地理處理框架29空間分析410空間數(shù)據(jù)編輯811三維GIS開發(fā)基礎(chǔ)6教材及參考材料教材:《基于ArcObjects與C#.NET的GIS應(yīng)用開發(fā)》,蘭小機(jī)等編著,冶金工業(yè)出版社,2011年12月最新課件參考材料:ArcObjectsSDK10Microsoft.NETFramework//zh-cn/arcgisdesktop/10.0/help/ArcGIS開發(fā)工具包中的文檔,包括ArcGIS開發(fā)幫助、組件幫助、對(duì)象模型圖和示例學(xué)習(xí)基礎(chǔ)熟練掌握ArcGISDesktop(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)用開發(fā)Chap.1FundamentalsofdevelopingwithArcObjectsArcGIS系列產(chǎn)品與開發(fā)方式ArcGISVisualStudioIDEIntegrationFrameworkArcObjects基礎(chǔ)組件對(duì)象模型.NET平臺(tái)概述.NET組件與COM組件的互操作ArcGIS開發(fā)資源§1

ArcGIS系列產(chǎn)品與開發(fā)方式ArcGISDesktopArcGISEngineArcGISServerArcGISMobile開發(fā)類型:

TocustomizeorextendtheArcGISDesktopapplicationsTo

buildstandalonemappingapplicationsTodevelopWebapplications

§1.1

ArcGISDesktop及其擴(kuò)展ArcGISDesktop是GIS專業(yè)人員編輯、使用和管理地理信息的主要平臺(tái),它按功能分為三個(gè)不同級(jí)別的產(chǎn)品:

ArcViewArcEditorArcInfo每個(gè)產(chǎn)品主要包括:ArcMap、ArcCatlog、ArcGlobe、ArcScene桌面應(yīng)用程序.ArcGIS桌面應(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)用程序無需使用ArcObjects,后續(xù)版本不支持VBA定制需要使用ArcObjects,可以使用C#,VB.NET,Java,

C++語言§1.1.1使用Python腳本,自動(dòng)化GIS工作流Python是一種免費(fèi)的、跨平臺(tái)的開源編程語言,它功能強(qiáng)大且簡單易學(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ī)模大ArcGIS中的PythonPython是地理處理框架的重要組成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)、SpatialAnalyst模塊(arcpy.sa)和GeostatisticalAnalyst模塊(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腳本是可以執(zhí)行的.py文件。獨(dú)立Python腳本可通過兩種方式執(zhí)行:通過操作系統(tǒng)提示或開發(fā)應(yīng)用程序(如PythonWin),或在Windows資源管理器中雙擊.py文件。Python腳本工具Python腳本工具是已添加到地理處理工具箱的Python腳本。添加為腳本工具后,便可以像使用其他地理處理工具一樣使用此腳本工具-可以從工具對(duì)話框打開和執(zhí)行、可以在Python窗口和ModelBuilder中使用,并可以從其他腳本和腳本工具中調(diào)用。Python窗口ArcGIS10使用Python窗口代替原來的命令行窗口,

通過Python窗口,用戶可以快捷地在ArcGIS內(nèi)部使用Python,從而以交互方式運(yùn)行地理處理工具和功能以及充分利用其他Python模塊和庫。此窗口還為用戶學(xué)習(xí)Python提供了一個(gè)途徑。Python窗口提供了智能感知和代碼自動(dòng)完成功能.可以直接從Catalog中拖放過來即時(shí)的幫助信息簡單實(shí)例:ArcGIS引入了后臺(tái)地理處理(Background

Geoprocessing)的概念,允許Geoprocessing工具、ArcGIS操作同時(shí)運(yùn)行(使用多核CPU)?!?.1.2使用DLL組件擴(kuò)展ArcGIS桌面使用DLL組件擴(kuò)展ArcGIS桌面的優(yōu)勢(shì):Theycanbeeasilydeliveredtoendusersviacustomsetupprograms.Youcanhideyourcodeandlogicinabinaryfile.YoucanextendandcustomizevirtuallyeveryaspectoftheArcGIStechnology.使用DLL組件擴(kuò)展ArcGIS桌面開發(fā)插件(add-in),定制/擴(kuò)展ArcGIS桌面應(yīng)用程序(NewinArcGIS10)開發(fā)定制組件,擴(kuò)展ArcGIS桌面應(yīng)用程序ArcGISDesktopAdd-inAdd-in是一種能夠快速擴(kuò)展桌面應(yīng)用程序功能的全新擴(kuò)展方式更加容易創(chuàng)建更加容易共享更加安全更易安裝管理ArcGIS

10Add-in所支持的類型按鈕和工具組合框菜單和右鍵菜單Multi-items工具條Toolpalettes可停靠窗體ApplicationextensionsEditorextensionsArcGIS

10Add-in支持的開發(fā)環(huán)境VisualStudio2008+.Net3.5VisualStudio2010+.Net3.5或者.Net4.0VisualBasic/C#

2008ExpressEdition+.Net3.5VisualBasic/C#2010ExpressEdition+.Net3.5或者.Net4.0EclipseIDEforJavaDevelopersXMLMetadata(

Config.esriaddinx)Add-in的部署復(fù)制/郵件發(fā)送編譯好的esriaddin文件到需要部署機(jī)器上(已經(jīng)安裝好ArcGIS桌面);在部署機(jī)器上雙擊esriaddin文件,彈出Add-in安裝界面,讓用戶查看該插件的一些元信息,然后讓用戶決定是否安裝該插件;安裝插件是不需要重啟任何ArcGISDesktop應(yīng)用程序的。安裝完之后,就可以通過相應(yīng)ArcGISDesktop應(yīng)用程序的Add-inManager來查看已安裝的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:\ProgramFiles\CommonFiles\ArcGIS\bin\ESRISignAddIn.exe§1.2

ArcGIS

Engine

ArcGISEngine是一個(gè)完整的嵌入GIS組件庫和工具,開發(fā)人員可以用來創(chuàng)建新的獨(dú)立的GIS應(yīng)用程序或者在自定義的應(yīng)用程序或已經(jīng)存在的應(yīng)用程序中嵌入GIS功能。ArcGISEngine是ArcObjects的子集,主要用于獨(dú)立的GIS應(yīng)用開發(fā),它不依賴于ArcGISDesktop。ArcGISEngine由兩部分組成:一個(gè)軟件開發(fā)包(SDK)和一個(gè)可分發(fā)的運(yùn)行時(shí)(Runtime)。除此之外,應(yīng)用程序的功能可以使用可選的擴(kuò)展模塊來進(jìn)行擴(kuò)展。ArcGISEngine支持Windows平臺(tái)及跨平臺(tái)開發(fā)。Windows平臺(tái)開發(fā),有以下APIs:.NETVC++跨平臺(tái)開發(fā),有以下APIs:JavaC++forWindowsC++forSolaris/Linux使用ArcGISEngine控件開發(fā)獨(dú)立的GIS應(yīng)用UsingtheWinformsArcGISEnginecontrolsUsingArcGISEngineControlsinWPF(NewinArcGIS10)§1.3

ArcGISServerArcGISServer是功能強(qiáng)大的基于服務(wù)器的GIS產(chǎn)品,用于構(gòu)建集中管理的、支持多用戶的、具備高級(jí)GIS功能的企業(yè)級(jí)GIS應(yīng)用與服務(wù)。

開發(fā)者使用ArcGISServer可以構(gòu)建Web應(yīng)用、Web服務(wù)、以及其它運(yùn)行在標(biāo)準(zhǔn)的.NET和J2EEWeb服務(wù)器上的企業(yè)應(yīng)用。

ArcGISServer包含兩個(gè)主要部分:GIS服務(wù)器和多種的開發(fā)框架。ArcGISServer提供的開發(fā)環(huán)境:ArcGISServerSDKfor.NETandJavaArcGISJavaScript

APIArcGISJavaScriptextensionfortheGoogleMapsAPIArcGISJavaScriptextensionforBingMapsArcGISAPIforMicrosoftSilverlight/WindowsPresentationFoundation(WPF)ArcGISAPIforFlexArcGISServerRepresentationalStateTransfer(REST)APIArcGISServerSimpleObjectAccessProtocol(SOAP)SDK§1.4

Mobile

GISArcGIS技術(shù)可以部署到一系列的移動(dòng)設(shè)備上,從輕量級(jí)的設(shè)備到PDA、筆記本電腦以及平板電腦。在野外工作中使用GIS,主要依靠將應(yīng)用程序定制成簡單的移動(dòng)工作任務(wù)以及對(duì)中心GISWeb服務(wù)器的無線訪問。ArcGIS為用戶提供了三種移動(dòng)GIS解決方案。ArcGISDesktop和使用ArcGISEngine建立的應(yīng)用程序:這種方案常常部署在用于野外的筆記本電腦或者平板電腦上。ArcPad:ArcPad為使用WindowsCE兼容設(shè)備的野外工作人員提供了一個(gè)以GIS為中心的解決方案。ArcGISMobile

SDK:ArcGISServer包含的一個(gè)軟件開發(fā)包,可以被用于智能手機(jī)、PocketPC等設(shè)備上的應(yīng)用開發(fā)?!?

ArcGISVisualStudioIDEIntegrationFramework為了提高軟件開發(fā)效率,ArcGIS開發(fā)包為開發(fā)人員提供了集成于VS環(huán)境的模板、向?qū)А⒚?、代碼段等。ArcGIS開發(fā)包的安裝ArcGIS桌面開發(fā)包—ArcObjects(AO)ArcGISEngine開發(fā)包--ArcGISEngine(AE)ArcGISServer開發(fā)包ArcGIS開發(fā)包安裝后VS

IDE集成框架(開發(fā)環(huán)境元素)開發(fā)類庫開發(fā)文檔ArcGISVisualStudioIDEIntegrationFrameworkArcGISVisualStudioIDEIntegrationFrameworkforadd-ins(New

in

ArcGIS

10)ArcGISVisualStudioIDEIntegrationFrameworkforextendingArcObjectsArcGISVisualStudioIDEIntegrationFrameworkforserverobjectextensionsWeb

MappingApplication§2.1ArcGISVisualStudioIDEIntegrationFrameworkforadd-ins在VS環(huán)境下開發(fā):創(chuàng)建解決方案(Solution)一到多個(gè)項(xiàng)目(Projects)一到多個(gè)類(Classes)§2.2ArcGISVisualStudioIDEIntegrationFrameworkforextendingArcObjectsArcGISVS

IDE集成框架元素:ArcGISProjecttemplates(項(xiàng)目模板)ArcGISProjectwizardArcGISItemtemplates(類模板)ArcGISAddClasswizardArcGISSnippetsArcGISReferencedialogboxArcGISComponentCategoryRegistrardialogboxArcGISLicenseInitializerdialogboxArcGISToolboxReferencedialogboxArcGIS.NetCodeConverterToolboxconfiguration§2.1

ArcGISProjecttemplates(項(xiàng)目模板)Thefollowingaretheavailableprojecttemplates:Desktop:WindowsApplicationConsoleApplicationClassLibrary(General)ClassLibrary(ArcMap)ClassLibrary(ArcCatalog)ClassLibrary(ArcScene)ClassLibrary(ArcGlobe)Engine:WindowsApplicationConsoleApplicationClassLibrary(General)MapControlApplicationGlobeControlApplication

serverobjectextensionsRESTSOAPServerWebApplicationWebMappingApplicationToolboxconfiguration:AddsArcGIScontrolsintheVisualStudioToolboxwindow.ArcGISProjectwizard(項(xiàng)目向?qū)?當(dāng)使用ArcGIS項(xiàng)目模板來創(chuàng)建一個(gè)新項(xiàng)目時(shí),

ArcGIS項(xiàng)目向?qū)?huì)自動(dòng)打開,通過自動(dòng)添加ArcGIS引用及許可初始化代碼,來幫助你高效地搭建新的ArcGIS定制項(xiàng)目。Class

Library

(ArcMap

)Windows

Application

(Desktop)WindowsApplication(Engine)§2.3

ArcGISitemtemplatesAdd-in組件模板類模板ArcGISAddClass(最通用的類模板)

Wizard當(dāng)選擇“ArcGIS

Class”模板后,添加類向?qū)?huì)自動(dòng)顯示,指導(dǎo)你完成類的創(chuàng)建。ArcGISAddClassWizardincludethefollowing3steps:BaseImplementationoptionComponentCategoryoptionOptionalInterfacesoptionBaseImplementationoptionCustomizationgroupBasecomponentComponentCategoryoptionCategoriesCategorypropertiesOptionalInterfacesoptionAvailableoptionalinterfacesSelectedinterfaces§2.4

ArcGISReferencedialogbox§2.5

ArcGISComponentCategoryRegistrardialogbox§2.6ArcGISLicenseInitializerdialogbox不管是ArcGIS桌面應(yīng)用程序還是獨(dú)立的GIS應(yīng)用程序,在訪問ArcObjects組件之前,需要明確地使用合適的ArcGIS產(chǎn)品許可進(jìn)行初始化。開發(fā)人員可以使用“ArcGISLicenseInitializerdialogbox

”來產(chǎn)生并添加許可初始化代碼到項(xiàng)目中的適當(dāng)位置。但如果選用項(xiàng)目模板,創(chuàng)建過程中包含選擇合適的產(chǎn)品許可選項(xiàng)。§2.7ArcGISToolboxReferencedialogboxThisdialogboxallowsyoutocreateamanagedassemblyforacustomArcGIStoolbox,withoneclassrepresentingeachgeoprocessingtoolinthetoolbox.Youcanthenusetheseclassestosetupandrungeoprocessingtools.

§2.8

SnippetsinArcGISfor.NETdevelopers為了幫助ArcGIS軟件開發(fā)人員進(jìn)一步提高軟件的開發(fā)效率,“ArcGISVisualStudioIDEIntegrationFramework”提供了可重用的代碼段供開發(fā)人員使用。ArcGIS10offersafullyintegratedArcGISSnippetinsertionandfindertool.C:\ProgramFiles\MicrosoftVisualStudio10.0\VC#\Snippets\ArcObjectsVS--工具--代碼段管理器(T)…使用代碼段管理代碼段編輯、重建、查找代碼段ArcGIS

Snippet

Editor

ManagerArcGIS

Snippet

Editor

WizardArcGIS

Snippet

Finder在VS中根據(jù)已有代碼生成Snippet§2.9

Walkthrough:CreateacommandbyinheritingfromBaseCommandCreateasimplecommandthatzoomstheextentoftheselectedlayerCreateanewclasslibraryAddreferencesCreateaZoomToLayercommandChangethedefaulticonbitmapInherittheBaseCommandabstractclassAddcodetotheoverriddenconstructorofBaseCommandAddtheZoomToLayerfunctionalityExposetheZoomToLayerclasstoCOMCompiletheprojectUsethecommandinArcMapDebuggingthecommandDemo:CreatingacommandthatzoomstheextentoftheselectedlayerSnippets§3

ArcObjects基礎(chǔ)ArcObjects簡介ArcObjects的組件庫理解對(duì)象模型圖§3.1ArcObjects簡介ArcObjects是ESRI公司ArcGIS系列產(chǎn)品的開發(fā)平臺(tái),它是基于MicrosoftCOM技術(shù)所構(gòu)建的GIS組件產(chǎn)品,是一套可重用的通用的二次開發(fā)組件產(chǎn)品,它可以用于大量開發(fā)框架中,包括流行的像

.NET、VisualC++、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)計(jì)見下表:

EnumsStructsInterfacesClassesTotalArcGIS9.0

628

35

3029

2322

6014

ArcGIS9.1933

36

3918

3043

7930

ArcGIS9.21100

40

4798

3832

9770

ArcGIS9.3

1195

51

5206

4050

10502

ArcGIS10.01053935555408110782為了更好地管理ArcObjects中數(shù)目眾多的COM對(duì)象,ESRI將它們放置在不同的組件庫中,對(duì)于.NET來說,一個(gè)組件庫就是一個(gè)assembly(程序集),一個(gè)assembly有多個(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è)(65

assemblies),詳細(xì)內(nèi)容參見LearningArcObjects、ArcObjects

SDK

API

Reference如果不記得某個(gè)接口或?qū)ο髮儆谀膫€(gè)命名空間的時(shí)候,可以通過開發(fā)幫助查找?!?.3

理解對(duì)象模型圖ESRI提供了多種方法讓用戶了解ArcObjects組件及不同組件之間的關(guān)系ESRI提供的一系列OMD的PDF文件開發(fā)幫助、API

ReferenceVS.NET中的對(duì)象瀏覽器通過閱讀ArcObjects的對(duì)象模型圖(ObjectModelDiagram,OMD),可以快速了解ArcObjects的結(jié)構(gòu)和不同組件之間的關(guān)系。OMD使用UML(UnifiedModelingLanguage,統(tǒng)一建模語言)描述,它補(bǔ)充了在對(duì)象瀏覽器中看不到的信息,可以幫助程序員了解類之間的關(guān)系,如何從一個(gè)類到另一個(gè)類,選擇正確的接口,獲取需要的屬性和方法等。VS中的對(duì)象瀏覽器§3.3.1類與對(duì)象在ArcObjects中存在三種類型的類:抽象類(AbstractClass)組件類(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.2

類與類的關(guān)系A(chǔ)rcObjects的類之間存在四種關(guān)系依賴關(guān)系關(guān)聯(lián)關(guān)系組合關(guān)系類型繼承

WorkspaceFactoryWorkspaceMapControlMapMapLayer*CurveSegmentPathPolyCurve§4

組件對(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)行分類。例如在Map類中有好幾個(gè)接口,在這些接口中定義不同功能組的方法和屬性,Map實(shí)現(xiàn)了這些接口,這樣就可以使用接口進(jìn)行定義。但COM也存在一個(gè)嚴(yán)重的問題:DLL災(zāi)難。.NET技術(shù)的出現(xiàn)解決了“DLL災(zāi)難”問題?!?.2

什么是組件對(duì)象模型組件技術(shù)標(biāo)準(zhǔn)COM(DCOM):微軟的組件對(duì)象模型((Distributed)ComponentObjectModel)JavaBean:Sun公司的基于Java的組件技術(shù)CORBA:對(duì)象管理組織(ObjectManagementGroup,OMG)的組件技術(shù)標(biāo)準(zhǔn),公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(CommonObjectRequestBrokerArchitecture,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(QueryInterface),即所謂查詢接口由于一個(gè)COM對(duì)象有很多個(gè)接口,不同的接口管理著COM的不同類型的方法、屬性,因此從一個(gè)接口可以使用的屬性方法轉(zhuǎn)到另一個(gè)接口可以使用的屬性方法的過程稱為QI。這個(gè)過程也是由IUnknown接口管理的。

IMappMap;IActiveViewpActiveView; pMap=axMapControl1.Map;//獲取控件中的地圖

……

pActiveView=pMapasIActiveView;//QI(Or

pActiveView=(IActiveView)pMap;)

………每個(gè)組件都有一個(gè)獨(dú)一無二的標(biāo)識(shí)GUID。接口的GUID稱為IID,而組件類的GUID稱為CLSID。CLSID還有一個(gè)文本別名,即所謂的ProgID,它是一個(gè)由項(xiàng)目名加組件類類名組成的字符串。一個(gè)COM對(duì)象可以有多個(gè)接口,一個(gè)接口也可以被多個(gè)COM對(duì)象實(shí)現(xiàn)。接口分為兩種,即內(nèi)向接口和外向接口。內(nèi)向接口(InboundInterface)是組織COM對(duì)象相關(guān)的方法和屬性,COM對(duì)象必須實(shí)現(xiàn)所有的接口內(nèi)容;外向接口(OutboundInterface)是用于組織COM對(duì)象相關(guān)的事件,開發(fā)人員根據(jù)需要實(shí)現(xiàn)事件接口。接口可以從多個(gè)父接口繼承(C#類呢)接口繼承機(jī)制是非常有用的,在很多時(shí)候程序員可以將一個(gè)子接口類型的對(duì)象定義為父接口類型的對(duì)象,從而實(shí)現(xiàn)一般化的操作,如:PrivatevoidCreateGeometry(IPolygonpPolygon)PrivatevoidCreateGeometry(IGeometrypPolygon)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)行的情況,這種情況被稱為“DLLHELL”(DLL災(zāi)難)?!?.NET平臺(tái)概述針對(duì)Windows平臺(tái)存在的缺陷,微軟提出了全新的.NET技術(shù)體系,其主要包括

.NETFrameworkVisualStudio.NETVisualStudio.NET是一套完整的開發(fā)工具,用于生成各種類型的應(yīng)用程序,包括ASPWeb應(yīng)用程序、XMLWebservices、桌面應(yīng)用程序和移動(dòng)應(yīng)用程序。.NETFramework是生成、部署和運(yùn)行各種應(yīng)用程序的平臺(tái)。.NETFramework具有兩個(gè)主要組成部分:通用語言運(yùn)行時(shí)(CommonLanguageRuntime--CLR),是.NETFramework的基礎(chǔ).NETFramework類庫。

.NETFramework體系結(jié)構(gòu)OperatingSystemCommonLanguageRuntime(CTS,JIT,MemoryManagement)BaseClassLibrary(System.IO,System.Drawing,System.Threading)DataClasses(ADO.NET,XML,SQL)WindowsFormsWebApplicationsWebServicesWebFormsASP.NETMobileCommonLanguageSpecificationVBC++C#J#…OperatingSystemCommonLanguageRuntime(CTS,JIT,MemoryManagement)BaseClassLibrary(System.IO,System.Drawing,System.Threading)DataClasses(ADO.NET,XML,SQL)WindowsFormsWebApplicationsWebServicesWebFormsASP.NETMobileVisualStudio.NET§5.1通用語言運(yùn)行時(shí)(CLR)通用語言運(yùn)行時(shí)管理內(nèi)存、線程執(zhí)行、代碼執(zhí)行、代碼安全驗(yàn)證、編譯以及其他系統(tǒng)服務(wù)。CLR處于.NETFramework的最底層,是.NETFramework的基礎(chǔ),它為C#.NET、VB.NET、C++、J#等多種語言提供了統(tǒng)一的運(yùn)行環(huán)境,使得用某種高級(jí)語言編寫的應(yīng)用程序可以在不同的操作系統(tǒng)和硬件上運(yùn)行,而不需要按照特定環(huán)境重寫應(yīng)用程序。

.NET環(huán)境下程序編譯執(zhí)行過程TraditionalCompilation:SourceCodeLanguageCompilerNativeEXEDLLCompilationExecutinginOSExecutionCompilationandExecutionin.NETSourcecodeCompilerVB.NETC++C#CompilerCompilerOperatingSystemServicesCommonLanguageRuntimeJITCompilerNativeCodeAssembliesManagedcodeILCode+MetadataILCode+MetadataILCode+MetadataUnmanagedComponentGarbageCollector具體的運(yùn)行過程:使用VB、C#或任一種CLR支持的編程語言編寫應(yīng)用程序源代碼由編程語言對(duì)應(yīng)的編譯器將源代碼翻譯成一個(gè)程序集(Assembly)--.NET組件,為一EXE或DLL文件。這個(gè)程序集包括中間語言MSIL代碼、元數(shù)據(jù)和一個(gè)文件清單。MSIL代碼也簡稱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)編譯成可執(zhí)行的本機(jī)代碼。不同的機(jī)器使用不同的JIT編譯器,所以同一個(gè)應(yīng)用程序的MSIL代碼經(jīng)不同機(jī)器的JIT編譯器編譯之后,便可以在不同的機(jī)器上執(zhí)行。SinglefileassemblyMulti-fileassembly通用類型系統(tǒng)CLR借助通用類型系統(tǒng)(CommonTypeSystem,CTS)對(duì)代碼類型進(jìn)行嚴(yán)格的安全檢查,避免了不同組件之間可能存在的類型不匹配的問題。§5.2

.NETFramework類庫.NETFramework類庫(FCL)是一套軟件組件,用于編寫在CLR控制下運(yùn)行的代碼。類庫分級(jí)組成了一個(gè)龐大

溫馨提示

  • 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)論