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


    这个一个简单的小功能。

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

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


    一、要实现的功能

     

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

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

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

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


    二、实现流程

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

    这是主方法:

    1. // 获取面空洞【输出模式:空洞 | 外边界】
    2. public static void GetCave(string in_featureClass, string out_featureClass, string model = "空洞")
    3. {
    4. // 获取默认数据库
    5. var gdb = Project.Current.DefaultGeodatabasePath;
    6. // 融合要素
    7. Arcpy.Dissolve(in_featureClass, gdb + @"\dissolve_fc");
    8. // 面转线
    9. Arcpy.PolygonToLine(gdb + @"\dissolve_fc", gdb + @"\dissolve_line");
    10. // 要素转面
    11. Arcpy.FeatureToPolygon(gdb + @"\dissolve_line", gdb + @"\dissolve_polygon");
    12. // 再融合,获取边界
    13. Arcpy.Dissolve(gdb + @"\dissolve_polygon", gdb + @"\dissolve_fin");
    14. // 擦除,获取空洞
    15. Arcpy.Erase(gdb + @"\dissolve_fin", gdb + @"\dissolve_fc", gdb + @"\single_fc");
    16. // 单部件转多部件,输出
    17. if (model == @"空洞")
    18. {
    19. Arcpy.MultipartToSinglepart(gdb + @"\single_fc", out_featureClass);
    20. }
    21. else if (model == @"外边界")
    22. {
    23. Arcpy.MultipartToSinglepart(gdb + @"\dissolve_fin", out_featureClass);
    24. }
    25. // 删除中间要素
    26. List<string> list_fc = new List<string>() { "dissolve_fc", "dissolve_line", "dissolve_polygon", "dissolve_fin", "single_fc" };
    27. foreach (var fc in list_fc)
    28. {
    29. Arcpy.Delect(gdb + @"\" + fc);
    30. }
    31. }

    调用一下即可:

    1. // 获取默认数据库
    2. var gdb = Project.Current.DefaultGeodatabasePath;
    3. string output_extent = gdb + @"\处理结果_边界";
    4. string output_cave = gdb + @"\处理结果_空洞";
    5. // 获取输出模式
    6. bool extent = (bool)check_getExtent.IsChecked;
    7. bool cave = (bool)check_getCave.IsChecked;
    8. await QueuedTask.Run(() =>
    9. {
    10. if (extent) // 获取边界
    11. {
    12. ToolManager.GetCave(ly.Name, output_extent, "外边界");
    13. ToolManager.AddFeatureLayerToMap(output_extent);
    14. }
    15. if (cave) // 获取空洞
    16. {
    17. ToolManager.GetCave(ly.Name, output_cave);
    18. ToolManager.AddFeatureLayerToMap(output_cave);
    19. }
    20. });

    三、工具文件分享

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

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

  • 相关阅读:
    基于Spring Boot和Spring Cloud实现微服务架构学习(一)-Spring框架介绍
    Bridge 模式
    JVM学习(宋红康)之运行时数据区之虚拟机栈中栈帧的动态链接及方法调用
    2023年Vue开发中的8个最佳工具
    安卓基础学习 Day 28|绘制文本、图形与图像
    Web组态可视化编辑器 快速绘制组态
    几种在ARM MCU上控制流水灯的方法
    Windows下网络编程及多线程模型
    线性dp,271. 杨老师的照相排列
    axios 拦截器
  • 原文地址:https://blog.csdn.net/xcc34452366/article/details/132834917