引用

Geoprocessing是ArcGIS提供的一个非常实用的工具,借由Geoprocessing工具可以方便的调用ArcToolBox中提供的各类工具,本文在ArcEngine9.2平台环境下总结了调用ArcToolBox工具的使用方法:

1、调用ArcToolBox工具方法

以ArcToolBox->Analysis Tools->Proximity->Buffer工具的调用为例,C#代码如下:

using ESRI.ArcGIS.AnalysisTools;         //添加引用
         using ESRI.ArcGIS.Geoprocessor;

Geoprocessor gp = new Geoprocessor();    //初始化Geoprocessor
         gp.OverwriteOutput = true;                     //允许运算结果覆盖现有文件

ESRI.ArcGIS.AnalysisTools.Buffer pBuffer = new ESRI.ArcGIS.AnalysisTools.Buffer(); //定义Buffer工具
         pBuffer.in_features = pVorLineLayer;    //输入对象,既可是IFeatureLayer对象,也可是完整文件路径如“D:\\data.shp”
         pBuffer.out_feature_class = pBuffer;     //输出对象,一般是包含输出文件名的完整文件路径,如“D:\\buffer.shp”

//设置缓冲区的大小,即可是带单位的具体数值,如0.1 Decimal Degrees;也可是输入图层中的某个字段,如“BufferLeng”
         pBuffer.buffer_distance_or_field = "BufferLeng";    
         pBuffer.dissolve_option = "ALL";     //支持融合缓冲区重叠交叉部分
         gp.Execute(pBuffer, null);                //执行缓冲区分析

ArcToolBox中各个工具调用时需添加的引用分别如下图所示:

参考网页:http://edndoc.esri.com/arcobjects/9.2/NET/c4ff8b68-0410-435f-b8e5-682d5cea47cf.htm

2、参数设置

在调用ArcToolBox执行具体的分析操作时,需要设置各类输入输出参数,简单概括起来说主要分为两类:对应于Environment Settings对话框的Geoprocessor对象设置、对应于具体操作窗口的方法设置。以ArcToolBox->Analysis Tools->Overlay->Intersect为例,C#代码如下:

Geoprocessor gp = new Geoprocessor();
            gp.OverwriteOutput = true;    //覆盖原有文件并重写

//Environment Settings对话框参数设置,具体名称参考操作界面Help中对应参数文档

object obj = gp.GetEnvironmentValue("Extent");  //设置Exten,大小写无关;

gp.SetEnvironmentValue("Extent", "MAXOF");     //或者"113.697050 115.074770 29.969986 31.362495"

obj = gp.GetEnvironmentValue("OutputZFlag");                    //设置Output has Z Values
            gp.SetEnvironmentValue("OutputZFlag", "DEFAULT");

obj = gp.GetEnvironmentValue("OutputMFlag");                    //设置Output has M Values
            gp.SetEnvironmentValue("OutputMFlag", "DEFAULT");

obj = gp.GetEnvironmentValue("OutputCoordinateSystem");  //设置Output Coordinate System
            gp.SetEnvironmentValue("OutputCoordinateSystem", Application.StartupPath + "\\zhouyang.prj");

obj = gp.GetEnvironmentValue("QualifiedFieldNames");         //设置Maintain fully qualifid field names
            gp.SetEnvironmentValue("QualifiedFieldNames", "QUALIFIED");

//关于Environment Settings的设置可以参考ArcMap操作界面提供的文档,如图所示:

Environment Settings设置

参数名称参考帮助,如上图所示为Extent,其取值有三种形式

//具体操作窗口的方法设置

Intersect pIntersect = new Intersect();
            //多个对象的输入:用分号隔开包含完整路径的文件名
            pIntersect.in_features = pInputFeature1 + ";" + pInputFeature2;

//多个对象的输入:使用IGpValueTableObject接口,该接口可以设置Rank(http://resources.esri.com/help/9.3/arcgisengine/dotnet/84349562-e062-44ee-8db0-9fcdcd64708b.htm

//object inputfeature1 = @"D:\周杨\贝贝\WuhanCity\ThiessenPolygons_Line_Buffer.shp";
            //object inputfeature2 = @"D:\周杨\贝贝\wuhanCity_shp\poi Point.shp";
            //IGpValueTableObject pObject = new GpValueTableObjectClass();
            //pObject.SetColumns(2);
            //pObject.AddRow(ref inputfeature1);
            //pObject.AddRow(ref inputfeature2);
            //pIntersect.in_features = pObject;
            pIntersect.out_feature_class = pOutputFeature;
            pIntersect.join_attributes = "All";
            pIntersect.output_type = "POINT";

gp.Execute(pIntersect, null);      //执行

//Intersect参数设置跟弹出的Intersect对话框对应,如图所示:

参考网页:http://edndoc.esri.com/arcobjects/9.2/NET/552ca115-f23b-4a74-a2c5-069c50d6cdcf.htm

3、运行结果对象提取

Geoprocessor对象通过Execute方法执行后将结果保存到指定输出路径下,通过也可以通过IGeoProcessorResult接口读取存储在内容中的结果对象,C#代码如下:

//执行图层求交运算
            IGeoProcessorResult pResult = (IGeoProcessorResult)gp.Execute(pIntersect, null);

IGPUtilities pGPUtil = new GPUtilitiesClass();
            IFeatureClass pFC;
            IQueryFilter pQF;
            pGPUtil.DecodeFeatureLayer(pResult.GetOutput(0),out pFC,out pQF);
            int count = pFC.FeatureCount(null);      //统计Feature对象个数
            IFeatureCursor pCursor = pFC.Insert(true);   //提取FeatureCursor对象
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();
            pFeatureLayer.FeatureClass = pFC;
            m_mapControl.Map.AddLayer(pFeatureLayer);   //加载图层对象

参考网页:http://edndoc.esri.com/arcobjects/9.2/NET/1b14f488-84de-4e7f-8009-cfe612f8dcbe.htm

其实总的说来,ESRI的官方帮助和各类在线帮助文档中都提供了相应的说明,可以很容易搞清楚一些内容,但是在具体的操作过程中,有时候经常得不到结果,这时候就需要关注下Environment Settings中的部分参数是否设置了,有可能没有像软件操作界面中那样进行默认设置。

AE调用GP工具(创建缓冲区和相交为例)的更多相关文章

  1. 利用C#与AE调用GP工具

    转自原文 利用C#与AE调用GP工具 第一,首先要明确自己需要调用arctoolbox里面的什么工具,实现什么样的功能. 第三,编写command或tool工具,编写自己要的功能工具. 1)首先创建一 ...

  2. AE调用GP工具的方法(转)

    第一,首先要明确自己需要调用arctoolbox里面的什么工具,实现什么样的功能. 第二,按照需求看看在arctoolbox工具中是怎么实现功能的,然后确定需要的数据源. 第三,编写command或t ...

  3. JAVA基于AE调用GP实现泰森多边形

    调用GP实现数据处理是较快捷.较易入手的方法. 使用JAVA语言基于AE调用GP实现泰森多边形的代码例如以下: public void CreatVoronoi(){ try { GeoProcess ...

  4. Silverlight调用GP工具实现缓冲分析

    目的: 在地图上点击一个点生成一个缓冲区. 1.制作GP工具: GP工具制作按照http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.h ...

  5. ArcGIS GP应用-GP模型创建-缓冲区分析

    一.参考资料 http://www.cnblogs.com/HPhone/archive/2012/11/05/2755974.html 二.关键步骤 1.缓冲分析数据源可以选择:点.面.线 2.构建 ...

  6. c# 调用ArcEngine的GP工具

    转自原文c# 调用ArcEngine的GP工具,AE调用GP工具 IAoInitialize m_AoInitialize = new AoInitializeClass(); esriLicense ...

  7. AE开发实现GP工具IDW

    IDW——空间插值 IDW(Inverse Distance Weighted)是一种常用而简便的空间插值方法,它以插值点与样本点间的距离为权重进行加权平均,离插值点越近的样本点赋予的权重越大. 设平 ...

  8. ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

    原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...

  9. ArcGIS Engine开发中利用GP工具时常出现的错误

    在用GP工具的时候常常会碰到这个错误: 调用 GP 对 COM 组件的调用返回了错误 HRESULT E_FAIL 解决方案: 这种情况一般有两种可能. 1.AE程序的license的级别不够. 2. ...

随机推荐

  1. Google Protocol Buffer入门

    简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...

  2. maven项目bulid失败_No compiler is provided in this environment.

    错误信息如下: [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather ...

  3. Qt 多线程使用moveToThread

    Qt有两种多线程的方法,其中一种是继承QThread的run函数,另外一种是把一个继承于QObject的类用moveToThread函数转移到一个Thread里. Qt4.8之前都是使用继承QThre ...

  4. win.10 禁止自动更新

             ·  Windows 10:“我已经更新完毕,请重启我吧主人!” ·  Windows 10:“好吧,主人在忙,我重启了先~” ·  Windows 10: “正在配置windows ...

  5. DataGrid控件的列

    四种列(局限性较大)https://www.cnblogs.com/lonelyxmas/p/9442604.html 更强大的模板列(如控件居中等)https://www.cnblogs.com/l ...

  6. java 项目 文件关系 扫描 注释注入(2)

    https://www.cnblogs.com/daimajun/p/7152970.html(copy) 先提一嘴 @RequestMapping(“url”),这里的 url写的是请求路径的一部分 ...

  7. Android UI编程之自定义控件初步——ImageButton

    我想我们在使用一些App的时候,应该不会出现一些“裸控件”的吧.除非是一些系统中的软件,那是为了保持风格的一致性,做出的一些权衡.我这里并非是在指责Android原生的控件不好看,说实在的,我很喜欢A ...

  8. 性能指标:TPS 并发数 响应时间 QPS

    响应时间(RT)reponse time指系统对请求作出响应的时间.一般关注平均响应时间和最大响应时间.对于单机没有并发操作的应用系统而言,普遍认为响应时间是一个合理且准确的性能指标,但响应时间并不能 ...

  9. From 7.22 To 7.28

    From 7.22 To 7.28 大纲 竞赛 我们好像要跟队爷考试... 考试的时候做题吧 学科 还是跟之前一样吧, 完型和阅读几乎没做过... 运动 踢足球!!!!!! 可惜bb他们去上海了... ...

  10. js中的事件委托技术

    1.什么是事件委托:通俗的讲,时间就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个时间本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ...