J2EE(java)后台调用ArcGIS Engine(AE)的部署和代码
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)
public AoInitialize initializeEngine(AoInitialize aoInit) {
try {
EngineInitializer.initializeEngine();
// 设置使用的arcgis产品和版本,使ao能运行在不同的arcgis环境下
// 下面这行代码会报错,可是VersionManager又要在AoInitialize实例化前运行,而且这个错不影响代码运行,所以暂时不管
VersionManager versionManager = new VersionManager();
// 第一个参数是arcgis产品编号:1=desktop,2=engine,5=server
// 此参数可以通过枚举查看esriProductCode
// versionManager.loadVersion(1, "10.0");
versionManager.loadVersion(Integer.parseInt(ConfigProperties
.getByKey("aoRuntimeProduct")), ConfigProperties
.getByKey("aoRuntimeVersion"));
aoInit = new AoInitialize();
// 下面虽然有Engine和ArcInfo两种产品,但在本系统只有Engine才能用,ArcInfo会出错
if (aoInit
.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine) == esriLicenseStatus.esriLicenseAvailable)
aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
else if (aoInit
.isProductCodeAvailable(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeArcInfo) == com.esri.arcgis.system.esriLicenseStatus.esriLicenseAvailable)
aoInit.initialize(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeArcInfo);
return aoInit;
} catch (Exception e) {
e.printStackTrace();
return aoInit;
}
}
后话:
PS:无论是java还是.net版本AE,其jar或dll只是个中介,AE的核心AO是COM,出了问题可以往COM方面去想
PS2:不知道是java还是BS的原因,比我们C#+winform上用AE要不稳定很多
J2EE(java)后台调用ArcGIS Engine(AE)的部署和代码的更多相关文章
- Java后台调用gcc编译C语言代码
想做一个能够在线编译代码运行的平台,Java和SQL已经支持了,因为是用Java写的后台,所以Java和SQL挺容易就实现了,做到支持C的时候就卡住了,网上搜了一下这种帖子好像很少. 我采取的办法是就 ...
- java后台调用HttpURLConnection类模拟浏览器请求(一般用于接口调用)
项目开发中难免遇到外部接口的调用,小生今天初次接触该类,跟着API方法走了一遍,如有不对的地方,还请哆哆指正,拜谢! 1 package com.cplatform.movie.back.test; ...
- md5签名加密(用于java 后台调用短信平台接口实现发短信)
MD5Util 方法 package com.funcanteen.business.action.pay.util; import java.security.MessageDigest; publ ...
- java后台调用url无协议
url格式不正确,可能有"www.baidu.com" "这个不能有 // 下载pdf public void downpdf(String URL, String ...
- 解决ArcGIS Engine AE 读取shapefile中文属性乱码的一条偏方
最近写一个程序,AE+C#,读shp字段属性,其中读到中文就乱码了 这个问题比较奇怪,用AE很多年了,怎么突然就乱码呢,用Arcmap打开,没乱码,证明不是数据问题 网上搜搜,很多人说是许可初始化的问 ...
- java后台调用url
版权声明:本文为博主牟云飞原创文章,未经博主同意不得转载. https://blog.csdn.net/myfmyfmyfmyf/article/details/32690757 QXOutStrea ...
- java后台调用http请求
1:代码 @Value("${sms.username}") 可以将sms.properties配置文件中的值注入到username //这种方式是将sms.properti ...
- java后台调用文件上传接口
借鉴:https://blog.csdn.net/yjclsx/article/details/70675057 /** * 调用流程上传文件接口上传文件 * @param url * @param ...
- C#调用ArcGIS REST服务
ArcGIS REST API提供了简单.开放的接口来访问和使用ArcGIS Server发布的服务.使用ArcGIS REST API通过URL可以获取和操作每一个服务中的所有资源和操作. 1.使用 ...
随机推荐
- Apache加载PHP.ini顺序
网上找到一份关于Apache加载PHP.ini顺序的文档: (1) apache的httpd.conf中的PhpIniDir: (2) 注册表键值:HKEY_LOCAL_MACHINE->SOF ...
- hdu 3478(判断奇环)
题意:给你一个无向图,问你有没有可能存在一个奇环连接所有的节点. 分析:好久没写博客了,这个好习惯还是要继续保持的!这道题通过转化之后就是问你有没有存在一个奇环连接所有的节点,这里用到的方法是染色法, ...
- [Everyday Mathematics]20150227
(Marden's Theorem) 设 $p(z)$ 是三次复系数多项式, 其三个根 $z_1,z_2,z_3$ 不共线; 再设 $T$ 是以 $z_1,z_2,z_3$ 为顶点的三角形. 则存在唯 ...
- Delphi 关闭MDI子窗口
需要在子窗口的onClose事件中吧Action = caFree; 就可以了. procedure Tfrm_aa.FormClose(Sender: TObject; var Action: TC ...
- 用physdiskwrite在VMware虚拟机上安装m0n0wall【转】
在一台PC机上安装m0n0wall,相信大家都有经验.一般采用两种方法:1.在一台Windows XP或Windows 2000的PC上,下载physdiskwrite软件和m0n0wall映像文件( ...
- bjfu1299 stl使用
题目超简单,我写解题报告是因为我的代码用了些STL,使代码很简洁. * * Author : ben */ #include <cstdio> #include <cstdlib&g ...
- jqueryMobile
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- js数组依据下标删除元素
最近在项目中遇到了一些问题,基础性的东西记得不牢固,就总结一下放在这里备再次查找,对操作js数组的一些问题一些常用的记录! 1.创建数组 var array = new Array(); var ar ...
- font-size的探究
整理网上的资料 font字体,用px,em,100%,rem?分什么情况考虑? 我们逐渐意识到,我们用px作为文字大小的单位,已经出现很多问题.最主要是体现在用户不能灵活的控制文字的大小. 对于大多数 ...
- python测试api接口
在开发中,需要测试web-api的接口 spring mvc 使用单元测试非常方便,但是,受不了单元测试的启动速度.用python写了一个小脚本,用于测试接口, 测试脚本配置文件 api.yaml s ...