ArcGisPro脚本工具【2】

您所在的位置:网站首页 gis中拓扑检查出错误后怎么修改 ArcGisPro脚本工具【2】

ArcGisPro脚本工具【2】

2024-07-04 22:07| 来源: 网络整理| 查看: 265

本次Arcpy脚本工具用的是ArcGisPro2.8版本,尽量使用同一版本,其它版本可以参照。

b4b36b05caa54581aaa7425b68f3cc18.png

工具介绍

本工具综合了【面要素】的拓扑检查和几何错误、多部件检查。

在ArcGis中【拓扑检查】比较麻烦,需要用到多个工具,但流程比较固定。为了节约时间和简化流程,所以写了这个工具。

在拓扑检查的基础上,还加入了【几何错误和多部件】的检查。基本上涵盖了面要素的主要错误。大大方便了对【面要素数据】的前期检查。

7959919c1e7c437bbb527fbb95fe0085.png

参数设置

参数只有2个。

1、【输入面要素】——输入要检查的面要素,过滤器里的要素类型设置成【面】。

2、【输出检查结果】——输出一个面要素,作为检查结果查看。

8922126ed8a44a91b2c9e86210e7f4a4.png

bcdff495cbe141bbbe1d1b25e6277a9d.png

脚本编写

代码比较长,检查分为4个部分。

1、拓扑检查_重叠

直接调用系统工具箱的几个拓扑工具,生成重叠结果。

2、空隙

通过线面转换等几个工具,找出空洞部分。

3、多部件

直接计算【!shape.PartCount!】得出结果。

4、几何错误

直接调用系统工具箱的【检查几何】工具。

完整代码如下:

# -*- coding: utf-8 -*- import arcpy import os arcpy.env.overwriteOutput = True input_fc = arcpy.GetParameterAsText(0) # 输入检查面要素 result_fc = arcpy.GetParameterAsText(1) # 输出结果 # 获取文档位置 default_path = os.path.dirname(os.path.dirname(__file__)) top_gdb = default_path + r'\拓扑.gdb' # TOP数据库 memory = r'memory' # 内存位置 # 面要素质检 def PolygonCheck(): arcpy.AddMessage('——————————拓扑检查——————————') # 创建一个空GDB文件 is_exist = os.path.exists(top_gdb) # 判断TOP数据库是否存在 if not is_exist: arcpy.CreateFileGDB_management(default_path, '拓扑') # 创建TOP数据库 # 设置正确的坐标系 cod = arcpy.Describe(input_fc).spatialReference # 新建要素数集 db = arcpy.CreateFeatureDataset_management(top_gdb, 'TOP', cod) # 复制要素 fc = arcpy.Copy_management(input_fc, str(db) + r'\检查要素') # 新建拓扑 top = arcpy.CreateTopology_management(db, 'Topology') # 向拓扑中添加要素 arcpy.AddFeatureClassToTopology_management(top, fc) # 添加拓扑规则【重叠】 arcpy.AddRuleToTopology_management(top, "Must Not Overlap (Area)", fc) # 验证 arcpy.ValidateTopology_management(top) # 输出TOP错误 arcpy.ExportTopologyErrors_management(top, top_gdb, 'Topology') # 检查空隙 cave = top_gdb + r'\cave' Cave(input_fc, cave) arcpy.AddField_management(cave, '错误说明', 'TEXT') arcpy.CalculateField_management(cave, '错误说明', "'存在空隙'") # 合并错误 arcpy.Append_management([top_gdb + r'\Topology_poly'], cave, "NO_TEST") # 重叠错误说明赋值 with arcpy.da.UpdateCursor(cave, ['错误说明']) as cursor: for row in cursor: if row[0] is None: row[0] = r'存在重叠' cursor.updateRow(row) # 检查多部件 arcpy.AddMessage('——————————添加部件数量——————————') field = r'部件数量' arcpy.AddField_management(input_fc, field, "LONG") arcpy.CalculateField_management(input_fc, field, "!shape.PartCount!") is_mul = False with arcpy.da.UpdateCursor(input_fc, ['部件数量']) as cursor: for row in cursor: if row[0] > 1: is_mul = True break cursor.updateRow(row) # 如果有多部件,加个字段标记一下 if is_mul: arcpy.AddField_management(cave, '存在多部件', 'TEXT') # 删除中间字段 arcpy.DeleteField_management(input_fc, ['部件数量']) arcpy.DeleteField_management(cave, ['ORIG_FID']) # 检查几何 geo_er = arcpy.CheckGeometry_management([input_fc], top_gdb + r'\Geo', "ESRI") # 获取表行数 count = int(str(arcpy.GetCount_management(geo_er))) # 如果有几何错误,标记一下 if count > 0: arcpy.AddField_management(cave, '存在几何错误', 'TEXT') # 输出结果 arcpy.Copy_management(cave, result_fc) # 删除中间数据库 arcpy.Delete_management(top_gdb) # 处理带空洞要素 def Cave(input_fc, output_fc): arcpy.AddMessage('——————————处理带空洞要素——————————') # 融合要素 fc = arcpy.Dissolve_management(input_fc, memory + r'\fc') # 面转线 fc_line = arcpy.PolygonToLine_management(fc, memory + r'\fc_line') # 要素转面 fc_polygon = arcpy.FeatureToPolygon_management(fc_line, memory + r'\fc_polygon') # 融合 fc_polygon2 = arcpy.Dissolve_management(fc_polygon, memory + r'\fc_polygon2') # 擦除,获取空洞 cave = arcpy.Erase_analysis(fc_polygon2, fc, memory + r'\cave') # 单部件转多部件 fc_polygon_single = arcpy.MultipartToSinglepart_management(fc_polygon2, top_gdb + r'\fc_polygon_single') cave_single = arcpy.MultipartToSinglepart_management(cave, top_gdb + r'\cave_single') arcpy.AddMessage('——————————输出空洞——————————') arcpy.Copy_management(cave_single, output_fc) # 删除中间要素 arcpy.Delete_management(fc_polygon_single) arcpy.Delete_management(cave_single) if __name__ == '__main__': PolygonCheck()

809b7ef64ee44d0389a16013fe6598c6.png

结果展示

检查结果如下,【重叠和空隙】要素会生成面要素,在字段【错误说明】里有描述说明。如果有【多部件和几何错误】,会添加字段说明:

a42b26e21c144eccbe62578e2c6990d6.png

PS:本工具不会更改原数据,要修改错误需要自行修改。多部件可以用【多部件转单部件】工具处理,几何错误可以用【修复几何】工具处理。

eebc11fde98343baa56e6efe72910e8b.png

 工具下载

最后,贴上工具下载地址:

工具下载:面要素质检https://pan.baidu.com/s/1XakrBfAGd24avXxRO2SdUw?pwd=j28l

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3