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)

 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要不稳定很多

时间: 2024-10-23 21:58:38

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

java后台调用url

QXOutStream outPut= new QXOutStream(); qxWorkSheetXML.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); qxWorkSheetXML.append("<ROOT><ROW>"); qxWorkSheetXML.append("<REPORT_MAN>"

java后台调用自定义arctoolbox(开发的程序放到tomcat容器运行)

写在前面: 前一段时间测试了普通 java 工程调用 ArcObject 10.5(下文简称AO)的功能,主要想在程序调用自定义arctoolbox模型,完成一些功能,在将该功能转换成web工程时,出现一些问题,现将解决方式记录下来,以备将来查阅. 1.开发环境: ArcGIS 10.5,myeclipse 2014, jdk 1.8 32位,tomcat 8.5 32位,spring.spring mvc 4.3等 环境安装与配置,在些不在赘述. 有关 AO 开发的知识,也不在赘述. 2.问题

java后台调用HttpURLConnection类模拟浏览器请求(一般用于接口调用)

项目开发中难免遇到外部接口的调用,小生今天初次接触该类,跟着API方法走了一遍,如有不对的地方,还请哆哆指正,拜谢! 1 package com.cplatform.movie.back.test; 2 3 import java.io.BufferedReader; 4 import java.io.DataOutputStream; 5 import java.io.InputStreamReader; 6 import java.net.HttpURLConnection; 7 impor

java后台 调用接口post参数实例

public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.set

HTML5+js页面传值给Java后台的小技巧

页面传值小技巧 平常我们在做的web项目,一般一个HTML页面上会有好几个步骤,step_num①,step_num②,step_num③,一般先显示step_num①,根据跳转条件显示step_num②,step_num①隐藏,再跳转step_num③,step_num①,step_num②隐藏,step_num③显示. 思路: (js设置全局变量,哪里需要在哪里添加一个input标签,把值赋给一个input,然后再让input隐藏). 先说下我做的页面的结构,进入xxx.html页面,通过j

ArcGIS Engine 编辑- ITask

转自原文ArcGIS Engine 编辑- ITask 下面的代码是我们定制的一个工作流-给等高线赋值 namespace EngineApplication { [Guid("5b0c0692-eaf7-4d64-9cee-c8c1afaf06f4")] [ClassInterface(ClassInterfaceType.None)] [ProgId("EditeTest.ContourTask")] public class CalculateContour

arcgis engine 调用arcgis server服务

首先需要添加两个引用: using ESRI.ArcGIS.GISClient;using ESRI.ArcGIS.DataSourcesRaster; /// <summary> /// arcgis engine 调用arcgis server服务 /// </summary> /// <param name="sender"></param> /// <param name="e"></para

[转载]ArcGIS Engine 中的多线程使用

ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/   一直都想写写AE中多线程的使用,但一直苦于没有时间,终于在中秋假期闲了下来.呵呵,闲话不说了,进入正题! 大家都了解到ArcGIS中处理大数据量时速度是相当的慢,这时如果你的程序是单线程的,那可就让人着急坏了,不知道处理到什么地步,不能操作其他的功能,无奈~~如果在这时你能够想到用多线程技术,那就来试试该如何

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

原文:利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer 注:ArcGIS样