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

You may also like...