《使用或Java进行ArcGISEngine开发.ppt》由会员分享,可在线阅读,更多相关《使用或Java进行ArcGISEngine开发.ppt(56页珍藏版)》请在三一办公上搜索。
1、使用.Net或Java进行ArcGIS Engine开发,罗雄,ArcGIS Engine 概览基于.Net或Java构建Engine应用程序版本迁移高级功能开发,内容概要,ArcGIS Engine 概览,ArcGIS Overview,ArcObjects是一套组件的统称ESRI用ArcObjects开发软件及应用开发者可以使用ArcObjects来自定义软件或构建自己的应用系统ArcObjects是ArcGIS的核心,ArcObjects,ArcGIS产品与ArcObjects,ArcGIS Server,ArcGIS Desktop,ArcGIS Engine,用于构建定制应用的一个完
2、整的嵌入式GIS组件库ArcObjects中的核心类库及组件是AO的一个子集开发语言上支持 COM.Net Java C+,ArcGIS Engine,ArcGIS Engine Developer Kit开发者用于创建自定义的GIS和制图应用的开发包 ArcGIS Engine Runtime 运行自定义的Engine应用的可分发的ArcObejctsArcGIS Desktop 9.2后其中已经包含ArcGIS Engine Runtime开发者与最终用户部署都需要安装,ArcGIS Engine 组成,基本服务应用层需要用到的ArcObjects核心对象几何图形的操作与显示数据访问地理数
3、据集,矢量,栅格数据地图分析属性、空间查询,地理数据处理地图显示渲染、标注、制图表达开发组件各种应用层面上的Control及Commands&Tools,ArcGIS Engine的功能框架,ArcGIS Engine总览,ArcGIS Engine应用程序类型,独立运行的应用程序,后台非可视化运行程序,嵌入式应用程序,基于.Net或Java构建Engine应用程序,安装Visual Studio2005或2008.NET2.0 SDK和Runtime(3.0WPF)安装ArcGIS Engine Runtime 和SDK for.NETRuntime也需要独立注册许可Runtime与SDK许
4、可差别:是否有DesignerArcGIS Desktop已经包含了Runtime,准备条件,帮助文档示例以及代码片段Visual Studio IDE集成开发控件预先创建好的Commands、Tools、Toolbars和Menus,Engine for.NET SDK,什么是WPF?客户端展现技术极炫的可视化效果设计理念:用户界面和程序实现分离在ArcGIS Engine开发中使用WPF将WPF用户控件放到AE应用程序中将AE控件放到WPF应用程序中,构建WPF应用程序,创建一个WPF应用程序添加AE引用将AE控件对象装载在 WindowsFormsHostglobeControl=new
5、 AxGlobeControl();mapHost.Child=globeControl;globeControl.BackColor=System.Drawing.Color.Black;globeControl.BorderStyle=0;,步骤,引用 所使用工具的引用,如GP调用方式使用GP工具的名字 GP.Execute(kriging_3d,pArray,null);使用AE提供的GP类 SpatialAnalystTools.Idw idw=new();GP.Execute(idw,null);GpDispatch反射方式调用,调用GP工具,调用GP的优越性高效率、方便易用Tips
6、返回GP执行结果信息用于排查错误数据存储在SDE库中的时候如何调用GP?,调用GP工具,Engine.NET API都是直接通过RCW(runtime callable wrapper)方式调用AO底层的组件,这些托管组件由CLR(Common Language Runtime)来管理,即通过GC(Garbage ollection)机制自动回收;AE for.NET释放方法ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(comObject);();CLR中的释放方法System.Runtime.InteropServices.Marshal.Rele
7、aseComObject(obj);,常见问题内存释放,常见问题组件注册,开发环境工程属性设置Register for COM interop部署环境regasm my.dll/tlb/codebaseregasm my.dll/unregister,AE中的COM组件都是STA线程模式的(强线程相关性),跨线程使用AE的Com对象会有问题;强烈不推荐在AE中采用多线程操作AE对象,因此一般将一些独立的耗时较长的数据处理操作放在子线程(后台线程)中处理;DrawShape在子线程中绘制将AE对象作为UI控件来处理;在主线程中建立事件的委托代理,在子线程中采用Invoke方法触发;,常见问题多线
8、程,环境配置Engine SDK、Runtime/JDK 1.5以上、开发工具(如Eclipse)Java环境变量Linuxsetenv JAVA_HOME/mymachine/java/jdk1.6.0_03setenv PATH$JAVA_HOME/jre/bin:$JAVA_HOME/bin:$PATH 设置ARCGISHOME等环境变量:source init_java.shWindowsJAVA_HOME、JRE_HOME、PATH,Engine for Java开发,理解AO的Java Interop,ESRI的Java COM Interop提供了ArcObjects的Java
9、API以及用Java语言创建和使用ArcObjects的运行基础,构建Java应用程序,控制台程序EngineInitializer.initializeEngine();有用户界面的程序ArcGIS Visual Java Beans:Java-COM interop以AWT(Abstract Window Toolkit)控件的方式呈现给Java开发人员;初始化Java Interop环境:EngineInitializer.initializeVisualBeans();,使用Visual Java Beans,Java中常见问题,接口查询不是所有的AO类都支持接口转换;有单参数的构造函
10、数或代理类接口IxxxProxy才行IFeatureClass fc=fw.openFeatureClass(name);FeatureClass featureClass=new FeatureClass(fc);IFeatureClass fc=fw.openFeatureClass(name);IGeoDataset gds=new IGeoDatasetProxy(fc);,Java中常见问题,Engine控件(MapBean、ToolbarBean等)始终位于界面的最上面,它遮挡了菜单和下拉框原因:Engine Java的控件都是基于AWT构建的heavyweight 组件,所以和s
11、wing的lightweight叠加时会产生覆盖;解决办法:在程序初始化的时候,取消lightweight的支持。JPopupMenu.setDefaultLightWeightPopupEnabled(false);,Java中常见问题,控件事件中弹出窗体或菜单造成程序崩掉原因:Visual Java Beans触发的事件不是在AWT事件分发线程中处理,而是在Java-COM Interop创建的一个单独的线程里处理;解决办法:建议用SwingUtilities.invokeLater(Runnable r)方法来修改其他swing组件的状态;SwingUtilities.invokeLat
12、er(new Runnable()public void run()JOptionPane.showConfirmDialog(null,“Test”,“弹出窗体,JOptionPane.YES_NO_OPTION););,Java中常见问题,实现ICommand或ITool接口,Bitmap和Cursor该如何获取?AE for Java SDK提供了基础类BaseCommand和BaseTool,我们可以直接继承自它们直接获取picture或cursorBasicRasterPicture brp=new BasicRasterPicture();IPicture pic=brp.load
13、Picture(“path,“xx.bmp);handle=pic.getHandle();ISystemMouseCursor cursnew SystemMouseCursor();curs.loadFromFile(“path,“xx.cur);,版本迁移,AE升级到高版本移除AE引用后重新添加新的引用;编译工程,修改提示错误的地方;开发平台升级直接用平台提供的update向导将应用程序转换到高版本即可;如Engine 93 for VS2005升级到VS2008;,版本更新,为什么要迁移?ArcGIS9.4不再使用VBA,推荐用Python;9.4版本不再有VB6 SDK;微软的.NE
14、T开发平台是大势所趋;两类开发语言的差异对象类型、事件处理、接口查询、Win32 API的使用方式等均有差别;Commands或Tools的Bitmap属性获取方式VB6返回esriSystem.OLE_Handle.NET返回Int型,常用Bitmap.GetHbitmap(),VB6或VBA迁移到.NET,MicrosoftVisual Basic Upgrade Wizard,如何迁移?,ESRI-ArcGIS Code Converter;ArcGIS8.x到9.x命名空间自动替换DimpPolyAs DimpPolyAs 更新dll引用如用替换 assembly,如何迁移?,高级功能
15、开发,可扩展的Editing框架Engine Editor核心对象的开放Start/Stop Edit SessionsEditable LayersControl of Edit OperationsEditing Events自定义Editor Task自定义Snapping环境 以Vertex Commands为代表的更多的编辑命令,新的Editor框架使用,新的Editor框架改进,Editing 框架演示,ArcGIS一种新的动态显示数据或对象移动的技术几乎实时的显示监测目标的地理信息的需求催生了Dynamic Display技术Dynamic DisplayEngine 9.3频繁
16、的刷新速率下显示地理信息快速几乎无间隙的更新速度平滑的、连续的缩放、旋转Dynamic图形几乎实时的显示性能,Dynamic Display,在Dynamic显示状态下Cache的使用及重用可用程序事先生成并可具体指定创建Cache的区域与ArcGIS Server的Cache结构相同并可互用加强了对Cache的管理,Cache方面的改进,支持Text Box对从右到左书写顺序的语言良好支持普遍支持了在Marker周围绘制文本的功能加强了对文本之间的间距的控制在屏幕上绘制Compound Markers线型的连续性,Text 方面的改进,在Dynamic Display状态下选择要素连续的缩放
17、SDK中增加了更多的示例及技术文档 Bugs的解决,其他方面的改进,并不是所有显示需求的灵丹妙药在默认显示状态下不推荐使用打印对显示效果要求较高的情况下慎用在编辑状态下不推荐使用,Dynamic Display不适用情况,Dynamic Display 演示,需要有Tracking Analyst扩展许可通常是对已经存在的轨迹数据或历史数据变迁的一种回放除了点的轨迹外,也支持线、面要素的动态变化时间字段和事件ID字段是里面比较重要的字段,Tracking Analyst,一、添加Tracking扩展,使用Tracking Analyst开发步骤,二、设置Tracking环境,使用Trackin
18、g Analyst开发步骤,三、添加FeatureClass,创建Tracking图层,设置Renderer和其他ITemporalLayer属性注:ITemporalLayer必须在Tracking Environment设置好之后创建,使用Tracking Analyst开发步骤,四、随时间变化更新轨迹修改TemporalPerspective属性(时间值)来控制当前播放的位置,使用Tracking Analyst开发步骤,Tracking事件与UI的交互需要用到多线程,在主线程里通过Invoke方法激发自定义事件代理:Invoke(new Increment(OnIncrement);,
19、使用Tracking Analyst开发步骤,Tracking Analyst演示,使用Element绘制,也就是将轨迹动态地以Element的形式添加到地图上优点可以很方便地定义符号和文字标识;很多细节都可以控制,如选择、修改等缺点支持不了太多的数量,一般大几百个Element后速度会慢;受底图影响大,特别是底图包含大量label;绘制的Element位于最上层,会压盖底图的label(不过这点可以通过控制label行为来解决),动态目标追踪的实现方法(一),使用MapControl的DrawShape方法(或IScreenDisplay.Draw*),也是根据轨迹线的shape直接显示优点
20、屏幕绘制,效率比Element高,刷新快不会压盖底图标注缺点:细节控制不方便刷新后消失,因此需要在OnAfterDraw事件里去重绘才能保持,动态目标追踪的实现方法(二),IRealTimeFeedManager等接口实现gps追踪的模拟优点在内存中构建FeatureLayer,动态更新方便,由于是图层加载,显示较快缺点细节控制不方便,需要动态构建FeatureClass模拟GPS具体可参考以下例子:DeveloperKitSamplesCOMApplicationsGPSNavigatorVisual_Basic,动态目标追踪的实现方法(三),动态图层技术(IDynamicLayer)优点效率高,能支持数万的的轨迹要素底图Cache,可重用,不受底图复杂度影响无缝平滑缩放缺点细节控制不太方便,选择、查询、移动等都得自己写,动态目标追踪的实现方法(四),谢谢!,欢迎大家接着参与下一个讲座数据互操作与空间ETL主讲人:张政,结束,