您的位置:首页 > 大数据 > 人工智能

ArcGIS调用DataInteroperabilityTools导出数据

2016-03-16 19:59 549 查看


ArcGIS Engine调用DataInteroperabilityTools导出数据

  最近需要开发一个功能,在ArcGIS Engine中导出MapInfo的TAB数据以及Google的KML数据。
  我先是考虑将ArcGIS图层中的数据提取出来,然后根据TAB和KML的格式分别生成数据。后来考虑到这种方法做起来十分复杂,而ArcGIS的扩展模块中有数据导入以及数据导出的工具,能够导出多种格式的数据。因而打算利用DataInteroperabilityTools工具来进行导出数据。
首先,我在ArcMap的ArcToolBox中找到了DataInteroperabilityTools,一点击,发现该功能不可用。原来我安装ArcGIS DeskTop的时候没有安装DataInterop模块,安装改模块之后,DataInteroperabilityTools下的QuickExport和QuickImport都可以用了。


  经过测试,发现在ArcMap中可以导出TAB和KML数据。
但是我在ArcGIS Engine中测试的时候,却出现了问题。以下代码在运行时,不报任何错,且利用try catch也无法获取到异常。

         Geoprocessor geoprocessor = new Geoprocessor();
geoprocessor.OverwriteOutput = true;
QuickExport quickExport = new QuickExport();
quickExport.Input = "E:/TestData/point.shp";

quickExport.Output = "tab,c:/data/buffered.tab";
IGeoProcessorResult results = (IGeoProcessorResult)geoprocessor.Execute(quickExport, null);
if (results != null && results.Status == esriJobStatus.esriJobSucceeded)
{
MessageBox.Show("执行成功!");
}


  通过邮件咨询ArcGIS技术支持之后,我发现了我的代码存在两个问题:
1、没有检出esriLicenseExtensionCodeDataInteroperability的许可;
2、导出的output参数不正确。可以根据ArcMap中导出之后的Result来设置output。
  于是我在加载ArcGIS许可的时候,添加了检出DataInteroperability的代码:

if (RuntimeManager.Bind(ProductCode.EngineOrDesktop))
{
IAoInitialize m_AoInitialize = new AoInitializeClass();
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
licenseStatus = m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeDataInteroperability);
}


  并且修改了output参数:
export.Output = "MITAB,C:\\Users\\Desktop,\"RUNTIME_MACROS,\"\"BUILD_OPTIMAL_SPATIAL_INDEX,no,ENCODING,\"\",META_MACROS,\"\"DestBUILD_OPTIMAL_SPATIAL_INDEX,no,DestENCODING,\"\",METAFILE,MITAB,COORDSYS,,__FME_DATASET_IS_SOURCE__,false\"";
即可成功导出TAB和KML文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: