https://www.cnblogs.com/2008nmj/p/13853911.html
该gptool可以直接调用gp函数实现。
一种是使用Geoprocessing类,工具参数使用IVariantArray方式输入;另一种是使用Geoprocessor托管类,创建工具对象,参数作为该工具对象的属性输入。下面就看下这两种调用方式的具体实现。
一、使用GeoProcessing类
主要分为以下几步:
1.添加ESRI.ArcGIS.Geoprocessing引用,仅需要引用该类库
2.创建geoprocessor对象,注意这里的P为大写
3.如果调用自定义工具,需要添加自定义工具箱的路径
4.创建IVariantArray对象,用于存放工具参数
5.调用geoprocessor的Execute方法
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.Geoprocessing; using ESRI.ArcGIS.esriSystem; namespace gp_winform { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { IGeoProcessor2 gp = new GeoProcessorClass(); //设置gp.OverwriteOutput是指可以用一个输出执行多次工具 gp.OverwriteOutput = true; IGeoProcessorResult result = new GeoProcessorResultClass(); //Create a variant array to hold the parameter values. IVariantArray parameters = new VarArrayClass(); object sev = null; try { //Populate the variant array with parameter values. parameters.Add(FileGDBPath + "检查井"); parameters.Add(FileGDBPath + "检查井_buffer"); parameters.Add("100 Feet"); //Execute the tool result = gp.Execute("Buffer_analysis", parameters, null); //Print geoprocessing messages. Console.WriteLine(gp.GetMessages(ref sev)); } catch (Exception ex) { //Print a generic exception message Console.WriteLine(ex.Message); //Print geoprocessing execution error messages Console.WriteLine(gp.GetMessages(ref sev)); } } public string FileGDBPath { get { return FileGDBPath;} set { FileGDBPath = @"C:\Users\Administrator\Desktop\beijingLightWeight.gdb"; } } } }
二、使用GeoProcessor托管类
主要分为以下几步:
1. 添加ESRI.ArcGIS.Geoprocessor引用,如果想要获取执行结果result或者list datasets还需要引用ESRI.ArcGIS.Geoprocessing。
2. 除此之外,需要添加该工具所在工具箱的引用。比如使用Buffer工具,则需要添加ESRI.ArcGIS.AnalysisTools引用,使用IDW工具,则需要添加ESRI.ArcGIS.SpatialAnalystTools引用,以此类推。
3. 创建geoprocessor对象。
4. 如果调用自定义工具,需要添加自定义工具箱的路径。
5. 创建工具对象(tool process object)并且设置参数
6. 调用geoprocessor的Execute方法。
代码:
//使用GeoProcessor托管类 略 略 略 略 略 略 略 略 略 略 略 略 略略
三、扩展:Create Feature Class
》》Create Feature Class
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.Geoprocessing; using ESRI.ArcGIS.esriSystem; //using DinglerTools; namespace gp_winform { public partial class Form1 : Form { public Form1() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); InitializeComponent(); } private void button1_Click(object sender, EventArgs e)//Create Feature Class,两种方法,第一种调用GP工具就行了,第二种自行实现 { string FileGDBPath = "C:\\Users\\Administrator\\Desktop\\beijingLightWeight.gdb\\"; string filename = "well1"; IGeoProcessor2 gp = new GeoProcessorClass(); //设置gp.OverwriteOutput是指可以用一个输出执行多次工具 //gp.AddToolbox(@"C:\Users\Administrator\Downloads\DinglerToolbox\DinglerTools.tbx"); gp.OverwriteOutput = true; IGeoProcessorResult result = new GeoProcessorResultClass(); //Create a variant array to hold the parameter values. IVariantArray parameters = new VarArrayClass(); object sev = null; try { parameters.Add(FileGDBPath);//+ filename parameters.Add(filename); parameters.Add("POINT"); parameters.Add(FileGDBPath+"检查井"); //parameters.Add("100 Feet"); //Execute the tool result = gp.Execute("CreateFeatureclass_management", parameters, null); //Print geoprocessing messages. Console.WriteLine(gp.GetMessages(ref sev)); MessageBox.Show("Well Done!\n"+gp.GetMessages(ref sev)); } catch (Exception ex) { //Print a generic exception message Console.WriteLine(ex.Message); MessageBox.Show(ex.Message); //Print geoprocessing execution error messages Console.WriteLine(gp.GetMessages(ref sev)); MessageBox.Show(gp.GetMessages(ref sev)); } } private void Form1_Load(object sender, EventArgs e) { //ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine); } } }
>>特别注意:.net framework要选择2.0。。。然后选择arcgis desktop空项目即可。在前文https://www.cnblogs.com/2008nmj/p/13993479.html中所述的不适用于此功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)