开发环境:VS2013 + ArcEngine 10.4
在数据量较大时,请用ITopologicalOperator的ConstructUnion方法,而不是一个一个Union

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;namespace WindowsFormsApplication2
{public class MergeTool{/// <summary>/// 输入要素/// </summary>private IFeatureClass in_FeatureClass;/// <summary>/// 构造函数/// </summary>/// <param name="in_FeatureClass"></param>public MergeTool(IFeatureClass in_FeatureClass){this.in_FeatureClass = in_FeatureClass;}/// <summary>/// 获取空间参考/// </summary>/// <returns></returns>private ISpatialReference GetSpatialReference(){IGeoDataset pGeoDataset = in_FeatureClass as IGeoDataset;ISpatialReference pSpatialReference = pGeoDataset.SpatialReference;return pSpatialReference;}/// <summary>/// 合并几何体/// </summary>/// <returns></returns>private IGeometry GetMergeGeometry(){IGeometryBag pGeometryBag = new GeometryBag() as IGeometryBag;pGeometryBag.SpatialReference = GetSpatialReference();IGeometryCollection pGeometryCollection = pGeometryBag as IGeometryCollection;// 属性过滤IQueryFilter pQueryFilter = new QueryFilter();pQueryFilter.AddField("Shape");// 要素游标IFeatureCursor pFeatureCursor = in_FeatureClass.Search(pQueryFilter, true);IFeature pFeature = pFeatureCursor.NextFeature();if (pFeature == null){return null;}// 遍历游标object missing = Type.Missing;while (pFeature != null){pGeometryCollection.AddGeometry(pFeature.ShapeCopy, ref missing, ref missing);pFeature = pFeatureCursor.NextFeature();}Marshal.ReleaseComObject(pFeatureCursor);// 合并要素ITopologicalOperator pTopologicalOperator = null;if (in_FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint){pTopologicalOperator = new Multipoint() as ITopologicalOperator;pTopologicalOperator.ConstructUnion(pGeometryCollection as IEnumGeometry);}else if (in_FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline){pTopologicalOperator = new Polyline() as ITopologicalOperator;pTopologicalOperator.ConstructUnion(pGeometryCollection as IEnumGeometry);}else{pTopologicalOperator = new Polygon() as ITopologicalOperator;pTopologicalOperator.ConstructUnion(pGeometryCollection as IEnumGeometry);}return pTopologicalOperator as IGeometry;}/// <summary>/// 执行工具/// </summary>/// <param name="filePath"></param>/// <returns></returns>public IFeatureClass ExecuteTool(string filePath){IGeometryDef pGeometryDef = new GeometryDef();IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;if (in_FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint){pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryMultipoint;pGeometryDefEdit.HasM_2 = false;pGeometryDefEdit.HasZ_2 = false;pGeometryDefEdit.SpatialReference_2 = GetSpatialReference();}else if (in_FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline){pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;pGeometryDefEdit.HasM_2 = false;pGeometryDefEdit.HasZ_2 = false;pGeometryDefEdit.SpatialReference_2 = GetSpatialReference();}else{pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;pGeometryDefEdit.HasM_2 = false;pGeometryDefEdit.HasZ_2 = false;pGeometryDefEdit.SpatialReference_2 = GetSpatialReference();}// 字段集合IFields pFields = new Fields();IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;// ShapeIField pField = new Field();IFieldEdit pFieldEdit = pField as IFieldEdit;pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;pFieldEdit.GeometryDef_2 = pGeometryDef;pFieldEdit.AliasName_2 = "Shape";pFieldEdit.Name_2 = "Shape";pFieldEdit.IsNullable_2 = false;pFieldEdit.Required_2 = true;pFieldsEdit.AddField(pField);// 创建要素类IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(filePath), 0);IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;IFeatureClass pFeatureClass = pFeatureWorkspace.CreateFeatureClass(System.IO.Path.GetFileName(filePath), pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");// 插入要素IFeatureBuffer pFeatureBuffer = pFeatureClass.CreateFeatureBuffer();IFeatureCursor pFeatureCursor = pFeatureClass.Insert(true);pFeatureBuffer.Shape = GetMergeGeometry();pFeatureCursor.InsertFeature(pFeatureBuffer);pFeatureCursor.Flush();return pFeatureClass;}}
}

运行结果:
初始数据如下图:

合并数据如下图:

ArcEngine合并要素相关推荐

  1. ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码

    转自原文 ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码 #region 校验合法性 ArrayList pFeatureArray = nul ...

  2. 合并要素--how to use ConstructUnion

    合并要素--how to use "ConstructUnion" 参考:http://forums.esri.com/Thread.asp?c=93&f=1170& ...

  3. arcgis 合并名字相同的要素_ArcGIS中各种合并要素异同

    ArcGIS 中各种合并要素( Union . Merge . Append . Dissolve )的异同点分析 作者: 李新月 ArcGIS 中将两个要素类合并成一个要素有 Union . Dis ...

  4. ArcEngine实现要素类排序的四种方法

    ArcEngine的排序方法有多种,下面介绍一下主要的四种方法. 准备数据 测试数据如下图所示:新建一个Geodatabase的要素类,其中Name为道路名称,Width为道路宽度,下面将根据Widt ...

  5. ArcGIS中各种合并要素(Union、Merge、Append、Dissolve)的异同点分析

    本文转载自CSDN博主「Sylvenas」的原创文章 原文链接:[https://blog.csdn.net/Mello_/article/details/41276909] 本文在原文基础上补充了部 ...

  6. ArcGIS中各种合并要素(Union、Merge、Append、Dissolve)的异同点分析 转载

    标签: arcgis 杂谈 分类: GIS ArcGIS中将两个要素类合并成一个要素有Union.Dissolve.Append.Merge等,在Arctoolbox中均有相应工具,但功能上有所不同: ...

  7. C# AE 合并要素/合并图形/merger功能

    功能描述 合并功能,准确的说是merge.union. 这两者在ArcMap中的差别就是:merger保留相同字段属性:union是可以选择创建新的合并图形还是直接用原始要素合并,合并属性不保留. 接 ...

  8. ArcEngine数据编辑--选择要素

    转自原文ArcEngine数据编辑--选择要素 好久没有写博文了,这段时间相对空闲一点,把AE数据编辑实现总结下. 要编辑要素,首先要选中要素,按shift键进行多选,按esc键清空选择. 个人了解的 ...

  9. arcgis 合并 联合_合并不同图层中的要素(联合)

    "联合"用于将所选要素合并为一个新要素.所选要素可以来自不同图层,但图层的几何类型(线或面)必须相同."联合"会保留原始要素及其属性 - 也就是说,在" ...

  10. arcgis根据矢量范围裁取tif影像(栅格数据)、批量合并shp文件、根据矢量范围裁取区域内的矢量,输出地理坐标系

    选取研究区域,作图美观. 这是最初的矢量文件,现在切割得到了云贵川地区的矢量文件,通过直接编辑最初的矢量文件. 现在要从上图切出云贵川区域. 打开对话框后输入影像和裁剪的区域,如果只需要裁剪的矢量区域 ...

最新文章

  1. 擦除:提升 CNN 特征可视化的 3 种重要手段
  2. python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
  3. 美国版“非升即走”瞄准终身教授,2年评审不通过就减薪撤职,其他高校开始抢人...
  4. CMM能力成熟度模型
  5. 对静态区,栈,堆的理解
  6. 听说你想去大厂看学妹,带你看看作业帮产品经理岗面经
  7. ELS多种方式集群部署
  8. Subversion 1.7 Eclipse integration in Ubuntu12(转载)
  9. jquery跳出当前的each循环的方式
  10. Spring Environment
  11. 比特币挖矿难度上调至23.14T,创历史新高
  12. SAP License:CKMLCP运行物料帐时单个物料冲突无法运行
  13. php常用编码,简介常见的编码方式
  14. 低频电子线路学习笔记
  15. 国内国外常用外包平台大全汇总!
  16. 连接到此计算机的本地打印机无法选择,Win7系统连接打印机出现本地打印后台处理程序服务没有运行怎么办...
  17. 从“机器换人”到“虚拟数字员工”,我们应该担心人工智能“抢饭碗”吗?
  18. 百万亚瑟王无法连接服务器请在信号良好的地方重试,叛逆性百万亚瑟王
  19. 直播预告 | NeurIPS 专场一 青年科学家专场
  20. android2.1源代码结构

热门文章

  1. 三角函数:直角三角形内角关系公式
  2. 台式计算机cpu允许温度,玩游戏cpu温度多少正常(台式电脑夏季CPU一般温度多少)...
  3. k8s节点假死排查记录
  4. 2021腾讯广告大赛学习总结
  5. 如何将PPT进行压缩?PPT压缩的方法是什么
  6. java实现微信订阅消息(服务通知)
  7. 电商营业执照能入驻跨境电商虾皮shopee平台吗?
  8. python里面的pip是什么意思_python中pip问题
  9. 阿里云,腾讯云CDN谁更胜一筹?
  10. onesignal php,swoole生产环境并发高时偶尔出现 WARNING swSignalfd_onSignal (ERRNO 707)