使用ESRI.ArcGIS.AnalysisTools中的工具(例如:泰森多边形的建立等),使用以下代码:
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
ESRI.ArcGIS.AnalysisTools.CreateThiessenPolygons CTP = new CreateThiessenPolygons(@"D:\AEtestyao\Data\school.shp",
"D:\AEtestyao\Data\CTP.shp");
CTP.fields_to_copy = "ONLY_FID";
gp.Execute(CTP, null);
开始一直得不到结果,然后上网查了很久后终于解决了。一般都会是由于工具未注册导致(the tool is not licensed)。
解决方案为:在主窗体的初始化函数中加入代码,如下:
public Mainform()
{
#region 初始化许可
IAoInitialize m_AoInitialize = new AoInitializeClass();
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
//默认第一个为有效地,之后无效,此级别最高,可用绝大多数功能
//licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);级别最低
#endregion
InitializeComponent();
}
关键代码一定要放正确,放到InitializeComponent()后会无效。
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
ESRI.ArcGIS.AnalysisTools.CreateThiessenPolygons CTP = new CreateThiessenPolygons(@"D:\AEtestyao\Data\school.shp",
"D:\AEtestyao\Data\CTP.shp");
CTP.fields_to_copy = "ONLY_FID";
gp.Execute(CTP, null);
开始一直得不到结果,然后上网查了很久后终于解决了。一般都会是由于工具未注册导致(the tool is not licensed)。
解决方案为:在主窗体的初始化函数中加入代码,如下:
public Mainform()
{
#region 初始化许可
IAoInitialize m_AoInitialize = new AoInitializeClass();
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
//默认第一个为有效地,之后无效,此级别最高,可用绝大多数功能
//licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);级别最低
#endregion
InitializeComponent();
}
关键代码一定要放正确,放到InitializeComponent()后会无效。
原因说明下:系统搭建时,axLicenseControl默认使用的是esriLicenseProductCodeEngine,这个的级别是最低的,导致ESRI.ArcGIS.AnalysisTools中的很多功能无法使用,所以要重新设置。注意:在axLicenseControl上进行右键查属性设置无法使设置生效,故只能加代码。
//添加命名空间
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geoprocessor;
//实现button click方法
private void button1_Click(object sender, EventArgs e)
{
//构造Geoprocessor
Geoprocessor gp = new Geoprocessor();
//设置参数
ESRI.ArcGIS.AnalysisTools.Intersect intersect = new ESRI.ArcGIS.AnalysisTools.Intersect();
intersect.in_features = @"F:\foshan\Data\wuqutu_b.shp;F:\foshan\Data\world30.shp";
intersect.out_feature_class = @"E:\intersect.shp";
intersect.join_attributes = "ONLY_FID";
//执行Intersect工具
RunTool(gp, intersect, null);
}
private void RunTool(Geoprocessor geoprocessor, IGPProcess process, ITrackCancel TC)
{
// Set the overwrite output option to true
geoprocessor.OverwriteOutput = true;
try
{
geoprocessor.Execute(process, null);
ReturnMessages(geoprocessor);
}
catch (Exception err)
{
Console.WriteLine(err.Message);
ReturnMessages(geoprocessor);
}
}
// Function for returning the tool messages.
private void ReturnMessages(Geoprocessor gp)
{
string ms = "";
if (gp.MessageCount > 0)
{
for (int Count = 0; Count <= gp.MessageCount - 1; Count++)
{
ms += gp.GetMessage(Count);
}
}
//1-定义GeoProcessor对象
Geoprocessor gp = new Geoprocessor();
object sev = null;
//2-设置参数
gp.OverwriteOutput = true;
//3-设置工具箱所在的路径
gp.AddToolbox(@"F:\lib_test\AirportsAndGolf.tbx");
//4-设置输入参数
IVariantArray parameters = new VarArrayClass();
parameters.Add(@"F:\lib_test\地下水重金属数据.xls\Sheet1$");
parameters.Add("`YEAR` = 2009");
parameters.Add("W20111");
parameters.Add(@"F:\lib_test\temp.gdb\tempwww");
//5-执行工具
gp.Execute("ModelAnalysis", parameters, null);
ESRI官方帮助示例:
using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.AnalysisTools;
public void SampleBufferTool()
{
// Initialize the geoprocessor.
Geoprocessor GP = new Geoprocessor();
ESRI.ArcGIS.AnalysisTools.Buffer bufferTool = new
ESRI.ArcGIS.AnalysisTools.Buffer();
bufferTool.in_features = @"D:\St_Johns\data.mdb\roads_Buffer";
bufferTool.out_feature_class = @"D:\St_Johns\data.mdb\roads";
bufferTool.buffer_distance_or_field = "distance";
GP.Execute(bufferTool, null);
}
using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.esriSystem;
public void SampleCalculateBestPathTool()
{
// Initialize the geoprocessor.
Geoprocessor GP = new Geoprocessor();
// Add the BestPath toolbox.
GP.AddToolbox(@"C:\SanDiego\BestPath.tbx");
// Generate the array of parameters.
IVariantArray parameters = new VarArrayClass();
parameters.Add(@"C:\SanDiego\source.shp");
parameters.Add(@"C:\SanDiego\destination.shp");
parameters.Add(@"C:\SanDiego\bestpath.shp");
// Execute the model tool by name.
GP.Execute("CalculateBestPath", parameters, null);