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

最新文章

  1. iOS之UIScrollView循环滚动
  2. Linode VPS上部署vpn成功
  3. Docker SSH+NGHINX+MYSQL
  4. ARC-数据类型需要释放的情况
  5. 菜鸟的MySQL学习笔记(二)
  6. winmd文件和dll文件的区别
  7. iOS TableView的分割线
  8. fis3+vue+pdf.js制作预览PDF文件或其他
  9. python+selenium自动化软件测试(第15章):基础实战(2)
  10. webpack教程(六)——分离组件代码
  11. servlet之小demo(四)
  12. su: Authentication failure问题
  13. ssm数据库异常问题
  14. Java18-java语法基础——集合框架
  15. tmux使用总结
  16. Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程
  17. C#读取AD域用户信息
  18. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间
  19. Python3基础 os.path.splitext 处理文件名,得到文件名+扩展名
  20. Redis之Set 集合

热门文章

  1. Nginx实现多个站点使用一个端口(配置Nginx的虚拟主机)
  2. 抛弃EF,20分构建一个属于自己的ORM框架
  3. jvm调优之四:生产环境参数实例及分析【生产环境实例增加中】
  4. Code Hard or Go Home
  5. js获取浏览器高度和宽度值,尽量的考虑了多浏览器。
  6. 容器的范围 .xml
  7. gcc 安装
  8. Ubuntu上用快捷键关闭没有响应的程序
  9. MySQL Order By Rand()效率
  10. 45个有新意的Photoshop教程和技巧