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

  • 相关阅读:
    Minimum Depth of Binary Tree leetcode java
    Maximum Depth of Binary Tree leetcode java
    Symmetric Tree leetcode java
    Same Tree leetcode java
    Binary Tree Postorder Traversal leetcode java
    Binary Tree Preorder Traversal leetcode java
    Binary Tree Inorder Traversal leetcode java
    Combinations leetcode java
    一键清除Centos iptables 防火墙所有规则
    阿里云centos7.7x64安装open,并配置ip转发和nat伪装
  • 原文地址:https://www.cnblogs.com/cannel/p/4200495.html
Copyright © 2011-2022 走看看