【ArcGIS Pro二次开发】(43):线闭合

当我们需要将多段线【polyline】转为面【polygon】的时候,必须保证线是闭合的,不然是无法生成面的,如下图:

0ed4cab044024c42b9e2bc2ae3251c2c.png

如果cad线段,可以在属性里将闭合选项设置为是,实现线的闭合:

b15bfcdfc9084f629a08bd78bb08b9fe.png

但如果是在ArcGIS Pro里处理,则没有方便的方法(或许有但我没找到),于是便做了这个工具。


一、要实现的功能

ec3785a902c847d89d490ad6c0ec9e97.png

如上图所示,选择一个线要素【需注意必须是数据库文件,不能是cad文件】,右键点击,在弹出的菜单中点击【线闭合】按钮即可。

执行结果如下:

bddec3661dc24c898d2051beaa64beef.png

可以看到,3个未封闭的线已经闭合了,后续可以用【要素转面】工具将其转为面。


二、实现流程

涉及要素编辑,就按流程建立编辑操作,并打开要素图层,逐行遍历,获取要素,这些都是常规操作。

            // 获取要素图层的编辑操作var editOperation = new EditOperation();using (RowCursor rowCursor = featureLayer.Search()){while (rowCursor.MoveNext()){using (Feature feature = rowCursor.Current as Feature)      // 获取要素{// TODO…………}}}// 执行编辑editOperation.Execute();

重点是上面【TODO】里的内容。

首先要判断线要素是否闭合,已闭合的就不再处理,只处理没闭合的。

这里通过提取线的首末点,如果首末点的坐标一致,则说明是闭合的,否则就是不闭合。

// 获取要素的几何对象
Polyline polyline = feature.GetShape() as Polyline;
// 获取线要素的起点和终点
MapPoint start_point = polyline.Points.First();
MapPoint end_point = polyline.Points.Last();
// 如果起始点和终止点的坐标不同,即线不闭合,则进行线闭合操作
if (!start_point.Coordinate2D.Equals(end_point.Coordinate2D))
{// TODO
}

找出未闭合的线后,将它的点集合提取出来,将第一个点复制到点集合的末尾,这样点集合就形成一个闭环,然后重新创建要素即可。

List<Coordinate2D> pts = new List<Coordinate2D>();
// 将第一个部分闭合
foreach (var part in polyline.Points)
{pts.Add(part.Coordinate2D);
}
pts.Add(start_point.Coordinate2D);
// 创建 PolylineBuilder 对象并闭合线要素
var builder = new PolylineBuilder(pts);
// 获取闭合后的几何
var closedGeometry = builder.ToGeometry();
// 设置要素的几何
feature.SetShape(closedGeometry);

以上便实现了此工具的功能。


三、工程文件分享

 最后,放上工程文件的链接:

CloseLinehttps://pan.baidu.com/s/1x-EI_vNKgt4M9wZ8y9FEDg?pwd=iqp2

PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/5457.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++【初识哈希】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 16.11.17 文章目录 &#x1f307;前言&#x1f3d9;️正文1、哈希思想2、哈希函数2.1、哈希函数的设计原则2.2、常见的哈希函数 3、哈希…

云原生——什么是云原生?

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 伴随云计算的滚滚浪潮&#xff0c;云原生(CloudNative…

kubernetes核心概念 controller

kubernetes核心概念 Controller 一、pod控制器controller 1.1 Controller作用及分类 controller用于控制pod 参考: https://kubernetes.io/zh/docs/concepts/workloads/controllers/ 控制器主要分为: Deployments 部署无状态应用&#xff0c;控制pod升级,回退ReplicaSet 副…

ROS自带OpenCV和本地OpenCV版本冲突问题解决

1、报错信息 首先catkin_make编译功能包没有任何问题&#xff0c;100%生成目标文件&#xff0c;但是报了警告&#xff1a;库文件libmyslam.so需要的是libopencv_core.so.3.4&#xff0c;可能会与libopencv_core.so.3.2冲突。根据工程经验&#xff0c;警告不用管&#xff0c;直…

从浏览器输入url到页面加载(六)前端必须了解的路由器和光纤小知识

前言 上一章我们说到了数据包在网线中的故事&#xff0c;说到了双绞线&#xff0c;还说到了麻花。这一章继续沿着这条线路往下走&#xff0c;说一些和cdn以及路由器相关&#xff0c;运营商以及光纤相关的小知识&#xff0c;前端同学应该了解一下的 目录 前言 1. CDN和路由器…

Vue中watch与computed区别

<body><div id"root">姓&#xff1a;<input type"text" v-model"firstName"><br/><br/>名&#xff1a;<input type"text" v-model"lastName"><br/><br/>全名&#xff1a;&…

Spring:Bean

Bean 概述配置方式自动装配继承与依赖作用域外部属性文件的使用 概述 Spring 容器负责管理依赖注入&#xff0c;它将被管理的对象都称为 bean 。我们通过 xml 文件配置方式进行对 bean 的声明和管理。 写法如下&#xff1a; <beans><bean id"bean的唯一标识符…

EasyExcel实现execl导入导出

引言 在实际开发中&#xff0c;处理 Excel 文件是一个常见的需求。EasyExcel 是一个基于 Java 的开源库&#xff0c;提供了简单易用的 API&#xff0c;可以方便地读取和写入 Excel 文件。本文将介绍如何使用 EasyExcel 实现 Excel 导入功能&#xff0c;以及一些相关的技巧和注…

qt for android 开发之tcp通讯

简介 通过TCP使PC和android手机相互通讯。 准备 使用QT的网络模块 QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgets.h 定义TCP接口 #include <QTcpSocket>class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(Q…

计算机中CPU、内存、缓存的关系

CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09; 内存&#xff08;Random Access Memory&#xff0c;随机存取存储器&#xff09; 缓存&#xff08;Cache&#xff09; CPU、内存和缓存之间有着密切的关系&#xff0c;它们共同构成了计算机系统的核…

网络安全进阶学习第五课——文件上传漏洞

文章目录 一、常见文件上传点二、任意文件上传漏洞三、任意文件上传危害四、webshell五、上传木马所需条件六、木马上传流程七、上传绕过1、绕过JS验证1&#xff09;Burpsuite剔除响应JS。2&#xff09;浏览器审计工具剔除JS 2、绕过MIME-Type验证1&#xff09;利用抓包工具&am…

Pytroch本地安装方法

1 查看电脑安装的cuda版本 nvidia-smi这里的红圈标注的是cuda 最高版本&#xff0c;虚拟环境中安装&#xff0c;只要不超过12.0就可以 第二步 去官网看torch, torchvision等版本的匹配关系 https://pytorch.org/get-started/previous-versions/ 比如这里&#xff1a; &…