




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
GIS應(yīng)用開發(fā)DevelopingGISApplicationswithArcObjectsusingC#.NETGIS應(yīng)用開發(fā)基礎(chǔ)ArcObjects基礎(chǔ)組件對象模型.NET平臺概述.NET組件與COM組件的互操作ArcGIS系列產(chǎn)品與開發(fā)方式ArcGISVisualStudioIDEIntegrationFrameworkArcGIS開發(fā)資源§1
ArcObjects基礎(chǔ)ArcObjects簡介ArcObjects的組件庫理解對象模型圖§1.1ArcObjects簡介ArcObjects是ESRI公司ArcGIS系列產(chǎn)品的開發(fā)平臺,它是基于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)建的?!?.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對象,ESRI將它們放置在不同的組件庫中。對于.NET來說,一個(gè)組件庫就是一個(gè)程序集(assembly),一個(gè)程序集包含多個(gè)不同的命名空間(NameSpace)。如ESRI.ArcGIS.ADF.Local程序集的命名空間包括:ESRI.ArcGIS.ADF.BaseClassesESRI.ArcGIS.ADF.CATIDsESRI.ArcGIS.ADF.COMSupportESRI.ArcGIS.ADF.SerializationArcObjects
10的組件庫共65個(gè)(65
assemblies),詳細(xì)內(nèi)容參見LearningArcObjects、ArcObjects
SDK
API
Reference如果不記得某個(gè)接口或?qū)ο髮儆谀膫€(gè)命名空間的時(shí)候,可以通過開發(fā)幫助查找?!?.3
理解對象模型圖ESRI提供了多種方法讓用戶了解ArcObjects組件及不同組件之間的關(guān)系ESRI提供的一系列OMD的PDF文件開發(fā)幫助、API
ReferenceVS.NET中的對象瀏覽器通過閱讀ArcObjects的對象模型圖(ObjectModelDiagram,OMD),可以快速了解ArcObjects的結(jié)構(gòu)和不同組件之間的關(guān)系。OMD使用UML(UnifiedModelingLanguage,統(tǒng)一建模語言)描述,它補(bǔ)充了在對象瀏覽器中看不到的信息,可以幫助程序員了解類之間的關(guān)系,如何從一個(gè)類到另一個(gè)類,選擇正確的接口,獲取需要的屬性和方法等。VS中的對象瀏覽器§1.3.1類與對象在ArcObjects中存在三種類型的類:抽象類(AbstractClass)組件類(CoClass)普通類(Class)抽象類不能用于產(chǎn)生一個(gè)新的對象,但是可以用于定義一個(gè)子類。組件類是一個(gè)可以直接用new創(chuàng)建對象實(shí)例的類,它的實(shí)例對象不依賴其他對象的存在而存在,其生存周期也不用其他的對象管理。普通類不能夠直接產(chǎn)生一個(gè)對象,但它可以用其他的普通類或組件類的方法產(chǎn)生,而不是使用new關(guān)鍵字來完成。§1.3.2
類與類的關(guān)系A(chǔ)rcObjects的類之間存在四種關(guān)系依賴關(guān)系關(guān)聯(lián)關(guān)系組合關(guān)系類型繼承
WorkspaceFactoryWorkspaceMapControlMapMapLayer*CurveSegmentPathPolyCurve§2
組件對象模型軟件開發(fā)歷史什么是組件對象模型§2.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è)等級。但是,一個(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
什么是組件對象模型組件技術(shù)已經(jīng)成為當(dāng)今軟件技術(shù)的潮流之一,它已徹底改變軟件生產(chǎn)和開發(fā)的模式。組件技術(shù)是計(jì)算機(jī)軟件業(yè)從手工作坊走向工業(yè)化成熟產(chǎn)業(yè)的轉(zhuǎn)折點(diǎn),它給整個(gè)GIS技術(shù)體系和應(yīng)用模式帶來了巨大影響。用戶可根據(jù)自己的需求靈活購買軟件組件,只需編寫一些“膠水代碼”將各個(gè)組件“粘”起來,便可構(gòu)建自己的應(yīng)用系統(tǒng),就如同組裝計(jì)算機(jī)一樣簡單。組件技術(shù)標(biāo)準(zhǔn)COM(DCOM):微軟的組件對象模型((Distributed)ComponentObjectModel)JavaBean:Sun公司的基于Java的組件技術(shù)CORBA:對象管理組織(ObjectManagementGroup,OMG)的組件技術(shù)標(biāo)準(zhǔn),公共對象請求代理結(jié)構(gòu)(CommonObjectRequestBrokerArchitecture,CORBA)。COM知識要點(diǎn)COM是一種二進(jìn)制級別的組件通信標(biāo)準(zhǔn)--接口(Interface),它定義了組件之間應(yīng)該如何通信、一個(gè)COM對象的不同接口之間如何查詢等。COM對象也是基于面向?qū)ο髽?biāo)準(zhǔn)的。COM對象可以以DLL或者EXE文件形式存在,它包含著接口的具體實(shí)現(xiàn)。使用者可以通過接口來訪問它內(nèi)部的方法、屬性。COM對象必須實(shí)現(xiàn)IUnknown接口,它負(fù)責(zé)管理COM對象生命周期并在運(yùn)行時(shí)刻提供類型查詢,當(dāng)COM對象不使用的時(shí)候,是這個(gè)接口定義的方法負(fù)責(zé)釋放內(nèi)存。
QI,即所謂查詢接口由于一個(gè)COM對象有很多個(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)識GUID。接口的GUID稱為IID,而組件類的GUID稱為CLSID。CLSID還有一個(gè)文本別名,即所謂的ProgID,它是一個(gè)由項(xiàng)目名加組件類類名組成的字符串。一個(gè)COM對象可以有多個(gè)接口,一個(gè)接口也可以被多個(gè)COM對象實(shí)現(xiàn)。接口分為兩種,即內(nèi)向接口和外向接口。內(nèi)向接口(InboundInterface)是組織COM對象相關(guān)的方法和屬性,COM對象必須實(shí)現(xiàn)所有的接口內(nèi)容;外向接口(OutboundInterface)是用于組織COM對象相關(guān)的事件,開發(fā)人員根據(jù)需要實(shí)現(xiàn)事件接口。接口可以從多個(gè)父接口繼承(C#類呢)接口繼承機(jī)制是非常有用的,在很多時(shí)候程序員可以將一個(gè)子接口類型的對象定義為父接口類型的對象,從而實(shí)現(xiàn)更一般化的操作,如:PrivatevoidCreateGeometry(IPolygonpPolygon)PrivatevoidCreateGeometry(IGeometrypPolygon)COM對象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”結(jié)尾的接口,都是這樣發(fā)展的產(chǎn)物。COM組件必須被注冊后才能使用。COM的缺陷:由于COM對象可以被重用,這樣多個(gè)程序可能共用一個(gè)COM對象,如果這個(gè)COM組件升級了,就很可能出現(xiàn)其中某個(gè)程序無法使用新組件,導(dǎo)致程序不能運(yùn)行的情況,這種情況被稱為“DLLHELL”(DLL災(zāi)難)?!?.NET平臺概述針對Windows平臺存在的缺陷,微軟提出了全新的.NET技術(shù)體系,其主要包括
.NETFrameworkVisualStudio.NETVisualStudio.NET是一套完整的開發(fā)工具,用于創(chuàng)建各種類型的應(yīng)用程序,包括ASPWeb應(yīng)用程序、XMLWebservices、桌面應(yīng)用程序和移動應(yīng)用程序。.NETFramework是生成、部署和運(yùn)行各種應(yīng)用程序的平臺。.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§3.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)境,使得用某種高級語言編寫的應(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)用程序源代碼由編程語言對應(yīng)的編譯器將源代碼翻譯成一個(gè)程序集(Assembly)--.NET組件,為一EXE或DLL文件。這個(gè)程序集包括中間語言MSIL代碼、元數(shù)據(jù)和一個(gè)文件清單。MSIL代碼也簡稱IL代碼,其特點(diǎn)是獨(dú)立于特定操作系統(tǒng)和硬件平臺。元數(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代碼動態(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)對代碼類型進(jìn)行嚴(yán)格的安全檢查,避免了不同組件之間可能存在的類型不匹配的問題?!?.2
.NETFramework類庫.NETFramework類庫(FCL)是一套軟件組件,用于編寫在CLR控制下運(yùn)行的代碼。類庫分級組成了一個(gè)龐大的功能集,包括顯示圖形用戶界面、讀寫XML數(shù)據(jù)、在Internet上通信、訪問數(shù)據(jù)庫等多種功能。Sameclassesfor
alllanguages!!!§3.3
.NET的強(qiáng)命名程序集以前在Windows下開發(fā)程序時(shí)常會遭遇“DLLHell”問題,即動態(tài)鏈接庫的向后兼容問題。微軟在.Net產(chǎn)生前,使用Guid來唯一的標(biāo)識每一個(gè)COM組件,為了運(yùn)行COM組件就必須在注冊表中對其進(jìn)行注冊。多個(gè)應(yīng)用程序可以共享相同的COM組件,當(dāng)COM組件版本升級時(shí),可能導(dǎo)致原來引用此COM組件的程序不能正確運(yùn)行,等等。在.Net中,微軟引入了一種新的解決方案:強(qiáng)命名(StrongName)程序集,以及與之配套的全局程序集緩存(GAC--GlobalAssemblyCache)來解決這個(gè)問題。強(qiáng)命名程序集:.Net使用Name、Version、Culture、PublicToken四個(gè)屬性來唯一標(biāo)識一個(gè)程序集。
創(chuàng)建一個(gè)強(qiáng)命名程序集需要獲得一個(gè)用強(qiáng)命名實(shí)用工具(Strong
Name
Utility,即SN.exe)產(chǎn)生的密鑰。全局程序集緩存(GAC):
如果一個(gè)Assembly要被多個(gè)應(yīng)用程序訪問,那么它就必須放在一個(gè)CLR已確知的目錄下,并且CLR在探測到有對該Assembly的引用時(shí),它必須能自動到該目錄下尋找這個(gè)程序集。這個(gè)已確知的目錄稱作GAC,就是全局程序集緩存。它一般位于下面的目錄下:C:\Windows\Assembly\
使用gacutil.exe命令可以將具有強(qiáng)命名的程序集添加到全局程序集緩存。命令行下看到的GAC在開發(fā)一般的、非共享的程序時(shí),不需要使用強(qiáng)命名的程序集,僅將項(xiàng)目(Project)編譯成.DLL或者.EXE即可。但是,如果開發(fā)的是組件庫、框架時(shí),通過對程序集進(jìn)行強(qiáng)命名,并將其部署到GAC中,可以保證程序集不會出現(xiàn)版本問題。§4.NET組件與COM組件的互操作COMModel.NETModelTypelibrariesMetadataDLLAssembliesInterfacebasedObjectbasedGUIDsStrongnamesQueryInterfaceCastReferencecountingMemorymanagement(Garbagecollection)RegistryGlobalAssemblyCache(gacutil.exe可以將具有強(qiáng)命名的程序集添至全局程序集緩存)本節(jié)內(nèi)容:COM包裝(COMWrappers)ESRI提供的PrimaryInteropAssemblies向COM公開.NET對象COM到.NET的類型轉(zhuǎn)換§4.1
COM包裝(COMWrappers)為了實(shí)現(xiàn)傳統(tǒng)的COM程序與.NET程序之間的相互調(diào)用,.NET提供了兩個(gè)包裝類:運(yùn)行時(shí)可調(diào)用包裝(runtimecallablewrapper,RCW)和COM可調(diào)用包裝(COMcallablewrapper,CCW)。每當(dāng)一個(gè).NET客戶程序調(diào)用一個(gè)COM對象的方法時(shí)就會創(chuàng)建一個(gè)RCW對象;相反,每當(dāng)一個(gè)COM客戶程序調(diào)用一個(gè).NET對象的方法時(shí)就會創(chuàng)建一個(gè)CCW對象?!?.2
ESRI提供的PrimaryInteropAssembliesPrimaryinteropassemblies(PIAs,主互操作程序集)是COM軟件廠商提供的為其COM組件在.NET環(huán)境下運(yùn)行的互操作程序集,PIAs暴露COM組件中的所有類、接口和常量,作為.NET托管類。ESRI為所有的ArcObjects類型庫提供了PIAs,ArcGIS的.NET開發(fā)人員只能使用這些安裝在GAC(GlobalAssemblyCache,缺省安裝目錄為C:\WINDOWS\assembly)下的PIAs.這些PIAs的公鑰標(biāo)記(publickey)為8FC3CC631E44AD86.ControlsPIAsArcGISEngine控件的RCW類繼承自.NETFramework的AxHost類,允許這些控件駐留在.NET的Windows窗體上?!?.3
向COM公開.NET對象(Exposing.NETobjectstoCOM)注冊.NET組件在COM組件類目中注冊.NET類§4.3.1注冊.NET組件使用定制的.NET組件來擴(kuò)展ArcGIS應(yīng)用程序,需要在COM注冊表中注冊.NET組件,并將.NET的程序集輸出為COM的類型庫(tlb),完成這一任務(wù)有以下途徑:UsingArcGISclasslibraryprojecttemplatesRegisteringbymenuoptionRegisteringbycommandlineRegisteringbydialogboxUsingArcGISclasslibraryprojecttemplatesArcObjects
SDK提供的類庫模板(ArcGISclasslibrary),在項(xiàng)目編譯時(shí)自動注冊(調(diào)用esriRegAsm)。Registeringbymenuoption當(dāng)不使用ArcObjects
SDK提供的類庫模板創(chuàng)建項(xiàng)目時(shí),編譯后的DLL文件注冊:在Windows資源管理器中,右鍵點(diǎn)擊該DLL文件,選擇“Register”(安裝ArcObjects
SDK后增加的功能);在“Register”對話框中選擇要注冊的ArcGIS產(chǎn)品完成注冊。Registeringbycommandline程序集注冊(Regasm.exe)的命令行工具用來注冊或注銷與COM一起使用的程序集。Regasm.exe會將有關(guān)類的信息添加到系統(tǒng)注冊表中,以便COM客戶端透明地使用.NET類。例如:regasmEditTools.dll/tlb:EditTools.tlb/codebaseESRIRegAsmESRIRegAsm.exe<assemblyname>/p:<productname>[Options]Thefollowingaretheoptions:/u—Unregistertypes/s—Silent(displaysnodialogbox)/e—Displayserrorconsole/v:<productversion>—Versionnumber/regfile[:fileName]—Exportstoregistryfile/f:<categoryinfofile>—Categorymappingfile(.xmlor.reg)/w:<dirPath>—KeepworkingfilesRegisteringby
Customize
dialogbox在.NET環(huán)境下自定義的ArcGIS命令和工具可以通過ArcGIS的Customize對話框中的AddFromFile按鈕快速地添加到工具條中。在這種情況下,只需要簡單地瀏覽.dll或.ocx或.tlbs并打開它即可。自定義對話框§4.3.2
在COM組件類目中注冊.NET類大量的ArcGIS擴(kuò)展都依賴COM組件類目。事實(shí)上,大部分定制的ArcGIS組件類必須注冊到合適的COM組件類目中才能正常使用,例如,所有的ArcMap命令和工具必須注冊到“ESRIMxCommands”組件類目中。可以通過下列途徑將.Net類注冊到COM組件類目中。自定義對話框組件類目管理工具ArcGISComponentCategoryRegistrar使用COM注冊函數(shù)(COMRegisterFunction)自定義對話框在.NET環(huán)境下自定義的ArcGIS命令和工具可以通過ArcGIS的Customize對話框中的AddFromFile按鈕快速地添加到工具條中。在這種情況下,只需要簡單地瀏覽一下TLB并打開它。ArcGIS框架會自動地將從類型庫中選中的類添加到合適的組件類目中。組件類目管理工具使用ComponentCatesoriesManager(Categories.exe),瀏覽類型庫,并選擇合適的類目。ArcGISComponentCategoryRegistrarThisdialogbox,aspartoftheArcGISVisualStudiointegrateddevelopmentenvironment(IDE)IntegrationFramework,allowsyoutoregisterclassesinthecurrentprojecttoESRIcomponentcategories.
使用COM注冊函數(shù)(COMRegisterFunction)添加注冊代碼到.NET類中,這樣每當(dāng)注冊.NET組件的時(shí)候,會在特定的組件類目中自動注冊.NET類。.NETFramework類庫中包含兩個(gè)屬性類(ComRegisterFunction和ComUnregisterFunction),它們允許用戶指定方法注冊或注銷.NET類。在組件類目內(nèi)注冊一個(gè)組件類,需要程序員知道組件類目的唯一ID(CATID)。為了幫助程序員簡化這一注冊過程,ESRI提供了ESRI.ArcGIS.ADF程序集,其中包含ESRI.ArcGIS.ADF.CATIDs名稱空間,這個(gè)名稱空間中包含代表ArcGIS組件類目的類,這些類知道組件類目的CATID,并提供兩個(gè)靜態(tài)方法(RegisterandUnregister)來添加或刪除組件類。
[Guid("d36096cd-4680-42d6-8e5a-8c88cf86170b")]publicsealedclassPanTool:BaseTool{#region"ComponentCategoryRegistration"
[ComRegisterFunction()]
staticvoidReg(stringregKey)
{
MxCommands.Register(regKey);
}
[ComUnregisterFunction()]
staticvoidUnreg(stringregKey)
{
MxCommands.Unregister(regKey);} #endregion...}§4.4
COM到.NET的類型轉(zhuǎn)換命名空間:ESRI.ArcGIS加上庫名。例如Geometry庫的命名空間是ESRI.ArcGIS.Geometry。所有類型通過它們的完整的命名空間和類型名識別。所有的COM類被轉(zhuǎn)換成為托管類;托管類的類名為起初的類名加上“Class”,例如,Point組件類的運(yùn)行時(shí)可調(diào)用包裝(RCW)為PointClass,Map組件類的運(yùn)行時(shí)可調(diào)用包裝為MapClass.C#中不支帶參數(shù)的屬性。ILayerpLayer=axMapControl1.get_Layer(0);在上例中帶參數(shù)的Layer屬性,在C#中是不支持的,所以改用get_Layer()方法?!?
ArcGIS系列產(chǎn)品與開發(fā)方式ArcGIS最終用戶產(chǎn)品及應(yīng)用程序命名變化:Priorto10.110.1ArcGISDesktopArcGISforDesktopArcInfoArcGISforDesktopAdvancedArcEditorArcGISforDesktopStandardArcViewArcGISforDesktopBasicArcGISMobileArcGISforWindowsMobileArcGISMobileforTabletPCsArcGISforWindowsTabletArcGISforWindowsPhoneNochangeArcGISforAndroidNochangeArcGISforiOSNochangeArcGISMappingforSharePointArcGISforSharePointArcGISServerArcGISforServerArcGISServerAdvancedEnterpriseArcGISforServerAdvancedArcGISServerStandardEnterpriseArcGISforServerStandardArcGISforBasicEnterpriseArcGISforServerBasicArcGISServerAdvancedWorkgroupArcGISforServerAdvancedWorkgroupArcGISServerStandardWorkgroupArcGISforServerStandardWorkgroupArcGISServerBasicWorkgroupArcGISforServerBasicWorkgroupArcGISExplorerNochangeArcGISExplorerOnlineNochangeArcGISExplorerDesktopNochangeArcReaderNochangeArcGISViewerforFlexNochangeArcGISViewerforSilverlightNochangeDevelopertechnologyPriorto10.110.1ArcGISAPIforJavaScriptNochangeArcGISAPIforFlexNochangeArcGISAPIforSilverlightNochangeArcGISAPIforiOSArcGISRuntimeSDKforiOSArcGISAPIforAndroidArcGISRuntimeSDKforAndroidArcGISMobileSDKArcGISRuntimeSDKforWindowsMobileArcGISAPIforWindowsPhoneArcGISRuntimeSDKforWindowsPhoneNewproductArcGISRuntimeSDKforQtNewproductArcGISRuntimeSDKforWPFNewproductArcGISRuntimeSDKforJavaNewproductArcGISRuntimeArcGISEngineNochangeArcGISEngineDeveloperKitNochangeArcGISEngineRuntimeforLinuxArcGISEngineforLinuxArcGISEngineRuntimeforWindowsArcGISEngineforWindowsArcObjectsSDKfortheMicrosoft.NETFrameworkNochangeArcObjectsSDKforJavaLinuxNochangeArcObjectsSDKforJavaWindowsNochangeArcObjectsSDKforC++LinuxNochangeArcObjectsSDKforC++WindowsNochangeEsriFileGeodatabaseAPINochangeArcGIS系列產(chǎn)品ArcGISforDesktop(Basic,Standard,Advanced)ArcGISEngineArcGISforServerArcGISforWindowsMobile§5.1
ArcGISDesktop及其擴(kuò)展ArcGISDesktop是GIS專業(yè)人員編輯、使用和管理地理信息的主要平臺,它按功能分為三個(gè)不同級別的產(chǎn)品:
ArcGISforDesktopAdvancedArcGISforDesktopStandardArcGISforDesktopBasic每個(gè)產(chǎn)品主要包括:ArcMap、ArcCatlog、ArcGlobe、ArcScene桌面應(yīng)用程序.ArcGIS桌面應(yīng)用程序定制/擴(kuò)展方式使用ArcGIS桌面應(yīng)用程序的定制功能(Customzie),配置應(yīng)用程序界面;使用Python腳本,自動化GIS工作流開發(fā)插件(add-in),定制/擴(kuò)展ArcGIS桌面應(yīng)用程序(Newin10.0)開發(fā)定制組件,擴(kuò)展ArcGIS桌面應(yīng)用程序無需使用ArcObjects,后續(xù)版本不支持VBA定制需要使用ArcObjects,可以使用C#,VB.NET,Java,
C++語言§5.1.1使用Python腳本,自動化GIS工作流Python是一種免費(fèi)的、跨平臺的開源編程語言,它功能強(qiáng)大且簡單易學(xué),因而得到了廣泛應(yīng)用和支持。ESRI已將Python完全納入ArcGIS中,成為了一種用于數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動化的語言,因而有助于提高工作效率。易于學(xué)習(xí),非常適合初學(xué)者,也特別適合專家使用可伸縮程度高,適于大型項(xiàng)目或小型的一次性程序(稱為腳本)可移植,跨平臺可嵌入(使ArcGIS可腳本化)穩(wěn)定成熟用戶社區(qū)規(guī)模大ArcGIS中的PythonPython是地理處理框架的重要組成ArcGIS桌面中的PythonPython窗口獨(dú)立的Python腳本Python腳本工具ArcPyPython窗口ArcGIS10使用Python窗口代替原來的命令行窗口,
通過Python窗口,用戶可以快捷地在ArcGIS內(nèi)部使用Python,從而以交互方式運(yùn)行地理處理工具和功能以及充分利用其他Python模塊和庫。此窗口還為用戶學(xué)習(xí)Python提供了一條途徑。Python窗口提供了智能感知和代碼自動完成功能.可以直接從Catalog中拖放過來即時(shí)的幫助信息簡單實(shí)例:ArcGIS引入了后臺地理處理(Background
Geoprocessing)的概念,允許Geoprocessing工具、ArcGIS操作同時(shí)運(yùn)行(使用多核CPU)。獨(dú)立的Python腳本Python腳本是可以執(zhí)行的.py文件(其中包含Python程序代碼)。獨(dú)立Python腳本可通過兩種方式執(zhí)行:通過操作系統(tǒng)提示或開發(fā)應(yīng)用程序(如PythonWin),或在Windows資源管理器中雙擊.py文件。Python腳本工具Python腳本工具是已添加到地理處理工具箱的Python腳本。添加為腳本工具后,便可以像使用其他地理處理工具一樣使用此腳本工具-可以從工具對話框打開和執(zhí)行、可以在Python窗口和ModelBuilder中使用,并可以從其他腳本和腳本工具中調(diào)用。ArcPyArcPy--ArcGIS的Python庫由arcgisscripting升級而來包含有函數(shù)(Function)、類(Class)和模塊(Module)功能實(shí)現(xiàn)能訪問所有g(shù)p工具數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理數(shù)據(jù)分析自動化制圖ArcPy模塊數(shù)據(jù)訪問模塊(arcpy.da)制圖模塊(arcpy.mapping)線性參考(LinearReferencing)模塊(arcpy.lr)
ArcGISSpatialAnalyst擴(kuò)展模塊模塊(arcpy.sa)
GeostatisticalAnalyst模塊(arcpy.ga)
ArcGISNetworkAnalyst擴(kuò)展模塊模塊(arcpy.na)時(shí)間模塊(arcpy.time)
ArcPy類ArcPy類,如SpatialReference和Extent類,通常用作地理處理工具參數(shù)設(shè)置的快捷方式,否則的話,這些參數(shù)會使用更加復(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ù)?!?.1.2使用Add-in插件擴(kuò)展ArcGIS桌面ArcGIS
forDesktop
Add-in(Newin10.0)Add-in是一種能夠快速擴(kuò)展桌面應(yīng)用程序功能的全新擴(kuò)展方式更加容易創(chuàng)建更加容易共享更加安全更易安裝管理ArcGIS
Add-in所支持的類型按鈕和工具(Buttonsandtools)組合框(Comboboxes)菜單和右鍵菜單(Menusandcontextmenus)動態(tài)菜單(Multi-items)工具條(Toolbars)工具面板(Toolpalettes)可??看绑w(Dockablewindows)應(yīng)用程序擴(kuò)展(Applicationextensions)編輯擴(kuò)展(Editorextensions)ArcGIS
Add-in支持的開發(fā)環(huán)境.NETJavaPythonConfig.esriaddinxXMLMetadata(
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所包含的對象,例如Command、Tool、Toolbar,是需要用戶通過Customize窗口定制添加到界面上的。Extension對象,則需要用戶通過Extensions窗口勾選加載。Add-in共享與安全實(shí)現(xiàn)局域網(wǎng)內(nèi)共享設(shè)置共享目錄、設(shè)置安全級別Add-in數(shù)字簽名工具:ESRISignAddin.exeC:\ProgramFiles\CommonFiles\ArcGIS\bin\ESRISignAddIn.exe§5.1.3
使用定制組件擴(kuò)展ArcGIS桌面使用定制組件擴(kuò)展ArcGIS桌面的優(yōu)勢:Theycanbeeasilydeliveredtoendusersviacustomsetupprograms.Youcanhideyourcodeandlogicinabinaryfile.YoucanextendandcustomizevirtuallyeveryaspectoftheArcGIStechnology.ArcObjects+C#.NET§5.2
ArcObjects/ArcGIS
Engine
使用ArcObjects,可以:Customize
ArcGISforDesktopbywritingadd-insorbuildingcustomcomponentsin.NETorJava.Extend
ArcGISforServerwithserverobjectextensions(SOE)written
in.NETorJava.Create
stand-alonedesktopapplicationsin.NET,Java,orCross-platformC++.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平臺及跨平臺開發(fā)。Windows平臺開發(fā),有以下APIs:.NETVC++跨平臺開發(fā),有以下APIs:JavaC++forWindowsC++forSolaris/Linux使用ArcGISEngine控件開發(fā)獨(dú)立的GIS應(yīng)用UsingtheWinformsArcGISEnginecontrolsUsingArcGISEngineControlsinWPF需要特別注意的是:開發(fā)獨(dú)立的GIS應(yīng)用程序,ArcGIS10中有一個(gè)新的要求--runtime綁定,即在任何ArcObjects代碼被執(zhí)行之前,需要指定合適的運(yùn)行時(shí):ArcGISDesktop或者ArcGISEngine。需要在Main()靜態(tài)方法中加入類似代碼:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);§5.3
ArcGISforServerArcGISforServer是功能強(qiáng)大的基于服務(wù)器的GIS產(chǎn)品,用于構(gòu)建集中管理的、支持多用戶的、具備高級GIS功能的企業(yè)級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ā)框架。ServiceAPIsArcGISServerAdministratorAPIArcGISServerRESTAPIArcGISServerSOAPAPIArcGISSpatialDataServerRESTAPIArcGISPortalAPIArcGISwebmapJSONformatOnlineWebapplicationsArcGISWebAPIs用于開發(fā)Web應(yīng)用程序,這些應(yīng)用程序能夠使用ArcGISServer,ArcGISOnline,PortalforArcGIS及其它服務(wù)器上的各種GIS服務(wù)。ArcGISAPIforJavaScriptArcGISAPIforFlexArcGISAPIforSilverlight§5.4
Mobile
GIS--ArcGISRuntimeSDKsArcGIS技術(shù)可以部署到一系列的移動設(shè)備上,從輕量級的設(shè)備到PDA、筆記本電腦、平板電腦以及各種智能手機(jī)。ArcGIS為各種移動設(shè)備、Windows桌面以及Windows移動平臺提供了相應(yīng)的開發(fā)包:
ArcGISRuntimeSDKs.ArcGISRuntimeSDKsSmartphonesandtabletsArcGISRuntimeSDKforAndroid:用于開發(fā)Android應(yīng)用程序的Java開發(fā)包;ArcGISRuntimeSDKforiOS:用于開發(fā)iPhone/iPad應(yīng)用程序的ObjectiveC開發(fā)包;ArcGISRuntimeSDKforWindowsPhone:用于開發(fā)WindowsPhone應(yīng)用程序的Silverlight開發(fā)包。Tablets,notebooks,andruggedmobiledevicesArcGISRuntimeSDKforWPF:用于開發(fā)Windows應(yīng)用程序的開發(fā)包;ArcGISRuntimeSDKforJava:用于開發(fā)Java應(yīng)用程序的開發(fā)包;ArcGISRuntimeSDKforWindowsMobileDevelopstandaloneapplicationsandembedGISfunctionalityintoexistingapplicationsforWindowsMobileandWindowsrunningonnotebooks,tablets,anddesktopsDevelopcustomtasks/extensionsfortheArcGISforWindowsMobilefieldapplications§6
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
Application§6.1ArcGISVisualStudioIDEIntegrationFrameworkforadd-ins在VS環(huán)境下開發(fā):創(chuàng)建解決方案(Solution)一到多個(gè)項(xiàng)目(Projects)一到多個(gè)類(Classes)§6.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ū)詣哟蜷_,通過自動添加ArcGIS引用及許可初始化代碼,來幫助開發(fā)人員高效地搭建新的ArcGIS定制項(xiàng)目。Class
Library
(ArcMap
)Windows
Application
(Desktop)WindowsApplication(Engine)§2.3
ArcGISitemtemplatesAdd-in組件模板類模板ArcGISAddClass(最通用的類模板)
Wizard當(dāng)選擇“ArcGIS
Class”模板后,添加類向?qū)詣语@示,指導(dǎo)開發(fā)人員完成類的創(chuàng)建。ArcGISAddClassWizardincludethefollowing3steps:BaseImplementationoptionComponentCategoryoptionOptionalInterfacesoptionBaseImplementationoptionCustomizationgroupBasecomponentComponentCategoryoptionCategoriesCategorypropertiesOptionalInterfacesoptionAvailableoptionalinterfacesSelectedinterfaces§6.4
ArcGISReferencedialogbox§6.5
ArcGISComponentCategoryRegistrardialogbox§6.6ArcGISLicenseInitializerdialogbox不管是ArcGIS桌面應(yīng)用程序還是獨(dú)立的GIS應(yīng)用程序,在訪問
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 稀土居間合同范本
- 模具師合同范本
- Tubulin-polymerization-IN-75-生命科學(xué)試劑-MCE
- p-F-HHSiD-hydrochloride-p-Fluorohexahydrosiladifenidol-hydrochloride-生命科學(xué)試劑-MCE
- 全款供貨合同范本
- 浙江 物業(yè)合同范本
- 2025年醫(yī)用電子直線加速器項(xiàng)目發(fā)展計(jì)劃
- 2025年玻璃纖維網(wǎng)墊項(xiàng)目發(fā)展計(jì)劃
- 2025年科創(chuàng)大數(shù)據(jù)項(xiàng)目發(fā)展計(jì)劃
- 財(cái)務(wù)審計(jì)服務(wù)合同(2篇)
- 在優(yōu)化營商環(huán)境工作座談會上的講話
- 2024-2025學(xué)年七年級數(shù)學(xué)下冊第7章《冪的運(yùn)算》檢測卷(蘇科版2024 含答案解析)
- 家具公司、店鋪管理運(yùn)營手冊
- 2025年餐飲股權(quán)分配協(xié)議書模板
- 浙江省寧波市奉化區(qū)2024-2025學(xué)年高二上學(xué)期期末聯(lián)考語文試題及答案
- 2025-2030年中國鉛酸蓄電池行業(yè)市場需求分析與十三五規(guī)劃研究報(bào)告
- 2024年蘇州職業(yè)大學(xué)高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2025年江蘇蘇州市常熟市交通公有資產(chǎn)經(jīng)營有限公司招聘筆試參考題庫附帶答案詳解
- 中國民用航空飛行學(xué)院《大學(xué)數(shù)學(xué)(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- ESG新政與國有企業(yè)ESG發(fā)展
- 幼兒園案例分析 意大利貝納通托兒所
評論
0/150
提交評論