当前位置: 首页 > news >正文

【ArcGIS Pro二次开发】(67):处理面要素空洞

这个一个简单的小功能。

有些面要素可能会存在空洞,这个工具的目的就是获取面要素的空洞,或者去除空洞获取要素的边界。

这个功能其实在之前做拓扑功能的时候就已经有了,这次只是单独把它提取出来。因为有时候会单独用到这个功能。


一、要实现的功能

 

如上图所示,在待处理的要素上右键单击,在弹出的右键列表中,点击【CC工具箱——处理要素空洞】按钮即可。

在弹出的工具框中,分别输入参数:

1、获取空洞,及获取要素边界。可多选

根据所选的处理模式,空洞和边界要素:


二、实现流程

工具其实就是调用了几个arcpy工具,组合一下即可。

这是主方法:

// 获取面空洞【输出模式:空洞 | 外边界】
public static void GetCave(string in_featureClass, string out_featureClass, string model = "空洞")
{// 获取默认数据库var gdb = Project.Current.DefaultGeodatabasePath;// 融合要素Arcpy.Dissolve(in_featureClass, gdb + @"\dissolve_fc");// 面转线Arcpy.PolygonToLine(gdb + @"\dissolve_fc", gdb + @"\dissolve_line");// 要素转面Arcpy.FeatureToPolygon(gdb + @"\dissolve_line", gdb + @"\dissolve_polygon");// 再融合,获取边界Arcpy.Dissolve(gdb + @"\dissolve_polygon", gdb + @"\dissolve_fin");// 擦除,获取空洞Arcpy.Erase(gdb + @"\dissolve_fin", gdb + @"\dissolve_fc", gdb + @"\single_fc");// 单部件转多部件,输出if (model == @"空洞"){Arcpy.MultipartToSinglepart(gdb + @"\single_fc", out_featureClass);}else if (model == @"外边界"){Arcpy.MultipartToSinglepart(gdb + @"\dissolve_fin", out_featureClass);}// 删除中间要素List<string> list_fc = new List<string>() { "dissolve_fc", "dissolve_line", "dissolve_polygon", "dissolve_fin", "single_fc" };foreach (var fc in list_fc){Arcpy.Delect(gdb + @"\" + fc);}
}

调用一下即可:

// 获取默认数据库
var gdb = Project.Current.DefaultGeodatabasePath;
string output_extent = gdb + @"\处理结果_边界";
string output_cave = gdb + @"\处理结果_空洞";
// 获取输出模式
bool extent = (bool)check_getExtent.IsChecked;
bool cave = (bool)check_getCave.IsChecked;await QueuedTask.Run(() =>
{if (extent)   // 获取边界{ToolManager.GetCave(ly.Name, output_extent, "外边界");ToolManager.AddFeatureLayerToMap(output_extent);}if (cave)   // 获取空洞{ToolManager.GetCave(ly.Name, output_cave);ToolManager.AddFeatureLayerToMap(output_cave);}
});

三、工具文件分享

我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:

【ArcGIS Pro二次开发】:CC工具箱icon-default.png?t=N7T8https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

http://www.lryc.cn/news/165549.html

相关文章:

  • FPGA-结合协议时序实现UART收发器(一):UART协议、架构规划、框图
  • web请求cookie中expires总结
  • 如何学习Java核心知识
  • 【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?
  • 数据结构——看完这篇保证你学会队列
  • 开源免费缺陷管理工具:对比6款
  • Weblogic反序列化漏洞
  • element-ui el-table 滚动到底部,进行加载下一页
  • 线性代数的学习和整理19,特征值,特征向量,以及引入的正交化矩阵概念(草稿)
  • 初步了解android如何锁键
  • 行业追踪,2023-09-13
  • $nextTick和setTimeout区别(宏任务微任务)
  • Linux内核及可加载内核模块编程
  • 软件设计师_备考笔记
  • Java学习笔记------抽象类和抽象方法
  • 毕业设计选题指南-25个优质选题
  • React使用useImperativeHandle实现父组件触发子组件事件
  • 【PowerQuery】Excel的PowerQuery的复制
  • 这个制作企业期刊的神器我怎么没早点发现
  • 核心实验18_ospf高级_ENSP
  • 【python零基础入门学习】python基础篇之系统模块调用shell命令执行(四)
  • 用python实现基本数据结构【01/4】
  • Ubuntu22.04 install Kafka
  • 实现JSONP请求
  • 如何将安防视频监控系统/视频云存储EasyCVR平台推流到公网直播间?
  • 使用内网负载机(Linux)执行Jmeter性能测试
  • Web自动化测试进阶 —— Selenium模拟鼠标操作
  • Python之函数
  • 泛型工具类型和操作符
  • idea中启动maven项目报错-java: 程序包lombok.extern.slf4j不存在问题如何解决