基于C#的ArcEngine二次开发34:使用ConstructUnion方法进行多要素合并(上)

简介: 基于C#的ArcEngine二次开发34:使用ConstructUnion方法进行多要素合并

0 基础知识

0.1 ArcGIS常用工具:union、merge、append、dissolve区别

原文来自https://blog.csdn.net/sisiiiiiii/article/details/39178913

union(联合)

     要求输入的要素必须是多边形,即求得两个及以上多边形的并集,对输入要素的属性字段没有要求,输出要素是所有输入的属性的集合。如下图输入三个要素面,输出要素面为7个。


                20140910111654910.jpg


merge(合并)

     将数据类型相同的多个输入数据集合并为新的单个输出数据集,属性字段也合并成两个要素属性全集


        20140910111739417.jpg


append(追加)

     将多个输入数据集追加到现有目标数据集,与合并区别是合并生成新的要素集,追加是在现有要素基础上。


                                  20140910111804002.jpg


dissolve(融合)

     对于融合需要选择一个或者多个指定的属性字段,融合的要素必须具有相同的几何类型,可以简单理解为具有相同属性要素集合成一个要素集。融合后的属性字段仅输出融合前指定的。


20140910111858681.jpg


面状数据调整,需要把多个面融合为一个面,属性保留一种,那就需要用到融合工具(dissolve)


0.2 融合示例ArcGIS演示

文献来源:https://blog.csdn.net/aganliang/article/details/81560293

下面详细讲解使用方法,如图所示。

1.先把属性改成一样

20180810112442169.png

2.打开融合工具

20180810112507514.png

3.自动生成的字段不要勾选

20180810112527289.png

4.结果如图所示。

20200429174552877.png


要素融合+要素转点的代码实现:

//在D:\data目录下创建temp.gdb文件夹,存储计算的中间结果
public check(string inPath, string checkLayerName)
{
    //初始化GP工具
    ESRI.ArcGIS.Geoprocessor.Geoprocessor pGeoprocessor = new ESRI.ArcGIS.Geoprocessor.Geoprocessor {OverwriteOutput = true, AddOutputsToMap = false};
    //创建GDB文件
    CreateFileGDB processor1 = new CreateGDB {out_folder_path = @"D:\data", out_name = "temp.gdb"}; 
    pGeoprocessor.Execute(processor1, null);
    string lcaPath = inPath + "\\" + checkLayerName;
    string gdbPath = processor1.out_folder_path + "\\" + processor1.out_name);
    //面融合
    string dissolveLayerName = gdbPath + "\\dissolve";
    pGeoprocessor.Execute(areaDissolve(lcaPath, dissolveLayerName), null);
    //要素转点
    string featureToPointLayerName= gdbPath + "\\dissolve";
    pGeoprocessor.Execute(featureToPoint(lcaPath, featureToPointLayerName), null);
}
//面融合函数
public void areaDissolve(string lcaPath, string dissolveLayerName)
{
    Dissolve disolve = new Disolve {};
    dissolve.in_features = lcaPath;
    dissolve.out_features = dissolveLayerName;
    dissolve.dissolve_fields = "FEAID";
    return disolve;
}
//要素转点
public void featureToPoint(string lcaPath, string featureToPointLayerName)
{
    FeatureToPoint pFeaToPt = new FeatureToPoint {};
    pFeaToPt.in_features = lcaPath;
    pFeaToPt.out_features_class = featureToPointLayerName;
    pFeaToPt.point_location = "INSIDE";
    return pFeaToPt;
}


相关文章
|
29天前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
29天前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
1月前
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
143 0
|
29天前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
29天前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)
|
29天前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式
|
1月前
|
C#
C#中保留小数点后N位的方法_kaic
C#中保留小数点后N位的方法_kaic
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
15 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
70 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
53 0