版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2-1课程2ArcObjectslibrariesArcObjectsEngineAPIs开发Engine应用程序许可2-2ArcGIS结构所有产品共享ArcObjectsEngine包括核心ArcObjects的功能ArcGISDesktopArcGISEngineArcGISServer2-3ArcGIS库所有产品共享库一些特定库不被共享例如:esriArcMapUI明确哪些库是属于不同产品理解库的互依赖性开发工具ArcGISDeveloperHelpESRI自动提及的附加资源2-4ArcGISEnginelibrary体系结构2-5ArcObjects所有ArcGIS产品都是由ArcObjects组成ArcObjects都是C++对象通过不同的应用程序接口(API)来进行调用本身其就是COM组成2-6Component(Map.dll)ClientArcMapCOM连接一个软件模型和另一个软件模型的一种协议独立的一种语言二进制规范运用界面或组件来开发、配置程序模型客户端调用服务器并且服务给予响应所有通讯是通过接口进行的2-7ArcObjects和COMAPI(应用编程接口)所有ArcObjectsCOM类型都已在类型库里定义好并且类型库是通过二进制文件来进行描述类:CLSIDs
和ProgIDs接口:
IIDs常量和列举执行DLL和EXE文件开发工具ArcGISDeveloperHelp(VB6orVC++)LibraryLocator,EOBrowserandOleView*ArcObjectsC++*.dllfiles*COMTypeLibraries*.olbfiles2-8COM类COM类执行接口所有类执行IUnknown管理所有对象的产生、终结成员:QueryInterface,AddRef
和ReleaseCoclasses
是可创建的PublicSubmapName()DimpMapAsIMap
‘你能通过一个接口来创建一个实例SetpMap=NewMapEndSubIUnknown2-9COM接口定义一组逻辑的方法和属性从
IUnknown(default)继承ArcObjects
支持客户化接口通过QueryInterface(QI)访问接口PublicSubmapName()DimpMapAsIMap
SetpMap=NewMap
‘通过定义的pMap你可以有权使用其的propertiesandmethods
MsgBoxpMap.NameEndSub2-10COM外部连接的一些接口提供跟客户端来进行交换的一些事件的途径通过连接对象并接收它外部接口许多不同的事件在ArcObjects都是可用的例如:documentloadevents,mapdrawing
events,editingevents,…PrivateWithEventsMxDocEventsAsMxDocumentPrivateSubsetNewValues()...SetMxDocEvents=pMxDoc.FocusMap
'NowcanaccesseventsEndSubPrivateFunctionMxDocument_NewDocument()AsBoolean
MsgBox"NewArcMapdocument"EndFunction2-11其他类型库中包含了所有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)IfNotcommandIsNothingThen
MsgBox(command.Name)EndIf2-12ArcObjects和.NETAPI(应用编程接口)所有ArcObjects类型在.NET集合中都有定义主要的存储方式都是importingtheCOMtypelibrariesPIAexposesallclasses,interfacesandconstantsasmanaged.NETtypes需要.NETFramework1.1开发工具ArcGISDeveloperHelp(.NET)ILDASM.exeArcObjectsC++COMTypeLibraries.NETAssembliesInterop2-13ArcGIS.NET集合和命名空间所有.NET项目都必须引用ESRI集合比如:ESRI.ArcGIS.Carto.dll导入命名空间访问ArcObjects.NET类型比如:ESRI.ArcGIS.Carto集合具有互依赖性‘VisualBasic.NET使用’Imports‘关键字ImportsESRI.ArcGIS.esriSystemImportsESRI.ArcGIS.SystemUIImportsESRI.ArcGIS.CartoImportsESRI.ArcGIS.Display2-14.NET类被管理.NET类表示ArcObjects
对象两种类型是可用的<COMobjectName>”Class”:执行所有接口和以及类的成员<COMobjectName>:代表真实的ArcObjects对象
创建.NET类实例化实际的COM对象Dimmapas
MapClass
‘注意map没有声明成IMapmap=NewMapClass()map.Extent=envelope
‘Extent是IActiveView的属性,2-15.NET接口.NET接口代表ArcObjects接口QueryInterface的不同技术ImplicitcastingExplicitcasting使用TypeOf
防止使用Implicitcasting而出现InvalidCastException错误geometry=point 'ImplicitcastinVB.NET(QI)
geometry=CType(point,IGeometry) 'ExplicitcastinVB.NET(QI)DimpointAsNewPointClassDimgeometryAsIGeometryIf(TypeOfpointIsIGeometry)Thengeometry=pointEndIf2-16.NET外接口可以连接COM对象并且接收其事件使用.NET类型挂起“Event”到外接口比如:IActiveViewEvents_Event技术WithEvents:用于默认外接口Delegates
:用于连接非默认外接口
PrivateSelectionChangedAsIActiveViewEvents_SelectionChangedEventHandlerPublicOverridesSubOnClick()
创建一个Delegates的实例,并添加其到SelectionChanged事件SelectionChanged=NewIActiveViewEvents_SelectionChangedEventHandler(AddressOf
OnSelectionChanged)AddHandlermap.SelectionChanged,SelectionChangedEndSubPrivateSubOnSelectionChanged() 'EventhandlerMessageBox.Show("SelectionChanged")EndSub2-17其他Execptionshandling除所有COM之外应该声明的handle对象处理许多handle都要调用
ReleaseCOMObject进行释放Exceptionhandlingandgarbagecollection(ReleaseCOMObject)indisposeTryDimenvAsIEnvelope=NewEnvelopeClass()
env.PutCoords(0D,0D,10D,10D)DimtransAsITransform2D=env
trans.Rotate(env.LowerLeft,1D)CatchexAsSystem.Exception
MessageBox.Show("Error:"+ex.Message)
‘完成所有事理的代码.EndTry2-18ArcObjects和JavaAPI在ArcObjects开发包里解压缩所有Java类和接口通过使用标准JAVA类型产生一个interop层访问所有COM类型需要JDK1.4.2开发工具ArcGISDeveloperHelp(JavaDoc)ArcObjectsC++(*.dll)COMTypeLibraries(*.olb)JavaClasses
(*.jar)Interop2-19ArcObjectsJava开发包和JAR文件应用程序必须引用ArcObjects
JARsarcobjects.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.*;2-20Java类Java类允许实例化并访问ArcObjectsCOM对象Classes:不可创建的CoClasses:使用“new”创建Publicly类/*下列方法不能创建类/FeatureClassfc=newFeatureClass();/*比如通过FeatureWorkspace创建要素类*/IFeatureClassfc=fw.openFeatureClass("featureclassname");
/*直接通过NEW创建类*/Envelopeenv=newEnvelope();2-21Java接口Java接口可以表示ArcObjects接口两类型Java接口=ArcObjects
接口Javaproxyclass=此类用于执行Java接口不能通过默认proxyclass访问对象IPointProxyproxyPoint=newIPointProxy();//错误interfaceIArea:IUnknownpublicinterfaceIArea{}publicclassIAreaProxyimplementsIArea{}2-22在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);
2-23在Java中外接口和事件使用Java监听器可以连接到COM事件添加<Listener>to外部接口技术添加和移除listener类如果要使用控件必须使用eventadaptorclass//WireuptheeventsforMapControlmap.addIMapControlEvents2Listener(newIMapControlEvents2Adapter(){publicvoidonAfterDraw(IMapControlEvents2OnAfterDrawEventevt)throwsIOException{if(evt.getViewDrawPhase()==esriViewDrawPhase.esriViewForeground){try{
//drawtheshapeontheMapControl
map.drawShape(currentExtent,fillSymbol);}catch(Exceptione){System.err.println("ErrorindrawingshapeonMapControl");}}}2-24其他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();}
//Movetothenextrow2-25ArcGISEngine和Desktop类似两层许可产品ArcView,ArcEditor
和ArcInfoEnginestandard和GDBUpdate扩展Spatial,3D,StreetMapUSAArcGIS
产品许可模型DesktopExtensionsArcSDEEditArcInfoArcEditorGeodatabaseUpdateOptionStandardArcViewStandardEngine3DAnalyst…3DAnalyst…Engine2-26ArcGISEngineruntime许可:产品在运行时,所有应用程序都必须初始化产品许可使用esriSystem::AoInitialize初始化产品许可可编写的产品ArcViewArcEditorArcInfoEngineEngineGeoDBPrivatem_pAoInitializeAsIAoInitializePrivateSubForm_Load()Setm_pAoInitialize=NewAoInitialize
m_pAoInitialize.Initialize
esriLicenseProductCodeEngineEndSubPrivateSubForm_Unload(CancelAsInteger)m_pAoInitialize.ShutdownEndSub2-27ArcGISEngineruntime许可:扩展应用程序还可以初始化扩展许可使用AoInitialize管理扩展的许可可编写的扩展3DAnalyst,SpatialAnalyst,和StreetMapPrivatem_pAoInitializeAsIAoInitializePrivateSubForm_Load()Setm_pAoInitialize=NewAoInitialize
m_pAoInitialize.InitializeesriLicenseProductCodeEngine
m_pAoInitialize.CheckOutExtensionesriLicenseExtensionCode3DAnalystEndSubPrivateSubForm_Unload(CancelAsInteger)m_pAoInitialize.CheckInExtension(esriLicenseExtensionCode3DAnalyst)m_pAoInitialize.ShutdownEndSub2-28区别ArcGISEngine和Desktop许可
应用程序能初始化ArcGISEngine或Desktop许可使用IAoInitialize::IsProductCodeAvailable可以使用License来对用户进行选择…'TrytocheckoutEnginelicensefirstIfm_pAoInitialize.IsProductCodeAvailable(esriLicenseProductCodeEngine)=
esriLicenseAvailableThenm_pAoInitialize.InitializeesriLicenseProductCodeEngine'TrytocheckoutDesktoplicensenextElseIf
m_pAoInitialize.IsProductCodeAvailable(esriLicenseProductCodeArcView)=esriLicenseAvailableThenm_pAoInitialize.InitializeesriLicenseProductCodeArcViewEndIf
2-29Theruntimelicense生命周期步骤CheckiftheproductisavailablewiththeIsProductCodeAvailablemethod.CheckwhatextensionsareavailablewiththeIsExtensionCodeAvailablemethod.Initializetheapplicationwiththeproductlicense.Asrequired,执行extensioncheckoutsandcheckinswiththeCheckOutExtensionandCheckInExtensionmethods.Shutdowntheproductlicense.2-30Licensing规则在执行任何ArcObjectscode之前都必须对Licenseinitialization在应用程序还在持续的时候,应用程序都将检查license是否存在所有扩展licenses都要被登记并且是合格的才能使用CannotcombineormixproductandextensionlicensesShouldwritecodetoquerytheleveloflicensingavailableand检查Licenses的来源尽量初始化使用中用到的最小化的licensing2-31创建Engine应用程序:.NET步骤创建一个项目引用ArcGIS库初始化许可
2-32步骤1:创建一个独立项目创建一个Windows应用程序VB.NET或C#项目名称是一个namespaceEngineLicenseApp2-33步骤2:引用ArcGIS库手动引用ESR集合引用开发工具ESRIAutomaticReferencesadd-in在所有类里导入引用ImportsESRI.ArcGIS.esriSystemPublicClassfrmEngineClient
InheritsSystem.Windows.Forms.Form2-34步骤3:初始化许可手动实现这段代码DevelopertoolsESRILicenseInitializeradd-inPrivatem_pAoInitializeAsIAoInitializePrivateSubForm_Load()Setm_pAoInitialize=NewAoInitialize
m_pAoInitialize.Initialize
esriLicenseProductCodeEngineEndSubPrivateSubForm_Unl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线上教育保险合作协议书
- 承包期土地补偿协议书
- 超凡装饰样板间协议书
- 应届生协议书离职证明
- 美国二次引渡协议书
- 中学规范守则实施方案
- 不锈钢管道安装施工工艺标准
- 外墙保温施工质量方案范本
- 苯胺的课程设计
- c7220机床课程设计
- 一、内分泌危重患者抢救流程图
- 2023年江西新余中考历史真题及答案
- 2023中级无线电装接工技能理论考试题库(浓缩500题)
- 【人教版】八年级数学下册《一次函数与方程、不等式》基础测试卷及答案
- 预防接种妈妈课堂课件
- 《钢结构工程施工员培训教材》
- GB/T 31166-2014高尔夫球运动安全防护要求
- GB/T 193-2003普通螺纹直径与螺距系列
- 第六课-我是跟旅游团一起来的课件
- 边坡巡检记录表
- 《武汉理工大学学报》论文格式要求
评论
0/150
提交评论