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文件。