ArcEngine for Java开发环境搭建读取GDB数据
本文的出发点为读取GDB数据,到Oracle SDE数据库中,这其中最开始的便是读取GDB数据。由于之前的博客中介绍了GDB数据为ArcGIS平台推出的空间数据存储文件结构,所以在这个其中我先想到的是ArcGIS平台1. 环境描述IDE:使用IDEAArcGIS10.2.22. 细节描述关于arcengine初始化 java.lang.UnsatisfiedLinkError:no ntvinv
·
本文的出发点为读取GDB数据,到Oracle SDE数据库中,这其中最开始的便是读取GDB数据。由于之前的博客中介绍了GDB数据为ArcGIS平台推出的空间数据存储文件结构,所以在这个其中我先想到的是ArcGIS平台
1. 环境描述
- IDE:使用IDEA
- ArcGIS10.2.2
2. 细节描述
-
关于arcengine初始化 java.lang.UnsatisfiedLinkError:no ntvinv in java.library.path错误的几种解决方法
https://blog.csdn.net/qq_45697944/article/details/108447500 -
如何查看Java版本信息
http://www.xitongzhijia.net/soft/195530.html -
ArcEngine完整Demo https://download.csdn.net/download/laohoubin/5571501,没有积分需要可以私聊(毕竟资源为别人的)
3. 代码细节
import com.esri.arcgis.geodatabaseui.VersionManager;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.esri.arcgis.system.esriLicenseStatus;
import java.io.IOException;
/**
* @Classname AoInitUtil
* @Description AO许可类
* @Date 2021/4/19 13:53
* @Created by xiaocai
*/
public class AoInitUtil {
/**
* 初始化ae
* 初始化ae或许可失败,会报错或者返回null
* @param aoInit
* @return
*/
public AoInitialize initializeEngine(AoInitialize aoInit) throws IOException {
//初始化ae
EngineInitializer.initializeVisualBeans();
// 设置使用的arcgis产品和版本,使ao能运行在不同的arcgis环境下
VersionManager versionManager = new VersionManager();
aoInit = new AoInitialize();
//判断并使用哪个级别的许可,PS:目前应该只能用desktop相关的许可,也就是Advanced,Standard,Basic等
if (aoInit.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeAdvanced) == esriLicenseStatus.esriLicenseAvailable) {
aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);
} else if (aoInit.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeStandard) == esriLicenseStatus.esriLicenseAvailable) {
aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeStandard);
} else if (aoInit.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeBasic) == esriLicenseStatus.esriLicenseAvailable) {
aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeBasic);
} else if (aoInit.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB) == esriLicenseStatus.esriLicenseAvailable) {
aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
} else if (aoInit.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeArcServer) == esriLicenseStatus.esriLicenseAvailable) {
aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeArcServer);
} else {
aoInit = null;
}
return aoInit;
}
}
import com.esri.arcgis.datasourcesGDB.FileGDBWorkspaceFactory;
import com.esri.arcgis.geodatabase.*;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.esriLicenseProductCode;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
/**
* @Classname readGDBData
* @Description 读取GDB数据
* @Date 2021/4/13 16:22
* @Created by xiaocai
*/
public class readGDBData {
public static void main(String[] args) throws Exception {
getLayerNameFromGDB("C:\\Users\\xiaocai\\Desktop\\XYBASE.gdb");
}
/**
* 从GDB文件中获取图层的名称(标准名,如SZTCBJX)和图层别名(如:深圳图层边界线)
*
* @param gdbPath
* @return
*/
public static void getLayerNameFromGDB(String gdbPath) throws IOException {
//ae许可初始化
AoInitialize aoInit = null;
//初始化arcengine
AoInitUtil pAoInitUtil=new AoInitUtil();
pAoInitUtil.initializeEngine(aoInit);
IFeatureClass pFeatureClass = null;
//创建 GDB 工作空间对象
FileGDBWorkspaceFactory pFileGDBWorkspaceFactoryClass = new FileGDBWorkspaceFactory();
IWorkspace iWorkspace = pFileGDBWorkspaceFactoryClass.openFromFile(gdbPath, 0);
IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace) pFileGDBWorkspaceFactoryClass.openFromFile(gdbPath, 0);
//创建图层名集合
IEnumDatasetName datasetNames = iWorkspace.getDatasetNames(esriDatasetType.esriDTAny);
IDatasetName datasetName = null;
while ((datasetName = datasetNames.next()) != null) {
//获取layerName(别名)
String layerName = datasetName.getName();
if(datasetName instanceof IFeatureClass)
{
//获取layerCode(标准名)
pFeatureClass = pFeatureWorkspace.openFeatureClass(layerName);
String layerCode = pFeatureClass.getAliasName();
System.out.println(String.format("%s%s",layerName,layerCode));
}
else if (datasetName.getSubsetNames() != null)
{
IEnumDatasetName pSubEDataset = datasetName.getSubsetNames();
IDatasetName pSubDataset = pSubEDataset.next();
System.out.println(String.format("%s",layerName));
while (pSubDataset != null)
{
if (pSubDataset instanceof IFeatureClassName)
{
//获取layerName(别名)
layerName = pSubDataset.getName();
//获取layerCode(标准名)
pFeatureClass = pFeatureWorkspace.openFeatureClass(layerName);
String layerCode = pFeatureClass.getAliasName();
System.out.println(String.format("%s%s",layerName,layerCode));
}
pSubDataset = pSubEDataset.next();
}
}
else
{
System.out.println(String.format("%s",layerName));
}
}
return;
}
}
4. 输出信息

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)