AE调用GP工具(创建缓冲区和相交为例)
引用
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工具(创建缓冲区和相交为例)的更多相关文章
- 利用C#与AE调用GP工具
转自原文 利用C#与AE调用GP工具 第一,首先要明确自己需要调用arctoolbox里面的什么工具,实现什么样的功能. 第三,编写command或tool工具,编写自己要的功能工具. 1)首先创建一 ...
- AE调用GP工具的方法(转)
第一,首先要明确自己需要调用arctoolbox里面的什么工具,实现什么样的功能. 第二,按照需求看看在arctoolbox工具中是怎么实现功能的,然后确定需要的数据源. 第三,编写command或t ...
- JAVA基于AE调用GP实现泰森多边形
调用GP实现数据处理是较快捷.较易入手的方法. 使用JAVA语言基于AE调用GP实现泰森多边形的代码例如以下: public void CreatVoronoi(){ try { GeoProcess ...
- Silverlight调用GP工具实现缓冲分析
目的: 在地图上点击一个点生成一个缓冲区. 1.制作GP工具: GP工具制作按照http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.h ...
- ArcGIS GP应用-GP模型创建-缓冲区分析
一.参考资料 http://www.cnblogs.com/HPhone/archive/2012/11/05/2755974.html 二.关键步骤 1.缓冲分析数据源可以选择:点.面.线 2.构建 ...
- c# 调用ArcEngine的GP工具
转自原文c# 调用ArcEngine的GP工具,AE调用GP工具 IAoInitialize m_AoInitialize = new AoInitializeClass(); esriLicense ...
- AE开发实现GP工具IDW
IDW——空间插值 IDW(Inverse Distance Weighted)是一种常用而简便的空间插值方法,它以插值点与样本点间的距离为权重进行加权平均,离插值点越近的样本点赋予的权重越大. 设平 ...
- ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试
原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...
- ArcGIS Engine开发中利用GP工具时常出现的错误
在用GP工具的时候常常会碰到这个错误: 调用 GP 对 COM 组件的调用返回了错误 HRESULT E_FAIL 解决方案: 这种情况一般有两种可能. 1.AE程序的license的级别不够. 2. ...
随机推荐
- Linux下DB2指令总结
1.显示当前实例 >> get instance The current database manager instance is: db2axing 2.列出当前实例中激活的数据库 &g ...
- ionic使用CardIO实现扫描银行卡功能(只能扫描16位以下,并且是浮雕数字)
在一些涉及支付功能的app,一般需要绑定银行卡,除了靠用户手动输入银行卡号,用手机扫描银行卡也是一种常用的手段,查阅了写资料,发现ionic有CardIO插件可以实现这个功能,就兴致冲冲去尝试,结果有 ...
- phpStudy环境下composer的安装
前言 原来是做php开发的,现在转行前端工程师,因为很久没有接触了,可能会有其他问题,这里简单记录一下,后期遇到什么问题再进行更新~ 话说下载特别慢所以这里给个网盘链接Composer-Setup.e ...
- Linux下nc或scp命令来实现文件传输
很实用的小技巧, 可以使用nc或者是scp nc命令,转载自:https://www.cnblogs.com/xuybin/archive/2013/09/27/3343098.html 发送端:ca ...
- this 的用法 为原始类型扩展方法
namespace Demo { public static class Extends { // string类型扩展ToJson方法 public static object ToJson(thi ...
- mysql 导出导入数据库(Mysqldump)备份
使用mysql不熟练啊!!! mysqldump导出数据库,必须以cmd命令行的形式,在Navicat中以新建查询形式使用Mysqldump不好使的.(本来使用Navicat转储SQL,再导入SQL, ...
- maven报错1
错误1 错误2 缺少mapper文件 错误3 缺少映射文件 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --> <build> <re ...
- (十四)C语言之一维数组、二维数组
- git忽略提交:.gitignore
在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交. Git 忽略文件提交的方法 有三种方法可以实现忽略Gi ...
- Python将函数放入模块
函数可以将通用的代码封装起来,便于其他程序或者方法调用.将函数存放在文件中,这个文件被称为模块.将函数存储在独立的模块中,可与其他程序员共享这些文件而不是整个程序. fun.py def say_hi ...