本人近期在学习VS+AE开发,涉及到GP工具,记录一下,以备不时之需。
1、在使用工具中添加的工具时,需要使用Geoprocessor进行统一调用,所以,首先需要在项目中加入引用ESRI.ArcGIS.Geoprocessor。
2、根据ArcMap中操作ArcToolBox的工具箱,在vs项目引用中添加动态库;
如当前我使用到的“要素转面”,对应的数据管理工具,则加载ESRI.ArcGIS.DataManagementTools;
3、代码实现
/// <summary>
/// 要素转面
/// </summary>
/// <param name="inPath">输入shp数据路径(line、polygon)</param>
/// <param name="outPath">输出shp数据路径(polygon)</param>
private bool FeatureToPolygonFun(string inPath, string outPath)
{
try
{
//调用GP工具
Geoprocessor toPolygonGP = new Geoprocessor();
//判断此文件是否存在,若存在,删除
if (File.Exists(outPath))
File.Delete(outPath);
//初始化FeatureToLine工具
FeatureToPolygon newFeatureToPolygon = new FeatureToPolygon();
newFeatureToPolygon.in_features = inPath;
newFeatureToPolygon.out_feature_class = outPath;
toPolygonGP.Execute(newFeatureToPolygon, null);
//判断此文件是否存在
if (!File.Exists(outPath))
return false;
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
4、说明
对于FeatureToPolygon工具,目前还没有搞清楚参数的具体要求;
另外,如果运行时出现错误:VS 对 COM 组件的调用返回了错误 HRESULT E_FAIL。
则需要查看许可是否添加正确,在网上看了许多资料,发现esriLicenseProductCodeAdvanced是普遍使用的。
使用方法是在program.cs中的Main函数中加入一下代码(主要是在运行程序之前):
IAoInitialize m_AoInitialize = new AoInitializeClass();
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);
if (licenseStatus == esriLicenseStatus.esriLicenseNotInitialized)
{
MessageBox.Show("没有esriLicenseProductCodeAdvanced许可!");
Application.Exit();
}