基于C#的ArcEngine二次开发39:GP工具的使用--界面、参数及示例代码

本文框架将根据个人学习及工作需求搭建,持续更新。

1 基础

GP工具是ArcGIS中比较常用的数据处理工具,效率高而且经过充分的测试,比较可靠;直接调用这些工具会给我们的工作带来极大的遍历,本文旨在搜集和整理GP工具使用的示例代码,为自己和以后的学习者提供参考学习。

1.1 依赖的名称空间

 

NamespaceInterfaceClass
ESRI.ArcGIS.Geoprocessing

IGpValueTableObject

GeoProcessorClass
ESRI.ArcGIS.AnalysisToolsIntersect 
ESRI.ArcGIS.DataManegementToolsCeateFileGDB 

1.2 基础代码框架

public void MainFrame()
{
    //创建gp工具
    ESRI.ArcGIS.Geoprocessor.Geoprocessor pGeoprocessor = ESRI.ArcGIS.Geoprocessor.Geoprocessor{};
    pGeoprocessor.OverwriteOutput = true;
    pGeoprocessor.AddOutputToMap = false;

    //创建GDB文件
    CreateFileGDB processor = new CreateFileGDB {};
    processor.out_folder_path = @"d:\临时目录";
    processor.out_name = "temp.gdb";

    pGeoprocessor.Execute(processor, null);

    //其余示例代码可直接参照创建gdb文件的代码进行
}

1.3 使用GP工具的思路

自己琢磨的步骤:

  • 引用ESRI.ArcGIS.Geoprocessing名称空间,创建GP执行对象
  • 在ArcGIS中找到要使用的ArcToolBox工具,其所属的一级目录即为使用该工具需要的引用的名称空间;
  • 打开ArcMap的工具帮助,即可看到使用该工具的参数说明及赋值规则
  • 使用定义的GP对象,执行完成赋值的工具
  • 输出结果

目前没发现怎么直接利用开发帮助文档,找到类似与普通接口调用那样的参数说明,以待后续研究,若有大神知道步骤,欢迎评论区告知。

2 分析工具-AnalysisTools

2.1 叠加工具-Overlay

2.1.1 相交-Intersect

计算输入要素的几何交集,所有图层和/或要素类中相叠置的要素或要素的各部分将被写入到输出要素类。

(1) 功能截图:

(2) 参数说明:

参数说明数据类型

in_features

[in_features, {Rank},...]

输入要素类或图层列表。要素间距小于拓扑容差时,等级较低的要素将捕捉到等级较高的要素。最高等级为一。有关详细信息,请参阅优先级等级和地理处理工具

Value Table

out_feature_class

输出要素类。

Feature Class

join_attributes

(可选)

确定输入要素的哪些属性将传递到输出要素类。

 

ALL —输入要素的所有属性都将传递到输出要素类。这是默认设置。

NO_FID —除 FID 外,输入要素的其余属性都将传递到输出要素类。

ONLY_FID —只有输入要素的 FID 字段将传递到输出要素类。

String

cluster_tolerance

(可选)

所有要素坐标(节点和折点)之间的最小距离以及坐标可以沿 X 和/或 Y 方向移动的距离。

Linear unit

output_type

(可选)

选择要查找的相交类型。

 

INPUT —所返回相交的几何类型与具有最低维度几何的输入要素的几何类型相同。如果所有输入都是面,则输出要素类将包含面。如果一个或多个输入是线但不包含点,则输出是线。如果一个或多个输入是点,则输出要素类将包含点。这是默认设置。

LINE —将返回线相交。仅当输入中不包含点时,此选项才有效。

POINT —将返回点相交。如果输入是线或面,则输出将是多点要素类。

String

(3) 示例代码

        /// <summary>
        /// 成功方式
        /// </summary>
        /// <param name="inputFeatClass">输入要素类</param>
        /// <param name="clipFeatClass">裁剪要素类</param>
        /// <param name="outShpFileName">不带.shp的文件名</param>
        private void IntersectResults(IFeatureClass inputFeatClass, IFeatureClass clipFeatClass, string outShpFileName)
        {
            IGpValueTableObject valTbl = new GpValueTableObjectClass();
            valTbl.SetColumns(2);
            object row = "";
            object rank = 1;
 
            row = inputFeatClass;
            valTbl.SetRow(0, ref row);
            valTbl.SetValue(0, 1, ref rank);
 
            row = clipFeatClass;
            valTbl.SetRow(1, ref row);
            rank = 2;
            valTbl.SetValue(1, 1, ref rank);
 
            Geoprocessor gp = new Geoprocessor();
            gp.OverwriteOutput = true;
            ESRI.ArcGIS.AnalysisTools.Intersect intersect = new ESRI.ArcGIS.AnalysisTools.Intersect();
            intersect.in_features = valTbl;
            intersect.out_feature_class = outShpFileName; 
            intersect.join_attributes = "NO_FID";
            intersect.output_type = "INPUT";
            if (gp.Execute(intersect, null) == null)
            {
                throw new DataOutputException(GetGpMessage(gp));
            }
         }

(4) 调用:

pGeoprocessor.Execute(IntersectResault(inFea1, inFea2, outFeaName), null);

3 数据管理工具 DataManagementTools

3.1 Joins

public AddJoin tableJoin(IFeatureClass editFeatureClass, IFeatureClass srcFeatureClass)
{
    //1 创建gp工具
    ESRI.ArcGIS.Geoprocessor.Geoprocessor pGeoprocessor =     ESRI.ArcGIS.Geoprocessor.Geoprocessor{};
    pGeoprocessor.OverwriteOutput = true;
    pGeoprocessor.AddOutputToMap = false;

    //2 创建GDB文件
    CreateFileGDB processor = new CreateFileGDB {};
    processor.out_folder_path = @"d:\临时目录";
    processor.out_name = "temp.gdb";

    pGeoprocessor.Execute(processor, null);

    //3 图层连接
    AddJoin pAddJoin = new AddJoin { };
    pAddJoin.in_layer_or_view = editFeatureClass;
    pAddJoin.in_field = "FEAID";

    pAddJoin.join_table = srcFeatureClass as ITable;
    pAddJoin.join_field = "FEAID";
    
    pAddJoin.join_type = "KEEP_ALL";
    pGeoprocessor.Execute(pAddJoin, null);

    //4 图层拷贝
    CopyFeatures pCopy = new CopyFeatures{};
    pCopy.in_features = editFeatureClass;
    pCopy.out_feature_class = "d:\临时目录\temp.gdb\连接图层";
    pGeoprocessor.Execute(pCopy , null);
    
    //5 移除连接
    //ESRI.ArcGIS.DataManagementTools.RemoveJoin removeJoin = new ESRI.ArcGIS.DataManagementTools.RemoveJoin(editFeatureClass);           
    //IGeoProcessorResult gpResult =  gp.Execute(removeJoin,null) as IGeoProcessorResult; 
}

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值