码迷,mamicode.com
首页 > 编程语言 > 详细

J2EE(java)后台调用ArcGIS Engine(AE)的部署和代码

时间:2015-02-10 22:57:17      阅读:467      评论:0      收藏:0      [点我收藏+]

标签:

arcgis的BS开发解决方案一直是个坑,主推的地图服务查询速度慢,需要异步,功能少。相对来说主要用于CS的AE功能更强大全面,只是部署有点复杂

 

本文软件环境:

win7 sp1 64位

MyEclipse 10,jdk 1.6.45 32位,tomcat 6.0.41 32位,ArcGIS Desktop 10.0(或ArcGIS Engine)

 


 

1.1.1.   安装软件

ArcGIS Desktop或ArcGIS Engine Runtime

建议装desktop,因为AE Runtime安装文件不容易找,另外desktop功能也强大些,本文也以Desktop为例

1.1.2.   arcobjects.jar

arcobjects.jar是ao的jar包,要把此文件放在我们代码的lib文件夹里

1.1.2.1.      arcobjects.jar的提取说明:

arcobjects.jar是ao的jar包,这个jar包在desktop和engine runtime都有提供(可是ao sdk没有)

在我们的系统中,用desktop提供的,这个jar包在desktop安装目录的java\lib下,例如我的是D:\Program Files (x86)\ArcGIS\Desktop10.0\java\lib

 技术分享

 


 

1.1.3.   VM Arguments配置

1.1.3.1.      开发环境Eclipse配置

此配置在开发调试时有效

 

打开window>preferences

 技术分享

在输入arcgis desktop的bin路径:

-Djava.library.path="D:\Program Files (x86)\ArcGIS\Desktop10.0\Bin"

此路径每台机可能不同


 

1.1.3.2.      运行环境Tomcat配置

此配置在双击运行startup.bat启动tomcat时有效

 

打开tomcat\bin的catalina.bat,在

set "CURRENT_DIR=%cd%"

的下方插入一行

 技术分享

arcgis desktop的bin路径:

-Djava.library.path="D:\Program Files (x86)\ArcGIS\Desktop10.0\Bin"

此路径每台机可能不同


 

hello world

以下是一段简单的代码,连接SDE并对图层查询,跟C#调AE没太大区别,这里关键的是类AoInitUtil

技术分享

以下是类AoInitUtil的initializeEngine函数

其中第11行的函数的两个参数是配置当前程序的环境,也就是说在团队里可以装不同的arcgis版本(但相信仅限于10.x)

 1     public AoInitialize initializeEngine(AoInitialize aoInit) {        
 2         try {
 3             EngineInitializer.initializeEngine();
 4 
 5             // 设置使用的arcgis产品和版本,使ao能运行在不同的arcgis环境下
 6             // 下面这行代码会报错,可是VersionManager又要在AoInitialize实例化前运行,而且这个错不影响代码运行,所以暂时不管
 7             VersionManager versionManager = new VersionManager();
 8             // 第一个参数是arcgis产品编号:1=desktop,2=engine,5=server
 9             // 此参数可以通过枚举查看esriProductCode
10             // versionManager.loadVersion(1, "10.0");
11             versionManager.loadVersion(Integer.parseInt(ConfigProperties
12                     .getByKey("aoRuntimeProduct")), ConfigProperties
13                     .getByKey("aoRuntimeVersion"));
14 
15             aoInit = new AoInitialize();
16             // 下面虽然有Engine和ArcInfo两种产品,但在本系统只有Engine才能用,ArcInfo会出错
17             if (aoInit
18                     .isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine) == esriLicenseStatus.esriLicenseAvailable)
19                 aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
20             else if (aoInit
21                     .isProductCodeAvailable(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeArcInfo) == com.esri.arcgis.system.esriLicenseStatus.esriLicenseAvailable)
22                 aoInit.initialize(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeArcInfo);
23 
24             return aoInit;
25         } catch (Exception e) {
26             e.printStackTrace();
27             return aoInit;
28         }
29     }

 

后话:

PS:无论是java还是.net版本AE,其jar或dll只是个中介,AE的核心AO是COM,出了问题可以往COM方面去想

PS2:不知道是java还是BS的原因,比我们C#+winform上用AE要不稳定很多

J2EE(java)后台调用ArcGIS Engine(AE)的部署和代码

标签:

原文地址:http://www.cnblogs.com/cannel/p/4200495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!