AE/AO开发之调用tbx模型
目录
在我们作完空间分析后,经常会对空间分析的一些过程进行建模,在二次开发时,我们可以使用GP工具对模型进行调用,简化空间分析操作的过程。
gp工具调用模型的步骤与直接使用工具对象的步骤相似。
1、定义GP工具并加载模型
最好将模型放在项目目录下,使用相对路径加载模型。
IGeoProcessor GP = new GeoProcessorClass();
string toolPath = Application.StartupPath + "\\tools\\getRiver.tbx";
GP.AddToolbox(toolPath);
2、定义模型参数
使用VarArrayClass对象初始化,使用IVariantArray接口声明。参数使用Add函数添加。添加的顺序必须按照模型参数的排列顺序
IVariantArray array = new VarArrayClass();
array.Add(pRasLyr);
array.Add(value);
array.Add(outRaster);
array.Add(outVector);
3、执行并加载结果
使用GP.Execute(“模型”,array, null);执行,其中,第一个参数为模型名称,可以是中文,第二个参数为参数数组。
执行代码除了此处与用工具类调用GP工具略有不同,其余代码可以一样。
object sev = null;
try
{
result = (IGeoProcessorResult)GP.Execute("模型",array, null);
MessageBox.Show(GP.GetMessages(ref sev));
//将结果加载到显示
IRasterLayer resRasterLyr = new RasterLayerClass();
string path = (string)result.ReturnValue;
string pathr = path.Split(';')[0]; //此工具有Bug,去掉最后一个;
resRasterLyr.CreateFromFilePath(pathr);
string pathv = path.Split(';')[1];
IFeatureClass pFeatureClass = GP.Open(pathv) as IFeatureClass;
IFeatureLayer pFeaLyr = new FeatureLayerClass();
pFeaLyr.FeatureClass = pFeatureClass;
axMapControl1.AddLayer(resRasterLyr);
axMapControl1.AddLayer(pFeaLyr);
axMapControl1.ActiveView.Refresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
MessageBox.Show(GP.GetMessages(ref sev));
}
代码示例:
IGeoProcessorResult result = new GeoProcessorResultClass(); //执行结果
IGeoProcessor GP = new GeoProcessorClass();
string toolPath = Application.StartupPath + "\\tools\\getRiver.tbx";
GP.AddToolbox(toolPath);
IVariantArray array = new VarArrayClass();
array.Add(pRasLyr);
array.Add(value);
array.Add(outRaster);
array.Add(outVector);
object sev = null;
try
{
result = (IGeoProcessorResult)GP.Execute("模型",array, null);
MessageBox.Show(GP.GetMessages(ref sev));
//将结果加载到显示
IRasterLayer resRasterLyr = new RasterLayerClass();
string path = (string)result.ReturnValue;
string pathr = path.Split(';')[0]; //此工具有Bug,去掉最后一个;
resRasterLyr.CreateFromFilePath(pathr);
string pathv = path.Split(';')[1];
IFeatureClass pFeatureClass = GP.Open(pathv) as IFeatureClass;
IFeatureLayer pFeaLyr = new FeatureLayerClass();
pFeaLyr.FeatureClass = pFeatureClass;
axMapControl1.AddLayer(resRasterLyr);
axMapControl1.AddLayer(pFeaLyr);
axMapControl1.ActiveView.Refresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
MessageBox.Show(GP.GetMessages(ref sev));
}
转载自:https://blog.csdn.net/ScapeD/article/details/85873353