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

news2024/11/17 0:47:13

当我们需要将多段线【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.coloradmin.cn/o/687968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【inpho精品教程】07 动连点自动提取和区域网平差

【inpho精品教程】07 动连点自动提取和区域网平差 文章目录 【inpho精品教程】07 动连点自动提取和区域网平差一、数据及参数检查二、参数设置三、运行四、 连接点提取失败的原因五、 连接点较差的原因一、数据及参数检查 在动连点自动提取和区域网平差之前,首先要检查工程中…

Miniconda安装使用教程

下载 官网地址&#xff1a;https://docs.conda.io/en/latest/miniconda.html 支持的系统&#xff1a; Windows 10 or newer, 64-bit macOS 10.13, or Linux, including Ubuntu, RedHat, CentOS 7, and others. 支持的系统架构&#xff1a; Windows- 64-bit x86, 32-bit x86; m…

Json 数据通用提取工具,使用 HTML JavaScript [单文件离线版]

Gitee 地址链接 Json2Csv js html 实现的一款通用型JSON数据提取工具&#xff0c;支持自动识别JSON数据节点并有序提取为CSV文件。 Convenient JSON data extraction tool. 使用简介 数据路径&#xff1a;设置Json中数据所处路径&#xff0c;如’root.topics.data’ ‘data.…

JavaWeb小记——请求对象request

目录 request对象 获取请求行 获取请求方式 获取项目的上下文路径 获取URI 获取URL 获取IP地址 获取协议版本 获取请求参数 获取请求头 获取日期头 获取数字头 获取请求体 获取请求参数 通用方式获取请求参数 单个获取 针对复选框 获取所有参数&#xff08;map&…

Matlab基础知识汇总(小白速成)

1.矩阵 1.矩阵运算符 运算符号说明具体表现实现转置A.矩阵转置共轭转置A复矩阵共轭转置&#xff0c;当A为实数矩阵时等价于A.加减AB、A-B矩阵元素之间相互进行加减数与矩阵加减KA、K-A数与矩阵的加减操作数乘以矩阵k*A数对矩阵中的每个元素进行相乘矩阵相乘A * B A.*B乘法运算…

单片机STM32看门狗详解(嵌入式学习)

单片机STM32看门狗 什么是看门狗为什么需要看门狗&#xff1f;STM32CubeMX配置和应用示例独立看门狗&#xff08;IWDG&#xff09;窗口看门狗&#xff08;WWDG&#xff09; 注意事项 什么是看门狗 单片机STM32的看门狗&#xff08;Watchdog&#xff09;是一种硬件定时器&#…

PRL:城大团队提出新型量子理论

光子盒研究院 近期&#xff0c;由香港城市大学&#xff08;城大&#xff09;物理学家领导的团队开发了一个新的量子理论&#xff0c;解释了物质的“光诱导阶段(light-induced phase)”&#xff0c;并预测了它的新功能。 3月初&#xff0c;研究成果以Multidimensional Coherent …

基于Arduino UNO的智能摇头避障小车

目录 1.首先介绍两个基本函数 2.L298N控制逻辑 3.让小车实现前后左右轮子动代码示例 4.串口介绍 5.跟随小车开发 6.摇头避障小车开发 7.实物展示 1.首先介绍两个基本函数 void setup() { // put your setup code here, to run once: 把你的设置代码放在这里&#xff0…

创建项目并精细化配置【Vue3】

创建项目并精细化配置 git管理项目 基于 create-vue 创建出来的项目默认没有初始化git仓库&#xff0c;需要我们手动初始化 执行命令并完成首次提交 git initgit addgit commit -m “init” 什么是别名路径联想提示 在编写代码的过程中&#xff0c;一旦输入 /&#xff0c;V…

【数据分享】1929-2022年全球站点的逐日平均露点数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

【零基础入门学习Python---Python函数和模块】

&#x1f680; Python &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

protoBuf

序列化和反序列化 链接 序列化的对象是什么 程序对象 对象序列化之后是什么 字节流 protocol buffer 链接 教程 原文链接 Protocol Buffer 的作用 通过将结构化的数据&#xff08;拥有多种属性&#xff09;进行序列化&#xff0c;从而实现&#xff08;内存与硬盘之间…

探索MediaPipe检测人脸关键点

MediaPipe是Google开源的计算机视觉处理框架&#xff0c;基于TensorFlow来训练模型&#xff0c;支持人脸识别、人脸关键点、物体检测追踪、图像分类、人像分割、手势识别、文本分类、语音分类等。我们可以使用CPU来推理&#xff0c;也可以选择GPU加速推理。在滤镜特效场景&…

【软考网络管理员】2023年软考网管初级常见知识考点(17)-数据加密与签名摘要

涉及知识点 对称加密&#xff0c;非对称加密&#xff0c;数字签名&#xff0c;报文摘要&#xff0c;数字证书 软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 文章目录 涉及知识点前言一、对称加密技术1.DES2.3DES3.IDEA4.AES5…

系统架构的精髓:18个必懂的设计概念一览

要想在系统设计领域中脱颖而出&#xff0c;深入理解一些基础的系统设计概念是必不可少的&#xff0c;这些概念包括负载均衡、缓存、分区、复制、数据库和代理等。 依据我自己的经验&#xff0c;我总结出了18个关键概念&#xff0c;如果能掌握这些&#xff0c;将极大地提升你处…

Android APT 系列 (二):APT 筑基之注解

注解介绍 元数据 元数据就是为其他数据提供信息的数据 注解 官方解释&#xff1a;注解用于为代码提供元数据。作为元数据&#xff0c;注解不直接影响你的代码执行&#xff0c;但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 JDK 1.5 开始添加到 Java 的。 简单…

建议收藏:OpenKruise入门与实践

简介 OpenKruise 是一个基于 Kubernetes 的扩展套件&#xff0c;主要聚焦于云原生应用的自动化&#xff0c;比如部署、发布、运维以及可用性防护。 OpenKruise 提供的绝大部分能力都是基于 CRD 扩展来定义&#xff0c;它们不存在于任何外部依赖&#xff0c;可以运行在任意纯净的…

css 背景颜色级别高于背景图

<div class"bg-parent"> <img :src"employeeImg" class"bg-url" /> <div class"bg"> <el-icon class"plus-icon"> <Plus /> </el-icon> </div> </div> .bg-parent{ //父级…

Web服务器群集:Nginx之Rewrite重写

目录 一、理论 1.Nginx正则表达式 2.location匹配 3.rewrite重写 二、实验 1.基于域名的跳转 2.基于客户端 IP访问跳转 3.基于旧域名跳转到新域名后面加目录 4.基于参数匹配的跳转 5.基于目录下所有 php结尾的文件跳转 6.基于最普通一条url请求的跳转 三、总结 一、…

福昕Foxit PDF远程代码执行漏洞CVE-2023-27363分析与复现

漏洞概述 福建福昕软件开发股份有限公司是一家国际化运营的PDF电子文档解决方案提供厂商&#xff0c;提供文档的生成、转换、显示、编辑、搜索、打印、存储、签章、表单、保护、安全分发管理等涵盖文档生命周期的产品技术与解决方案。其下产品Foxit PDF Reader和Foxit PDF Edit…