使用或Java进行ArcGISEngine开发.ppt_第1页
使用或Java进行ArcGISEngine开发.ppt_第2页
使用或Java进行ArcGISEngine开发.ppt_第3页
使用或Java进行ArcGISEngine开发.ppt_第4页
使用或Java进行ArcGISEngine开发.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用.Net或Java进行ArcGISEngine开发,罗雄,ArcGISEngine概览基于.Net或Java构建Engine应用程序版本迁移高级功能开发,内容概要,ArcGISEngine概览,ArcGISOverview,ArcObjects是一套组件的统称ESRI用ArcObjects开发软件及应用开发者可以使用ArcObjects来自定义软件或构建自己的应用系统ArcObjects是ArcGIS的核心,ArcObjects,ArcGIS产品与ArcObjects,ArcGISServer,ArcGISDesktop,ArcGISEngine,用于构建定制应用的一个完整的嵌入式GIS组件库ArcObjects中的核心类库及组件是AO的一个子集开发语言上支持COM.NetJavaC+,ArcGISEngine,ArcGISEngineDeveloperKit开发者用于创建自定义的GIS和制图应用的开发包ArcGISEngineRuntime运行自定义的Engine应用的可分发的ArcObejctsArcGISDesktop9.2后其中已经包含ArcGISEngineRuntime开发者与最终用户部署都需要安装,ArcGISEngine组成,基本服务应用层需要用到的ArcObjects核心对象几何图形的操作与显示数据访问地理数据集,矢量,栅格数据地图分析属性、空间查询,地理数据处理地图显示渲染、标注、制图表达开发组件各种应用层面上的Control及CommandsmapHost.Child=globeControl;globeControl.BackColor=System.Drawing.Color.Black;globeControl.BorderStyle=0;,步骤,引用ESRI.ArcGIS.Geoprocessor所使用工具的引用,如ESRI.ArcGIS.AnalysisToolsGP调用方式使用GP工具的名字GP.Execute(kriging_3d,pArray,null);使用AE提供的GP类SpatialAnalystTools.Idwidw=newESRI.ArcGIS.SpatialAnalystTools.Idw();GP.Execute(idw,null);GpDispatch反射方式调用,调用GP工具,调用GP的优越性高效率、方便易用Tips返回GP执行结果信息用于排查错误数据存储在SDE库中的时候如何调用GP?,调用GP工具,Engine.NETAPI都是直接通过RCW(runtimecallablewrapper)方式调用AO底层的组件,这些托管组件由CLR(CommonLanguageRuntime)来管理,即通过GC(Garbageollection)机制自动回收;AEfor.NET释放方法ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(comObject);ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown();CLR中的释放方法System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);,常见问题内存释放,常见问题组件注册,开发环境工程属性设置RegisterforCOMinterop部署环境C:WindowsMicrosoft.NETFrameworkv2.0.50727regasmmy.dll/tlb/codebaseregasmmy.dll/unregister,AE中的COM组件都是STA线程模式的(强线程相关性),跨线程使用AE的Com对象会有问题;强烈不推荐在AE中采用多线程操作AE对象,因此一般将一些独立的耗时较长的数据处理操作放在子线程(后台线程)中处理;DrawShape在子线程中绘制将AE对象作为UI控件来处理;在主线程中建立事件的委托代理,在子线程中采用Invoke方法触发;,常见问题多线程,环境配置EngineSDK、Runtime/JDK1.5以上、开发工具(如Eclipse)Java环境变量LinuxsetenvJAVA_HOME/mymachine/java/jdk1.6.0_03setenvPATH$JAVA_HOME/jre/bin:$JAVA_HOME/bin:$PATH设置ARCGISHOME等环境变量:sourceinit_java.shWindowsJAVA_HOME、JRE_HOME、PATH,EngineforJava开发,理解AO的JavaInterop,ESRI的JavaCOMInterop提供了ArcObjects的JavaAPI以及用Java语言创建和使用ArcObjects的运行基础,构建Java应用程序,控制台程序EngineInitializer.initializeEngine();有用户界面的程序ArcGISVisualJavaBeans:Java-COMinterop以AWT(AbstractWindowToolkit)控件的方式呈现给Java开发人员;初始化JavaInterop环境:EngineInitializer.initializeVisualBeans();,使用VisualJavaBeans,Java中常见问题,接口查询不是所有的AO类都支持接口转换;有单参数的构造函数或代理类接口IxxxProxy才行IFeatureClassfc=fw.openFeatureClass(name);FeatureClassfeatureClass=newFeatureClass(fc);IFeatureClassfc=fw.openFeatureClass(name);IGeoDatasetgds=newIGeoDatasetProxy(fc);,Java中常见问题,Engine控件(MapBean、ToolbarBean等)始终位于界面的最上面,它遮挡了菜单和下拉框原因:EngineJava的控件都是基于AWT构建的heavyweight组件,所以和swing的lightweight叠加时会产生覆盖;解决办法:在程序初始化的时候,取消lightweight的支持。JPopupMenu.setDefaultLightWeightPopupEnabled(false);,Java中常见问题,控件事件中弹出窗体或菜单造成程序崩掉原因:VisualJavaBeans触发的事件不是在AWT事件分发线程中处理,而是在Java-COMInterop创建的一个单独的线程里处理;解决办法:建议用SwingUtilities.invokeLater(Runnabler)方法来修改其他swing组件的状态;SwingUtilities.invokeLater(newRunnable()publicvoidrun()JOptionPane.showConfirmDialog(null,“Test”,“弹出窗体,JOptionPane.YES_NO_OPTION););,Java中常见问题,实现ICommand或ITool接口,Bitmap和Cursor该如何获取?AEforJavaSDK提供了基础类BaseCommand和BaseTool,我们可以直接继承自它们直接获取picture或cursorBasicRasterPicturebrp=newBasicRasterPicture();IPicturepic=brp.loadPicture(“path,“xx.bmp);handle=pic.getHandle();ISystemMouseCursorcursnewSystemMouseCursor();curs.loadFromFile(“path,“xx.cur);,版本迁移,AE升级到高版本移除AE引用后重新添加新的引用;编译工程,修改提示错误的地方;开发平台升级直接用平台提供的update向导将应用程序转换到高版本即可;如Engine93forVS2005升级到VS2008;,版本更新,为什么要迁移?ArcGIS9.4不再使用VBA,推荐用Python;9.4版本不再有VB6SDK;微软的.NET开发平台是大势所趋;两类开发语言的差异对象类型、事件处理、接口查询、Win32API的使用方式等均有差别;Commands或Tools的Bitmap属性获取方式VB6返回esriSystem.OLE_Handle.NET返回Int型,常用Bitmap.GetHbitmap(),VB6或VBA迁移到.NET,MicrosoftVisualBasicUpgradeWizard,如何迁移?,ESRI-ArcGISCodeConverter;ArcGIS8.x到9.x命名空间自动替换DimpPolyAsESRI.ArcObjects.Core.IPolygonDimpPolyAsESRI.ArcGIS.Geometry.IPolygon更新dll引用如用ESRI.ArcGIS.ADF替换ESRI.ArcGIS.Utilityassembly,如何迁移?,高级功能开发,可扩展的Editing框架EngineEditor核心对象的开放Start/StopEditSessionsEditableLayersControlofEditOperationsEditingEvents自定义EditorTask自定义Snapping环境以VertexCommands为代表的更多的编辑命令,新的Editor框架使用,新的Editor框架改进,Editing框架演示,ArcGIS一种新的动态显示数据或对象移动的技术几乎实时的显示监测目标的地理信息的需求催生了DynamicDisplay技术DynamicDisplayEngine9.3频繁的刷新速率下显示地理信息快速几乎无间隙的更新速度平滑的、连续的缩放、旋转Dynamic图形几乎实时的显示性能,DynamicDisplay,在Dynamic显示状态下Cache的使用及重用可用程序事先生成并可具体指定创建Cache的区域与ArcGISServer的Cache结构相同并可互用加强了对Cache的管理,Cache方面的改进,支持TextBox对从右到左书写顺序的语言良好支持普遍支持了在Marker周围绘制文本的功能加强了对文本之间的间距的控制在屏幕上绘制CompoundMarkers线型的连续性,Text方面的改进,在DynamicDisplay状态下选择要素连续的缩放SDK中增加了更多的示例及技术文档Bugs的解决,其他方面的改进,并不是所有显示需求的灵丹妙药在默认显示状态下不推荐使用打印对显示效果要求较高的情况下慎用在编辑状态下不推荐使用,DynamicDisplay不适用情况,DynamicDisplay演示,需要有TrackingAnalyst扩展许可通常是对已经存在的轨迹数据或历史数据变迁的一种回放除了点的轨迹外,也支持线、面要素的动态变化时间字段和事件ID字段是里面比较重要的字段,TrackingAnalyst,一、添加Tracking扩展,使用TrackingAnalyst开发步骤,二、设置Tracking环境,使用TrackingAnalyst开发步骤,三、添加FeatureClass,创建Tracking图层,设置Renderer和其他ITemporalLayer属性注:ITemporalLayer必须在TrackingEnvironment设置好之后创建,使用TrackingAnalyst开发步骤,四、随时间变化更新轨迹修改TemporalPerspective属性(时间值)来控制当前播放的位置,使用TrackingAnalyst开发步骤,Tracking事件与UI的交互需要用到多线程,在主线程里通过Invoke方法激发自定义事件代理:Invoke(newIncrement(OnIncrement);,使用TrackingAnalyst开发步骤,TrackingAnalyst演示,使用Element绘制,也就是将轨迹动态地以Element的形式添加到地图上优点可以很方便地定义符号和文字标识;很多细节都可以控制,如选择、修改等缺点支持不了太多的数量,一般大几百个Element后速度会慢;受底图影响大,特别是底图包含大量label;绘制的Element位于最上层,会压盖底图的label(不过这点可以通过控制label行为来解决),动态目标追踪的实现方法(一),使用MapControl的DrawShape方法(或IScreenDisplay.Draw*),也是根据轨迹线的shape直接显示优点屏幕绘制,效率比Element高,刷新快不会压盖底图标注缺点:细节控制不方便刷新后消失,因此需要在OnAfterDraw事件里去重绘才能保持,动态目标追踪的实现方法(二),IRealTimeFeedManager等接口实现gps追踪的模拟优点在内存中构建FeatureL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论