c# 调用ArcEngine的GP工具

转自原文c# 调用ArcEngine的GP工具AE调用GP工具

IAoInitialize m_AoInitialize = new AoInitializeClass();
esriLicenseStatuslicenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
if (licenseStatus == esriLicenseStatus.esriLicenseCheckedOut)
{
    GeoprocessortGp = newGeoprocessor();
    tGp.OverwriteOutput = true;
    licenseStatus = m_AoInitialize.IsExtensionCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine,esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
    licenseStatus = m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);  

    //LICenced arcengine
    ESRI.ArcGIS.ConversionTools.ASCIIToRastertASC = newESRI.ArcGIS.ConversionTools.ASCIIToRaster();
    tASC.data_type = "FLOAT";
    tASC.in_ascii_file = pWorkSpacePath + @"a1.txt";
    tASC.out_raster = pWorkSpacePath + "a1.img";
    //ScrollToBottom("ASCIIToRaster");
    IGeoProcessorResulttGeoResult = (IGeoProcessorResult)tGp.Execute(tASC, null);
    if (tGeoResult.Status == ESRI.ArcGIS.esriSystem.esriJobStatus.esriJobSucceeded)
    {
         ESRI.ArcGIS.SpatialAnalystTools.ReclassifytReclass = newESRI.ArcGIS.SpatialAnalystTools.Reclassify();
        tReclass.in_raster = pWorkSpacePath + "a1.img";
        tReclass.missing_values = "NODATA";
        tReclass.out_raster = pWorkSpacePath + @"Out3.img";
        tReclass.reclass_field = "VALUE";
        tReclass.remap = "0 958 10;958 988 20;988 990 30;990 1000 40;1000 1100 50";
       // ScrollToBottom("Reclassify");
        tGeoResult = (IGeoProcessorResult)tGp.Execute(tReclass, null);
        if (tGeoResult.Status == ESRI.ArcGIS.esriSystem.esriJobStatus.esriJobSucceeded)
        {
            ESRI.ArcGIS.ConversionTools.RasterToPolygontRTP = newESRI.ArcGIS.ConversionTools.RasterToPolygon();
            tRTP.in_raster = pWorkSpacePath + "Out3.img";
            tRTP.out_polygon_features = pWorkSpacePath + "a2_shp.shp";
            tRTP.raster_field = "VALUE";
            tRTP.simplify = "SIMPLIFY";
            //ScrollToBottom("RasterToPolygon");
            tGeoResult = (IGeoProcessorResult)tGp.Execute(tRTP, null);
            if (tGeoResult.Status == ESRI.ArcGIS.esriSystem.esriJobStatus.esriJobSucceeded)
            {
                licenseStatus = m_AoInitialize.CheckInExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
                {
                    ESRI.ArcGIS.DataManagementTools.SmoothPolygontSP = newESRI.ArcGIS.DataManagementTools.SmoothPolygon();
                    tSP.algorithm = "PAEK";
                    tSP.in_features = pWorkSpacePath + "a2_shp.shp";
                    tSP.out_feature_class = pWorkSpacePath + "a2_shp_smooth.shp";
                    tSP.tolerance = "2";
                    tSP.endpoint_option = "FIXED_ENDPOINT";
                    tSP.error_option = "FLAG_ERRORS";
                    ScrollToBottom("SmoothPolygon");
                    tGeoResult = (IGeoProcessorResult)tGp.Execute(tSP, null);
                }
            }
        }
    }
    // arcengine liencesd 当使用高版本的liencesd在使用中,如果需要低版本的liencesd,需要动态签出liencesd,不然将不会执行成功!
   // writeMessage(tGp);
}  

MessageBox.Show("ok");  

giszhouGeoprocessing调用ArcToolBox工具使用总结

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中的部分参数是否设置了,有可能没有像软件操作界面中那样进行默认设置。

时间: 2024-07-30 13:50:41

c# 调用ArcEngine的GP工具的相关文章

利用C#与AE调用GP工具

转自原文 利用C#与AE调用GP工具 第一,首先要明确自己需要调用arctoolbox里面的什么工具,实现什么样的功能. 第三,编写command或tool工具,编写自己要的功能工具. 1)首先创建一个工程. 3)定义工具的名称等信息 public Kriging() { base.m_category = "GPTools"; base.m_caption = "克吕金插值"; base.m_message = "克吕金插值"; base.m_

毕业设计总结:(2)GP工具调用

感谢论坛博主@Mr|Right的文章以及他对我的帮助. 在上一篇文章中已经完成了GP工具的发布,这篇文章中主要涉及到GP工具的调用. 废话不多说,直接开始. 系统开发的硬件配置: 操作系统:Windows 8.1 专业版 软件平台:ArcGIS 10.1(包括Server 10.1和Desktop 10.1) ArcGIS API 3.1 for Silverlight Visual Studio 2010 Microsoft Silverlight 5 SDK Microsoft Access

ArcEngine——异步执行GP工具(Background geoprocessing)

从ArcGIS 10开始,ArcGIS开始支持后台地理处理.使用Geoprocessor.ExecuteAsync()方法,可以在ArcGIS应用程序的后台执行工具或模型工具.也就是说当工具在后台进程中执行时,ArcGIS控件(例如,MapControl.PageLayoutControl.GlobeControl或SceneControl)保持对用户交互的响应.换句话说,可以在工具执行时查看和查询数据.使用后台地理处理来执行一个工具,需要以下操作: 1.注册事件 2.提交工具执行. 1:Geo

毕业设计总结:(1)GP工具发布

GP工具的制作和发布,是ArcGIS使用中重要的一环,能力强的学长们都会选择根据自己的需要自己制作GP工具,关于如何制作GP工具,我的能力有限,只能和大家一起学习. 本文涉及到的GP工具发布,是我的本科毕业设计<基于Internet的DEM河流网提取分析研究>中的一部分,而河流网提取功能使用的就是我自己在ArcGIS中打包的GP工具,好了废话不多说,直接进入正文部分.网上类似的教程很多,希望想学好这些知识的同学自己多动手试试. 首先我们介绍简单介绍下GP工具.GP框架是一组用来管理和执行工具的

ArcGIS Runtime支持的GP工具列表(转 )

转自原文 ArcGIS Runtime支持的GP工具列表(转 ) 目前ArcGIS Runtime有两个版本 Basic 版本和Standard版本,而Basic版本不支持Geoprocessing(这里指的是本地的Geoprocessing),对于Geoprocessing的支持是在Standard版本中,在Standard版本中又可以搭配一些扩展模块来增强Geoprocessing,那么ArcGIS Runtime能支持那些以及支持多少Geoprocessing,我们将其归类如下. Stan

修改字段结构之GP工具

即然有这个需求,就有人这样做.有人写了GP工具直接来重命名字段名和字段别名.工具及源码下载链接为:http://www.t00y.com/file/90123888 加载到ToolBox中后,可直接运行这两个工具进行处理. 操作非常简单,只能更改名称或别名,不能更改数据类型及长度等.如有多个修改,可以使用批处理. 下面是修改名称后的效果: 最关键一点是它的物理顺序还是没有改变.

AE调用GP工具出错

private void RunTool(Geoprocessor geoprocessor, IGPProcess process, ITrackCancel TC) { geoprocessor.OverwriteOutput = true; try { geoprocessor.Execute(process, null); ReturnMessage(geoprocessor); } catch(Exception err){ MessageBox.Show(err.Message);

AE开发中,对 COM 组件的调用返回了错误 HRESULT E_FAIL,在地理处理中,即GP工具处理时出错

ArcgisEngine二次开发中,进行地理处理,即:相交操作,交集取反操作,擦除操作等过程中,如果权限分配不当,就会出现上面对 COM 组件的调用返回了错误 HRESULT E_FAIL 的错误 原因如下:在进行擦除,交集取反等高级操作时,必须是ArcgisInfo级别的许可授权,否则无法进行操作,而相交操作用ArcgisEngine级别即可.(不稳定,会出错,建议2) 解决如下:1.如何使用licenceControl控件选择ArcgisInfo选项即可,同时选中其中的Spatial Ana

ThinkPHP环境下调用Action的测试工具

0.序言 > 本人开发了一种工具帮助ThinkPHP开发者模拟前端ajax请求,以提高测试效率. 前.后端开发者分工合作是Web项目常见的开发方式.在二者开发进度不一致的情况下,后端开发者经常面临无法通过前端界面验证程序的尴尬:此时往往只能采取模拟请求的方式进行测试,而在ThinkPHP环境下模拟请求会更加麻烦一些.基于过往项目的积累,本人开发一个测试工具帮助开发者模拟HTTP请求调用后端Action服务.本文介绍工具的功能和获取.使用方法,并说明实现过程的一些关键点. 1.功能 基于提高测试效