ArcGIS道路网拓扑检查

ArcGIS道路网拓扑检查

新建拓扑数据集

​ 新建个人地理数据库“PDB.gdb”,右击新建要素数据集“Topology”,设置要素数据集的坐标系与道路相同,为“GCS_WGS_1984”。

​ 右击要素数据集“Topology”,选择【导入单个要素类】,导入图层“道路”,点击确定,结果如下图所示。
image-20210312222735530

新建拓扑

​ 点击【新建】→【拓扑】,选择参与拓扑的要素为“道路”,设置道路等级为1,并添加拓扑规则

“道路 - 不能有悬挂点”、“道路 - 不能有伪节点”、“道路 - 不能相交”

其余属性保持默认,点击确定新建拓扑,并立即验证,如下图所示。
img

​ 进行拓扑检查的最终结果如下。
img

打开【编辑器】,打开【拓扑】工具条,点击【错误检查器】→【搜索所有规则中的错误】,取消勾选【仅搜索可见范围】,点击确定,可以看到共有2086个错误,如图。
img

修改拓扑错误

​ 全选该类错误,右击选择【合并至最长的要素】,进行批量处理,对于无法合并的要素,则右键【标记为异常】,如图。
img

​ 对于悬挂点,同样全选该类错误,右键选择【修剪】或【延伸】,对于不能进行修剪或延伸的悬挂点,右键选择【标记为异常】,如下图。
img
​ 对于“不能相交”的错误,全选该类错误,右键【分割】,如下图。
img

对于不能分割的要素,则右键【标记为异常】,如下图。
img

验证拓扑

​ 修改完所有错误后,点击【拓扑工具条】→【验证拓扑】,可以看到拓扑中的所有错误均已修改完毕,验证成功,如下图所示。

img
视频教程可以参见https://www.bilibili.com/video/BV1t5411K7ds,喜欢就点个关注吧!!!ღ( ´・ᴗ・` )比心

ArcGIS 中的拓扑规则用于维护地理数据库中要素之间的空间关系,当存在违反这些规则的情况时就会生成拓扑错误。如果你需要批量删除 ArcGIS 拓扑错误,可以按照以下步骤操作: ### 步骤一:检查和验证数据 1. **加载并显示拓扑**:打开包含拓扑的地图文档,并确保当前地图窗口能够看到所有相关的图层。 2. **运行“验证”工具**:通过 `Geoprocessing` 工具箱中的 `Validate Topology` 功能对整个工作区的数据进行一致性检验,找出所有的拓扑违规情况。 ### 步骤二:准备批处理环境 1. **启动Python脚本编写界面**:你可以选择直接在 ArcMap 的 Python 窗口中执行命令行代码片段;也可以创建完整的 .py 文件,在外部环境中调试后再导入到 ArcGIS 内部运行。 2. **引入必要的模块库**:例如 arcpy、os 等常用第三方扩展包可以帮助我们更便捷地访问文件系统资源以及调用 GIS 核心服务APIs. ```python import arcpy # 设置工作路径及初始化变量 workspace = r"C:\path\to\your\data.gdb" topology_name = "YourTopologyName" arcpy.env.workspace = workspace ``` ### 步骤三:编写自动化清理程序 接下来就是核心部分了——利用循环结构遍历每一个发现的问题记录项,并依次对其进行修复(即设置状态为已解决),最后提交更改至中央存储库保存结果: ```python def fix_topology_errors(topo): print("开始修正 {}...".format(topo)) # 获取指定名称下的所有未决问题列表 error_features = [f for f in arcpy.da.SearchCursor( os.path.join(workspace, topo), ["SHAPE@", "*"])] if not error_features: return with arcpy.da.Editor(arcpy.env.workspace) as edit_session: for feature in error_features: oid_field = next((fld.name for fld in arcpy.ListFields(feature[0]) \ if isinstance(fld.type, int)), None) try: cursor = arcpy.UpdateCursor(os.path.join(workspace, topo), where_clause="{} IS NOT NULL".format(oid_field)) row = next(cursor).getObject() while True: prev_oid_value = getattr(row.getValue(), oid_field) # 执行实际更新动作 - 将目标对象标记为"Fixed"(固定值取决于具体业务需求) setattr(row.setValue(prev_oid_value), 'status', 'Fixed') del cursor break except StopIteration: pass fix_topology_errors(topology_name) print('完成!') ``` 请注意上述模板仅供参考用途,在真实项目实施前应当充分测试其稳定性和安全性以防止意外丢失重要信息! 此外值得注意的是,在某些特定场景下或许根本不需要真正意义上的 “删除”,而仅仅是调整标注样式使其不再高亮显示而已 —— 这种方式往往更加高效且风险更低一些。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小凡爱学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值