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

这个一个简单的小功能。

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

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


一、要实现的功能

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

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

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

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


二、实现流程

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

这是主方法:

cs 复制代码
// 获取面空洞【输出模式:空洞 | 外边界】
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);
    }
}

调用一下即可:

cs 复制代码
// 获取默认数据库
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工具箱https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

相关推荐
新手unity自用笔记12 小时前
项目-坦克大战学习-子弹的移动与销毁
笔记·学习·c#
qinzechen13 小时前
分享几个做题网站------学习网------工具网;
java·c语言·c++·python·c#
yufei-coder16 小时前
C# Windows 窗体开发基础
vscode·microsoft·c#·visual studio
dangoxiba17 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
AitTech17 小时前
深入理解C#中的TimeSpan结构体:创建、访问、计算与格式化
开发语言·数据库·c#
hiyo58520 小时前
C#中虚函数和抽象函数的概念
开发语言·c#
开心工作室_kaic1 天前
基于微信小程序的校园失物招领系统的设计与实现(论文+源码)_kaic
c语言·javascript·数据库·vue.js·c#·旅游·actionscript
时光追逐者1 天前
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
前端·microsoft·开源·c#·.net·layui·.netcore
friklogff1 天前
【C#生态园】打造现代化跨平台应用:深度解析.NET桌面应用工具
开发语言·c#·.net
hiyo5852 天前
C#的面向对象
开发语言·c#