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.使用 ...
 
随机推荐
- std::sort引发的core
			
#include <stdio.h> #include <vector> #include <algorithm> #include <new> str ...
 - SPF详解
			
什么是SPF? 这里的SPF不是防晒指数,而是指Sender Policy Framework.翻译过来就是发信者策略架构,比较拗口,通常都直接称为SPF. SPF是跟DNS相关的一项技术,它的内容写 ...
 - HDU5808Price List Strike Back (BestCoder Round #86 E) cdq分治+背包
			
严格按题解写,看能不能形成sum,只需要分割当前sum怎么由两边组成就好 #include <cstdio> #include <cstring> #include <c ...
 - Drupal处理缓存的方式
			
Drupal的后台数据库中有很多以cache开头的表,这些都是Drupal的缓存数据表. Drupal的缓存机制使用了接口方式,所有的缓存对象都必须实现DrupalCacheInterface接口: ...
 - loadrunner之C语言编程
			
一.常量定义 #define COUNT 100 //定义全局常量#define SALARY 4000 Action(){ int total; total = C ...
 - android命名规范
			
Android 开发规范 (陈杨) (一)注意事项 1. 编码方式统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了. 2. 缩进统一为4个空格,将Tab si ...
 - jquery元素定位方法
			
用chrome浏览器打开页面,按f12调出开发者调试模式,查看elements,部分代码如下图所示,注意红框部分 假设我们要查找某些元素的位置,用鼠标移到那部分元素,调试器会自动用蓝颜色标示选中部分的 ...
 - 2015-11-02-js
			
1.对象 创建方式有两种,一时通过new 后加object构造函数,二是用字面量法, var box=new object(); var box={ name='bokeyuan'; }; 访问对象: ...
 - Eclipse使用技巧总结
			
Eclipse设置工作空间的字符编码: 打开eclipse开发界面,依次点击Window->Preferences->General->Workspace 修改Text file e ...
 - algorithm@ Sieve of Eratosthenes (素数筛选算法) & Related Problem (Return two prime numbers )
			
Sieve of Eratosthenes (素数筛选算法) Given a number n, print all primes smaller than or equal to n. It is ...