在初始化之前首先需要引入arcobjects.jar 这个jar,这个jar是ArcGIS Engine for JAVA 二次开发的主要sdk,具体详情看ESRI官网介绍
maven 仓库地址:https://mvnrepository.com/artifact/com.esri.arcgis/arcobjects
在配置文件中要添加支持多版本的工作方式:
#arcgis aoRuntimeProduct=1 //第一个参数是arcgis产品编号:1=desktop,2=engine,5=server aoRuntimeVersion=10.2
初始化AO代码块:
/**
* 初始化ao
*
* @param aoInit
* @return
*/
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(ConstansURL
.getApplicationPropertyByKey("aoRuntimeProduct")), ConstansURL
.getApplicationPropertyByKey("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(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
}
return aoInit;
} catch (Exception e) {
logger.error(e.getMessage(), e);
return aoInit;
}
}
当然上面的初始化方法还有有改进的地方的,因为上面场景只适用于单线程中,且刚好满足使用单例设计模式的需求。
如果后期并发量比较高的时候考虑使用锁方式进行单例加锁,不过会使得用户体验变得非常不好。