1. ArcGis Engine是什么

     ArcGis Engine是为GIS开发者提供的一个完备的GIS组件库,利用ArcEngine,可以将ArcGIS功能嵌入到其它应用程序中,从而能够为用户提供先进的地理信息系统解决方案。 ArcEngine支持windows,Solaris,Linux(Intel)平台,所以开发者可以为用户定制跨平台的应用。






2. ArcEngine的基本特征  



Base Services: 提供核心的GIS ArcObjects,几乎能用来实现任何GIS功能,例如地图的几何特征、显示等。



Data Access:   支持读写各种删格数据和矢量数据格式,以及GeoDataBase。



Map  presentation:  地图的创建、显示标记、标签、专题图等功能



Developer components:   高级的用户界面系统,支持可视化界面开发;一个综合的帮助系统(English);开发示例。



Extensions:   可部署基本的标准功能,或者其他高级功能扩展。



     ArcEngine主要有两部分:ArcObjects SDK for Java,  ArcEngine Runtime。 



     其中SDK是为开发人员提供的工具包,提供了可视化组件、示例、工具、向导、模板、API,以及一些帮助主题等。



     所有用ArcEngine SDK开发的程序都需要在装有ArcEngine Runtime或者 ArcGis Desktop的平台上才能运行(ArcGIS的相关工具还需要有许可证才能正常工作,或者用盗版)。






3. ArcGis Engine 的扩展功能



     ArcEngine提供了所有ArcGIS应用的核心功能,例如地图交互,地图创建,地图分析,数据创建(矢量和个人的Geodatabase),地理数据处理等。除此之外还提供了丰富的扩展功能:Geodatabase更新,空间分析,三维显示,网络扩展,跟踪功能扩展,表格数据处理,数据互操作等。



     GeoDataBase update:  提供对geodatabase的各种操作和处理。



     spatial extension: 提供了强大的函数集用来对基于单元的删格数据(cell-based raster data)进行创建、查询和分析,从而能够获取数据信息,识别空间关系,发现合适的位置,计算从点到点的累计成本等;以及对于DEMs(Digital Elevation Models)计算角度,轮廓,面积等。



     3D-extension: 数据的三维可视化。 该扩增给arcengine增加了组件,可以让用户从不同的视角看同一个面。这部分功能主要ScenneControl、GlobeControl提供。



     NextWork extension: 增加路由、服务区域分析、创建并管理network datasets功能。该扩展能供开发者为运输、紧急响应、火警处理、军队等目的提供服务。



     Tracking extension:支持对瞬时数据(temporal data)的显示、分析、操作。



     schematics extension: 支持对图表数据的显示、分析、操作。



     Data interoperability extension:  该扩展能够消除各种数据格式间进行共享的壁垒,通过地理分析工具(geoprocessing tools)提供直接的数据访问、转换、输出功能。



  



4. 为什么要使用ArcEngine



      因为许多用户需要集中的,轻量级的应用或者嵌入程序去访问GIS数据。比如用户的需求可能远低于ArcView的功能但仍需要访问复杂的GIS逻辑,这种情况下,用户需要专注的、定制的GIS应用。ArcEngine就是为开发者提供这样一个低成本的、轻量级的选择。






5. 一些问题



     1.  arcEngine中的垃圾回收机制和任何其它的java应用一样,当对象失去引用时,就会被垃圾回收机制收回;也可以通过对象的release()函数强制释放资源。



     2.  在写ArcEngine程序中有一个重要的步骤就是初始化Java interop,否则runtime不能正常工作。有两种方法可以进行java interop的初始化。 



     对于控制台程序:EngineInitializer.initializeEngine()。在控制台程序中,ArcObjects具有很强的线程关联性,只能在创建它的线程中被调用。因而适合于控制台程序。



     对于界面程序:EngineInitializer.initializeVisualBeans()。 在这些程序中,ArcObjects没有线程关联性,可以在程序的任何线程中被调用。