【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文件直接安装。

<think>好的,用户现在问的是ArcGIS具体如何操作腐蚀运算。之前我已经介绍了多种工具,包括ArcGIS的ArcPy部分。现在需要详细展开,给出用户一步步的具体操作指南,而不仅仅是代码片段。 首先,我需要确定用户对ArcGIS的熟悉程度。可能他们更熟悉图形界而不是编程,所以需要先讲桌版的操作步骤,然后再提到ArcPy。之前的回答里提到了arcpy.Buffer_analysis,但用户现在可能需要更详细的指导,包括图形界和脚本两部分。 接下来,要确保步骤清晰,符合用户可见层的结构要求。比如分点说明,使用标题和子步骤,让用户容易跟随。可能需要包括准备数据、使用缓冲区工具、处理结果、拓扑检等步骤。 同时,注意事项也很重要,比如负距离的设定,拓扑错误处理,坐标系选择等。这些在之前的回答里已经提到过,但需要再次强调,因为用户可能直接跳转到这部分。 还要考虑用户可能的错误操作,比如输入的负距离过大导致要素消失,或者没有处理拓扑错误导致结果不准确。因此,注意事项里需要详细说明这些问题,并提供解决方法,比如使用修复几何工具。 另外,用户可能需要批量处理或者自动化,所以ArcPy的部分也要给出完整的脚本示例,而不仅仅是单行代码。要展示如何导入模块、设置工作空间、执行缓冲区和修复几何等步骤,确保代码可以直接复制使用。 最后,检是否符合系统级指令:使用正确的中文,数学公式如果有的话用$...$,独立公式用$$...$$,但这里可能不需要。结构要清晰,分步骤说明,使用加粗和代码块格式,但避免使用Markdown,所以可能需要调整格式,但用户给的示例里用了Markdown,可能需要保持一致性。 总结步骤: 1. 图形界操作:从准备数据开始,打开ArcMap或Pro,添加数据,找到缓冲区工具,设置负距离,处理拓扑错误,保存结果。 2. ArcPy脚本操作:给出完整代码,包括导入arcpy、设置环境、执行缓冲区和修复几何,解释关键参数。 3. 注意事项:负距离的注意事项、拓扑错误处理、坐标系的重要性、结果验证。 需要确保每个步骤详细,用户能够跟着操作,同时语言简洁明了,避免专业术语过多,必要时解释术语。例如,“拓扑错误”可能需要简单解释,让新手用户理解为什么需要修复几何。 可能还需要补充截图建议,但文本中无法添加图片,所以用文字描述菜单位置。例如,在ArcMap中,缓冲区工具的位置可能在不同版本中有所不同,需要指出常见的路径,如地理处理工具箱中的分析工具→邻域分析→缓冲区。 另外,用户可能不知道如何设置负距离,需要明确指出在距离参数中输入负数,并注意单位的选择,确保与数据集的坐标系单位一致,比如米或英尺。 最后,验证结果部分,建议用户缩放检要素是否内缩,属性是否保留,是否有空洞或碎片,这部分帮助用户确认操作成功。</think>以下是ArcGIS中进行SHP文件腐蚀运算(多边形向内收缩)的具体操作步骤,涵盖图形界和脚本两种方法: --- ### **一、图形界操作(ArcMap或ArcGIS Pro)** #### **1. 准备数据** - 打开ArcMap/Pro,加载需要腐蚀的SHP文件(多边形图层)。 - 确保数据为 **投影坐标系**(避免单位混淆,如米、英尺),右键图层属性 → 源 → 检坐标系。 #### **2. 使用缓冲区工具** 1. **打开工具**: - ArcMap:`ArcToolbox → 分析工具 → 邻域分析 → 缓冲区` - ArcGIS Pro:`分析 → 工具 → 缓冲区`(搜索栏输入“缓冲区”) 2. **参数设置**: - 输入要素:选择待腐蚀的SHP文件 - 输出要素:指定保存路径及名称(如`eroded_polygons.shp`) - 距离:输入 **负值**(如 `-10`),并选择单位(需与坐标系单位一致,如“米”) - 侧类型:选择 `OUTSIDE_ONLY`(仅外侧缓冲,即向内收缩) - 融合类型:选择 `NONE`(保留原始边界,避免自动合并) ![参数示例](https://placehold.co/600x400?text=缓冲区参数示例图) 3. **运行工具**:点击“确定”执行操作。 #### **3. 处理结果** - **检腐蚀效果**:放大看多边形是否按负距离向内收缩。 - **修复拓扑错误**(可选): - 使用 `修复几何工具`(ArcToolbox → 数据管理工具 → 要素 → 修复几何),修复收缩后可能产生的孔洞或碎片。 --- ### **二、脚本操作(ArcPy)** 若需批量处理或集成到工作流,可使用Python脚本调用ArcPy工具: ```python import arcpy # 设置工作环境 arcpy.env.workspace = "C:/data" arcpy.env.overwriteOutput = True # 允许覆盖输出文件 # 执行缓冲区腐蚀 input_shp = "polygons.shp" output_shp = "eroded_polygons.shp" buffer_distance = "-10 Meters" # 负距离+单位 arcpy.Buffer_analysis( in_features=input_shp, out_feature_class=output_shp, buffer_distance_or_field=buffer_distance, line_side="OUTSIDE_ONLY", dissolve_option="NONE" ) # 修复几何(可选) arcpy.RepairGeometry_management(output_shp) ``` --- ### **三、注意事项** 1. **负距离限制**: - 腐蚀距离绝对值需小于多边形最小内切圆半径,否则要素可能消失。 - 可通过 `计算几何` 工具估算多边形宽度(字段计算器 → `!shape.extent.width!`)。 2. **拓扑错误处理**: - 收缩后若出现孔洞或断裂,需使用 `修复几何` 或 `拓扑检工具` 清理数据。 3. **坐标系选择**: - 必须在投影坐标系下操作,地理坐标系(如WGS84)会导致距离计算不准确。 4. **结果验证**: - 对比原始与腐蚀后图层,确保属性表字段完整,无数据丢失。 --- ### **四、替代方案(擦除工具)** 若需更精确的腐蚀(如按特定模板形状收缩),可结合 `擦除工具`: 1. 创建腐蚀模板(如圆形、矩形小要素)。 2. 使用 `ArcToolbox → 分析工具 → 叠加分析 → 擦除`,用模板擦除原始多边形边缘。 --- 通过上述方法,可灵活实现SHP文件的腐蚀运算。图形界适合单次操作,ArcPy脚本则适用于自动化批处理任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

规划GIS会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值