例子源文件:<ArcGIS>\DeveloperKit\samples\Applications\EngineViewer\Java\EngineViewer.jar
运行环境的搭建:
解压后,在Eclipse或Jbuilder里新建工程并添加类源码,然后添加arcgis java 类库引用,类库文件在<ArcGIS>\java 目录下,可以根据需要引用所需的,我是图方便把所有文件都引用到工程里了。最后在系统环境变量Path里追加<ArcGIS>\Bin,否则AO将不能完成初始化的工作,实质是调用Com组件。 完成以上,工程环境大致就搭建完成了。
本人的环境是:Windows server 2003 JDK1.5 ArcEngine9.0 eclipse3.2
这个例子功能比较简单,实现打开MxD文件,放大缩小漫游地图,点选查看属性等功能。
界面布局与ArcMap类似,左边显示TOC,中间显示主地图。
这里需要重点说的是,这个TOC和Map不是COM或者NET里的TOCControl和MapControl控件。他们都是通过Java基础的可视化组件编码实现的,实现的功能并没有COM或NET上的强大和高效,在例子的源码包里,你可以找到实现的细节。说白了,就是自己写了一个Toc和Map控件,虽然编码工作量增大了,但从另一个侧面来看,程序的灵活性加强了,你可以自己打造出个性化的地图控件来,当然这是要求有深厚的Java编程作为基础的。TOC的分组图层,符号显示等都需要自己实现,例子里没有实现,Map显示的实质是一张二进制流的图片文件(有了这个图片流,自己也可以实现一个简单的Web地图服务)。
代码摘要:
启动对象:EngineViewer.java
地图显示:MapInfo.java,MapComponent.java
TOC显示:TocControl.java TocTreeRenderer.java
此例子使用了arcengine底层java对象接口,界面表现使用将java awt来实现,我大致的列出几个主要的:
MapServer:负责数据加载和显示
IMapServerInfo:获得地图服务的相关信息
IMapImage:负责生成地图显示的图片流
ILayerDescriptions 和 ILayerDescription:获得图层的描述信息,图层名,类型等
IMap:这个接口不用多说,地图资源接口,可以进一步获得地图的图层对象等等。MapServer.getMap(arg0) 由此方法获得引用。
总结:
(1)arcengine没有可视化的java组件,编程面向较底层的arcengine java对象
(2)开发工作量较com或net的大,但程序灵活性高
(3)要求开发人员有较深的java windows编程基础
(4)arcengine java功能实质调用的是com组件实现,非100%java,至少在arcengine windows安装版本上是这样。
大约就这些,待续。欢迎留言讨论。有说得不对的地方请指正。