版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
开发Engine应用程序的基本原理开发Engine应用程序的基本原理课程2ArcObjectslibrariesArcObjectsEngineAPIs开发Engine应用程序许可2课程2ArcObjectslibraries2ArcGIS结构所有产品共享ArcObjectsEngine包括核心ArcObjects的功能ArcGISDesktopArcGISEngineArcGISServer3ArcGIS结构所有产品共享ArcObjectsArcGIArcGIS库所有产品共享库一些特定库不被共享例如:esriArcMapUI明确哪些库是属于不同产品理解库的互依赖性开发工具ArcGISDeveloperHelpESRI自动提及的附加资源4ArcGIS库所有产品共享库4ArcGISEnginelibrary体系结构5ArcGISEnginelibrary体系结构5ArcObjects所有ArcGIS产品都是由ArcObjects组成ArcObjects都是C++对象通过不同的应用程序接口(API)来进行调用本身其就是COM组成6ArcObjects所有ArcGIS产品都是由ArcObjeComponent(Map.dll)ClientArcMapCOM连接一个软件模型和另一个软件模型的一种协议独立的一种语言二进制规范运用界面或组件来开发、配置程序模型客户端调用服务器并且服务给予响应所有通讯是通过接口进行的7ComponentClientCOM连接一个软件模型和另一个ArcObjects和COMAPI(应用编程接口)所有ArcObjectsCOM类型都已在类型库里定义好并且类型库是通过二进制文件来进行描述类:CLSIDs和ProgIDs接口:IIDs常量和列举执行DLL和EXE文件开发工具ArcGISDeveloperHelp(VB6orVC++)LibraryLocator,EOBrowserandOleView*ArcObjectsC++*.dllfiles*COMTypeLibraries*.olbfiles8ArcObjects和COMAPI(应用编程接口)所有ArCOM类COM类执行接口所有类执行IUnknown管理所有对象的产生、终结成员:QueryInterface,AddRef和ReleaseCoclasses是可创建的PublicSubmapName()DimpMapAsIMap
‘你能通过一个接口来创建一个实例SetpMap=NewMapEndSubIUnknown9COM类COM类执行接口IUnknown9COM接口定义一组逻辑的方法和属性从IUnknown(default)继承ArcObjects支持客户化接口通过QueryInterface(QI)访问接口PublicSubmapName()DimpMapAsIMapSetpMap=NewMap
‘通过定义的pMap你可以有权使用其的propertiesandmethods
MsgBoxpMap.NameEndSub10COM接口定义一组逻辑的方法和属性10COM外部连接的一些接口提供跟客户端来进行交换的一些事件的途径通过连接对象并接收它外部接口许多不同的事件在ArcObjects都是可用的例如:documentloadevents,mapdrawing
events,editingevents,…PrivateWithEventsMxDocEventsAsMxDocumentPrivateSubsetNewValues()...SetMxDocEvents=pMxDoc.FocusMap'NowcanaccesseventsEndSubPrivateFunctionMxDocument_NewDocument()AsBooleanMsgBox"NewArcMapdocument"EndFunction11COM外部连接的一些接口提供跟客户端来进行交换的一些事件的其他类型库中包含了所有COM类每个类型都有全球唯一标识(GUID)比如:CLSID,IID,Progid,…使用esriSystem.UID就可以代表一个对象GUID详细描述CLSID或ProgID(ProjectName.ClassName)DimuAsNewUIDu.Value="{4FDD8858-DF31-4D6B-8679-1FED633262DA}"'CLSIDofControlsMapRotateToolDimuAsNewUIDu.Value="esriControlCommands.ControlsMapRotateTool“'ProgIDofControlsMapRotateToolDimcommandAsICommandcommand=AxToolbarControl1.CommandPool.FindByUID(u)IfNotcommandIsNothingThenMsgBox(command.Name)EndIf12其他类型库中包含了所有COM类DimuAsNewUIArcObjects和.NETAPI(应用编程接口)所有ArcObjects类型在.NET集合中都有定义主要的存储方式都是importingtheCOMtypelibrariesPIAexposesallclasses,interfacesandconstantsasmanaged.NETtypes需要.NETFramework1.1开发工具ArcGISDeveloperHelp(.NET)ILDASM.exeArcObjectsC++COMTypeLibraries.NETAssembliesInterop13ArcObjects和.NETAPI(应用编程接口)所有AArcGIS.NET集合和命名空间所有.NET项目都必须引用ESRI集合比如:ESRI.ArcGIS.Carto.dll导入命名空间访问ArcObjects.NET类型比如:ESRI.ArcGIS.Carto集合具有互依赖性‘VisualBasic.NET使用’Imports‘关键字ImportsESRI.ArcGIS.esriSystemImportsESRI.ArcGIS.SystemUIImportsESRI.ArcGIS.CartoImportsESRI.ArcGIS.Display14ArcGIS.NET集合和命名空间所有.NET项目都必.NET类被管理.NET类表示ArcObjects对象两种类型是可用的<COMobjectName>”Class”:执行所有接口和以及类的成员<COMobjectName>:代表真实的ArcObjects对象
创建.NET类实例化实际的COM对象DimmapasMapClass
‘注意map没有声明成IMapmap=NewMapClass()map.Extent=envelope
‘Extent是IActiveView的属性,15.NET类被管理.NET类表示ArcObjects对象1.NET接口.NET接口代表ArcObjects接口QueryInterface的不同技术ImplicitcastingExplicitcasting使用TypeOf防止使用Implicitcasting而出现InvalidCastException错误geometry=point 'ImplicitcastinVB.NET(QI)
geometry=CType(point,IGeometry) 'ExplicitcastinVB.NET(QI)DimpointAsNewPointClassDimgeometryAsIGeometryIf(TypeOfpointIsIGeometry)Thengeometry=pointEndIf16.NET接口.NET接口代表ArcObjects接口Dim.NET外接口可以连接COM对象并且接收其事件使用.NET类型挂起“Event”到外接口比如:IActiveViewEvents_Event技术WithEvents:用于默认外接口Delegates:用于连接非默认外接口
PrivateSelectionChangedAsIActiveViewEvents_SelectionChangedEventHandlerPublicOverridesSubOnClick()
创建一个Delegates的实例,并添加其到SelectionChanged事件SelectionChanged=NewIActiveViewEvents_SelectionChangedEventHandler(AddressOf
OnSelectionChanged)AddHandlermap.SelectionChanged,SelectionChangedEndSubPrivateSubOnSelectionChanged() 'EventhandlerMessageBox.Show("SelectionChanged")EndSub17.NET外接口可以连接COM对象并且接收其事件使用.NET其他Execptionshandling除所有COM之外应该声明的handle对象处理许多handle都要调用ReleaseCOMObject进行释放Exceptionhandlingandgarbagecollection(ReleaseCOMObject)indisposeTryDimenvAsIEnvelope=NewEnvelopeClass()env.PutCoords(0D,0D,10D,10D)DimtransAsITransform2D=envtrans.Rotate(env.LowerLeft,1D)CatchexAsSystem.ExceptionMessageBox.Show("Error:"+ex.Message)
‘完成所有事理的代码.EndTry18其他ExecptionshandlingExceptionArcObjects和JavaAPI在ArcObjects开发包里解压缩所有Java类和接口通过使用标准JAVA类型产生一个interop层访问所有COM类型需要JDK1.4.2开发工具ArcGISDeveloperHelp(JavaDoc)ArcObjectsC++(*.dll)COMTypeLibraries(*.olb)JavaClasses
(*.jar)Interop19ArcObjects和JavaAPI在ArcObjectsArcObjectsJava开发包和JAR文件应用程序必须引用ArcObjectsJARsarcobjects.jar:Non-UIJNIequivalentsjintegra.jar:RuntimelibrarythathandlesCOMinteroparcgis_visualbeans.jar:UIJavabeansforcontrols(optional)导入一个或多个开发包或独立类型com.esri.arcgis.<library>com.esri.arcgis.carto.Map;com.esri.arcgis.carto.*;importcom.esri.arcgis.system.*;importcom.esri.arcgis.systemUI.*;importcom.esri.arcgis.carto.*;importcom.esri.arcgis.display.*;20ArcObjectsJava开发包和JAR文件应用程序必Java类Java类允许实例化并访问ArcObjectsCOM对象Classes:不可创建的CoClasses:使用“new”创建Publicly类/*下列方法不能创建类/FeatureClassfc=newFeatureClass();/*比如通过FeatureWorkspace创建要素类*/IFeatureClassfc=fw.openFeatureClass("featureclassname");
/*直接通过NEW创建类*/Envelopeenv=newEnvelope();21Java类Java类允许实例化并访问ArcObjectsCJava接口Java接口可以表示ArcObjects接口两类型Java接口=ArcObjects接口Javaproxyclass=此类用于执行Java接口不能通过默认proxyclass访问对象IPointProxyproxyPoint=newIPointProxy();//错误interfaceIArea:IUnknownpublicinterfaceIArea{}publicclassIAreaProxyimplementsIArea{}22Java接口Java接口可以表示ArcObjects接口在Java中创建接口及访问接口通过JavaAPI访问接口有两种方法Classcast:使用对象构造器Cross-cast(QI):使用proxyclassIFeaturefeature=featureClass.getFeature(i);IGeometrygeom=feature.getShape();if(geom.getGeometryType()==esriGeometryType.esriGeometryPolygon){ /*Note:“Polygonp=(Polygon)geom;”willgiveClassCastException*/
Polygonpoly=newPolygon(geom); doSomeProcessingOnPolygon(poly);}IFeaturefeature=featureClass.getFeature(i);IGeometrygeom=feature.getShape();/*Note:“IAreaarea=(IArea)geom;”willgiveClassCastException*/IAreaarea=newIAreaProxy(geom);doSomeProcessingOnArea(area);
23在Java中创建接口及访问接口通过JavaAPI访问接口在Java中外接口和事件使用Java监听器可以连接到COM事件添加<Listener>to外部接口技术添加和移除listener类如果要使用控件必须使用eventadaptorclass//WireuptheeventsforMapControlmap.addIMapControlEvents2Listener(newIMapControlEvents2Adapter(){publicvoidonAfterDraw(IMapControlEvents2OnAfterDrawEventevt)throwsIOException{if(evt.getViewDrawPhase()==esriViewDrawPhase.esriViewForeground){try{
//drawtheshapeontheMapControlmap.drawShape(currentExtent,fillSymbol);}catch(Exceptione){System.err.println("ErrorindrawingshapeonMapControl");}}}24在Java中外接口和事件使用Java监听器可以连接到COM事其他AllothertypeshandledasclassesorinterfacesStructuresEnumerationsVariantsaredefinedasObjectsReturnasObjecttypeinordertodowncastastype//StructureWKSPointZpublicclass_WKSPointZ{publicdoublex;publicdoubley;publicdoublez;}//Enumerationesri3DAxispublicinterfaceesri3DAxis{publicstaticfinalintesriXAxis=0;publicstaticfinalintesriYAxis=1;publicstaticfinalintesriZAxis=2;}ICursorspCursor=spTable.ITable_search(spQueryFilter,false);IRowspRow=spCursor.nextRow();//Iterateovertherowswhile(spRow!=null){ ShortID=(Short)(spRow.getValue(1)); Stringname=(String)(spRow.getValue(2)); ShortbaseID=(Short)(spRow.getValue(3)); System.out.println(“ID=”+ID+”\tname=”+name+”\tbaseID=”+baseID); spRow=spCursor.nextRow();}
//Movetothenextrow25其他AllothertypeshandledascArcGISEngine和Desktop类似两层许可产品ArcView,ArcEditor和ArcInfoEnginestandard和GDBUpdate扩展Spatial,3D,StreetMapUSAArcGIS产品许可模型DesktopExtensionsArcSDEEditArcInfoArcEditorGeodatabaseUpdateOptionStandardArcViewStandardEngine3DAnalyst…3DAnalyst…Engine26ArcGISEngine和Desktop类似ArcGISArcGISEngineruntime许可:产品在运行时,所有应用程序都必须初始化产品许可使用esriSystem::AoInitialize初始化产品许可可编写的产品ArcViewArcEditorArcInfoEngineEngineGeoDBPrivatem_pAoInitializeAsIAoInitializePrivateSubForm_Load()Setm_pAoInitialize=NewAoInitializem_pAoInitialize.InitializeesriLicenseProductCodeEngineEndSubPrivateSubForm_Unload(CancelAsInteger)m_pAoInitialize.ShutdownEndSub27ArcGISEngineruntime许可:产品在运ArcGISEngineruntime许可:扩展应用程序还可以初始化扩展许可使用AoInitialize管理扩展的许可可编写的扩展3DAnalyst,SpatialAnalyst,和StreetMapPrivatem_pAoInitializeAsIAoInitializePrivateSubForm_Load()Setm_pAoInitialize=NewAoInitializem_pAoInitialize.InitializeesriLicenseProductCodeEnginem_pAoInitialize.CheckOutExtensionesriLicenseExtensionCode3DAnalystEndSubPrivateSubForm_Unload(CancelAsInteger)m_pAoInitialize.CheckInExtension(esriLicenseExtensionCode3DAnalyst)m_pAoInitialize.ShutdownEndSub28ArcGISEngineruntime许可:扩展应用区别ArcGISEngine和Desktop许可
应用程序能初始化ArcGISEngine或Desktop许可使用IAoInitialize::IsProductCodeAvailable可以使用License来对用户进行选择…'TrytocheckoutEnginelicensefirstIfm_pAoInitialize.IsProductCodeAvailable(esriLicenseProductCodeEngine)=esriLicenseAvailableThenm_pAoInitialize.InitializeesriLicenseProductCodeEngine'TrytocheckoutDesktoplicensenextElseIfm_pAoInitialize.IsProductCodeAvailable(esriLicenseProductCodeArcView)=esriLicenseAvailableThenm_pAoInitialize.InitializeesriLicenseProductCodeArcViewEndIf
29区别ArcGISEngine和Desktop许可应用程Theruntimelicense生命周期步骤CheckiftheproductisavailablewiththeIsProductCodeAvailablemethod.CheckwhatextensionsareavailablewiththeIsExtensionCodeAvailablemethod.Initializetheapplicationwiththeproductlicense.Asrequired,执行extensioncheckoutsandcheckinswiththeCheckOutExtensionandCheckInExtensionmethods.Shutdowntheproductlicense.30Theruntimelicense生命周期步骤30Licensing规则在执行任何ArcObjectscode之前都必须对Licenseinitialization在应用程序还在持续的时候,应用程序都将检查license是否存在所有扩展licenses都要被登记并且是合格的才能使用CannotcombineormixproductandextensionlicensesShouldwritecodetoquerytheleveloflicensingavailableand检查Licenses的来源尽量初始化使用中用到的最小化的licensing31Licensing规则在执行任何ArcObjectsco创建Engine应用程序:.NET步骤创建一个项目引用ArcGIS库初始化许可
32创建Engine应用程序:.NET步骤32步骤1:创建一个独立项目创建一个Windows应用程序VB.NET或C#项目名称是一个namespaceEngineLicenseApp33步骤1:创建一个独立项目创建一个Windows应用程序33步骤2:引用ArcGIS库手动引用ESR集合引用开发工具ESRIAutomaticReferencesadd-in在所有类里导入引用ImportsESRI.ArcGIS.esriSystemPublicClassfrmEngineClientInheritsSystem.Windows.Forms.Form34步骤2:引用ArcGIS库手动引用ESR集合引用Impor步骤3:初始化许可手动实现这段代码DevelopertoolsESRILicenseInitializeradd-inPrivatem_pAoInitializeAsIAoInitializePrivateSubForm_Load()Setm_pAoInitialize=NewAoInitializem_pAoInitialize.InitializeesriLicenseProductCodeEngineEndSubPrivateSubForm_Unload(CancelAsInteger)m_pAoInitialize.Sh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上思县社区工作者招聘考试真题及答案
- 唐山市护士招聘笔试题及答案
- 2026年甘肃酒泉市中考二模英语模拟试卷试题(含答案详解)
- 专题六 名篇名句默写
- 外科主治医师试题及详解
- 26年PTEN缺失检测与靶向用药适配
- GMAT逻辑试题及答案
- 婴儿保姆协议合同书
- 废料招标合同协议书
- 店铺并购协议书
- 回族上坟怎么念
- 材料的力学行为
- GB/T 42415-2023表面活性剂静态表面张力的测定
- YY/T 1681-2019医疗器械唯一标识系统基础术语
- GB/T 25380-2010数控滚齿机精度检验
- plm实施工具11培训课件库cmii培训课件
- 《社会工作伦理案例分析》课件011 妇女社会工作伦理
- Unit 3 Lesson 1 Spring Festival 课件-高中英语北师大版(2019)必修第一册
- DB34-T 4285-2022特种作业安全技术实际操作考试点验收规范
- 2022年新教材高中数学第3章数学建模活动1建筑物高度的测量2测量和自选建模作业的汇报交流课件北师大版必修第二册
- 《催化工程》课程教学大纲
评论
0/150
提交评论