没有删除原来的图形。

误区
双重foreach
对原始数据foreach后又对最终数据进行foreach,这样会多出许多的多段线
Key:从列表中找到与新加入的图形相邻的图形。列表中的图形都是不需要合并的,因为在之前已经验证了他们之间的关系,只需要对新加入的图形进行判断即可。之前的方法是每次都对列表中图元之间的关系进行判断,需要考虑的因素太多,而且没有找到正确的解决方案。

合并:
list1,原始数据
list2,最终数据
循环list1
向list2中添加成员
判断list2的个数是否大于1
小于1,继续循环
大于1,调用方法,在list2中找到新加入的成员相邻的图元
若不为空,则将新加入的成员和与新加入的成员相邻的图元传入合并图元的方法
向list2中加入合并完成后的豫园
在list2中去除合并的两个图元
完成

    /// <summary>/// 得到合并相邻的图形后的图形列表/// </summary>/// <param name="hPlyList"></param>/// <returns></returns>private List<Polyline> GetMergePolylineList(List<Polyline> hPlyList){List<Polyline> plys = new List<Polyline>();PolylineEditService service = new PolylineEditService();//循环所有多段线foreach (Polyline ply in hPlyList){plys.Add(ply);if (plys.Count < 2){continue;}Polyline plyIntersect = this.GetIntersectPly(ply, plys);//判断多段线是否相邻if (plyIntersect != null){List<Polyline> list = new List<Polyline>();list.Add(ply);list.Add(plyIntersect);//合并多段线Polyline plyUnion = service.GetUnionPolylines(list);plys.Add(plyUnion);plys.Remove(ply);plys.Remove(plyIntersect);}}return plys;}/// <summary>/// 从列表中找到相邻的图形/// </summary>/// <param name="ply"></param>/// <param name="plys"></param>/// <returns></returns>private Polyline GetIntersectPly(Polyline ply, List<Polyline> plys){foreach (var item in plys){if (item.Handle.Value.ToString().Equals(ply.Handle.Value.ToString())){continue;}//判断多段线是否相邻if (item.IsIntersectPolyline(ply)){return item;}}return null;}/// <summary>/// 得到合并之后的多段线/// </summary>/// <param name="plyList"></param>/// <returns></returns>public Polyline GetUnionPolylines(List<Polyline> plyList){List<GeoAPI.Geometries.IGeometry> polygons = new List<GeoAPI.Geometries.IGeometry>();foreach (var ply in plyList){PolylineObject plyObj = new PolylineObject(ply);List<PointModel> points = plyObj.GetPointModelList();if (points.Count > 0){GeoAPI.Geometries.IPolygon polygon = PolygonUtil.GetPolygon(points);polygons.Add(polygon);}}List<PointModel> pts = PolygonUtil.GetUninonPolygon(polygons);if (pts == null || pts.Count == 0){return null;}Polyline plyUnion = new Polyline(pts.Count);for (int i = 0; i < pts.Count; i++){PointModel ptModel = pts[i];Point2d pt = new Point2d(ptModel.X, ptModel.Y);plyUnion.AddVertexAt(i, pt, 0, 0, 0);}return plyUnion;}

多个图元合并其中相邻的图元相关推荐

  1. Excel按列合并相同相邻单元格和拆分单元格

    目录 1.使用vba的方式 1.1合并相同相邻单元格 1.2 拆分单元格 2.使用分类汇总+定位ctrl+G的手工方法 1.使用vba的方式 1.1合并相同相邻单元格 代码如下: Sub RngMer ...

  2. QGraphicsItem图元旋转缩放和自定义图元(三)

    系列文章目录 QGraphicsItem图元的简单使用(一) QGraphicsItem图元拖动绘制(二) 文章目录 系列文章目录 前言 一.缩放和旋转 二.自定义图元 总结 前言 接上一章,图元绘制 ...

  3. QGraphicsItem基本图元的添加以及闪烁图元和移动图元的添加

    基本图元有:椭圆,多边形,长方形,文字,图片等图元 通过代码演示各种图元的添加: ①主窗口头文(QMainWindow): #ifndef MAINWINDOW_H #define MAINWINDO ...

  4. Qt GraphicsItem 通过直线图元连接其他两个图元

    一.概述 实现两个图元之间的连接线,拖动图元的时候,线也跟着动,因此这个直线也必须是图元. 二.步骤 2.1 自定义一个类继承 QGraphicsLineItem 在构造函数中获取前一个图元和后一个图 ...

  5. lisp 图元 天正 自定义_AutoLISP查询图元信息

    (defun c:getppt    () (setq ss (car (entsel "请选择要查询的图元:"))) (setq ssob (vlax-ename->vla ...

  6. Windows10合并非相邻磁盘或分区到系统C盘方法

    前言:该方法针对的是你想要合并的两个分区不是相邻关系,如果是相邻关系的分区合并,可以直接用Windows10自带的磁盘管理工具进行合并即可.另外,由于这种与磁盘移动相关操作可能会出现数据丢失,系统崩溃 ...

  7. ArcGis Python脚本——将细碎小面合并到相邻的面积最大的面

    参数: polygon_fc 面要素类 area_limit 给定面积值,小于它的面会被合并 给定两个参数即可,这回没有注释. 1 #polygon_fc 面要素类 2 #area_limit 给定面 ...

  8. C++数据结构与算法 队列的应用之图元识别

    图元识别: 数字化图像可以看作m*m的矩阵,单色如图中,像素点的值为0,1.值为0的点表示背景,为1的点表示图元上的一个点.两个相邻的图元像素是同一个图元的像素,图元识别就是给同一个图元的像素做标记. ...

  9. Filament渲染引擎剖析 之 通过图元构建几何体

    Filament渲染引擎剖析 之 通过图元构建几何体 什么是图元 filament可绘制的图元类型 构建图元的工具 VertexBuffer IndexBuffer Primitive 什么是图元 图 ...

最新文章

  1. c语言坐标三角形判断,【C语言】判断三角形类型(示例代码)
  2. verilog存小数_FPGA定点小数计算(Verilog版)第二篇——乘法运算
  3. 北林oj-算法设计与分析-Simple Count(C++,思路+代码)
  4. 查看gradle dependencies
  5. 机器学习用于数字图像处理_用于创建数字内容的免费电子学习工具
  6. python用户登录a_用Python实现用户登录接口
  7. 素材网站|设计师下半年的工作流程至少减少了一半...
  8. java gui 监听组合键,Java之GUI按钮监听事件ActionListener
  9. python elasticsearch bulk_Elasticsearch —— bulk批量导入数据
  10. web前端开发要不要找个师傅带?
  11. 学习微信小程序之css7
  12. registered php streams sqlsrv,tp5与SQL Server的爱恨情仇(1)
  13. FileStream:The process cannot access the file because it is being used by another process
  14. [摘文]BizTalk概述
  15. Linux操作系统原理
  16. Linux 虚拟机配置静态IP地址
  17. cactiez mysql密码_CactiEZ中文解决方案+使用教程(1)
  18. Python——Dict类型
  19. mp4转换m3u8格式php,m3u8格式怎么转换mp4 ts格式转换 - 下载的m3u8、ts如何转换成mp4...
  20. Log Parser 2.2 + Log Parser Lizard GUI 分析IIS日志示例

热门文章

  1. linux服务器新装hba卡,Linux系统上安装FC HBA卡驱动-weiyonghz-ChinaUnix博客
  2. CLA与CPU数据交互
  3. C++设计模式——访问者模式(高屋建瓴)
  4. html个人信息表制作(适合初学者)
  5. 软技能-代码之外的生存指南 学习笔记
  6. 恭喜你,未来的CISSPer,你需要知道的背书全流程和小秘密
  7. 领英发错的消息可以撤回吗?
  8. 什么是域名邮箱?发出的邮件可以撤回吗?
  9. 牛客网项目--MyBatis
  10. C++ 传参时传内置类型时用传值(pass by value)方式效率较高