zoukankan      html  css  js  c++  java
  • 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安装目录的javalib下,例如我的是D:Program Files (x86)ArcGISDesktop10.0javalib

     


    1.1.3.   VM Arguments配置

    1.1.3.1.      开发环境Eclipse配置

    此配置在开发调试时有效

    打开window>preferences

     

    在输入arcgis desktop的bin路径:

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

    此路径每台机可能不同


    1.1.3.2.      运行环境Tomcat配置

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

    打开tomcatin的catalina.bat,在

    set "CURRENT_DIR=%cd%"

    的下方插入一行

     

    arcgis desktop的bin路径:

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

    此路径每台机可能不同


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

  • 相关阅读:
    SimpleXML读写XML文件以及json的读写
    XMLWriter和XMLReader读写XML文件
    保护眼睛——设置WIN7和XP 窗体、PDF、网页背景颜色(IE、Chrome、Firefox)
    DevExpress Winform通用控件开发总结
    SQL Server远程连接设置
    JSON-C库的使用(2)Json对象的遍历
    JSON-C库的使用(1)Json对象数组的解析
    SQL Server数据类型,System.Data.SqlDbType,.NET数据类型
    4.2 access函数实例
    4.1 对每个命令行参数打印文件类型
  • 原文地址:https://www.cnblogs.com/cannel/p/4200495.html
Copyright © 2011-2022 走看看