| name | topology-validation |
| description | 拓扑质量检查技能。检测空间数据中的重叠、间隙、自相交等拓扑错误,按严重程度分级并提供修复建议。 |
| metadata | {"domain":"governance","version":"2.0","intent_triggers":"topology, 拓扑, overlap, gap, 重叠, 间隙, 自相交, 几何检查"} |
拓扑质量检查技能
拓扑规则体系
空间数据的拓扑质量直接影响后续分析的可靠性。本技能基于 OGC Simple Features
规范和国土调查质检要求,提供系统化的拓扑错误检测与修复指导。
核心拓扑规则与容差
| 规则类型 | 检测内容 | 默认容差 | 严重程度 |
|---|
| 重叠检测 | 相邻面要素交叠区域 | 0.001 m² | error |
| 间隙检测 | 相邻面要素之间的缝隙 | 0.001 m | error |
| 自相交检测 | 几何环自身交叉(蝴蝶结) | 无容差 | error |
| 微小图斑 | 面积极小的碎片面 | < 0.1 m² | warning |
| 尖角检测 | 极窄的三角形碎片 | 角度 < 1° | warning |
| 重复要素 | 完全相同的几何体 | 精确匹配 | info |
按几何类型的检查策略
面要素(Polygon)
面要素是拓扑检查的核心对象,需要检测:
- 重叠(Overlap):两个面要素的交集面积超过容差。常见于数据合并、
矢量化边界不一致等场景。检测方法:空间索引加速的两两相交测试。
- 间隙(Gap):相邻面要素之间存在未覆盖区域。在土地利用数据中,
间隙意味着"无主地",通常是数据错误。检测方法:构建全覆盖多边形
与要素并集的差集。
- 自相交(Self-intersection):单个多边形的边界线自身交叉,
形成"蝴蝶结"或"8字形"。这是最严重的几何错误,会导致面积计算
和空间关系判断完全失效。
线要素(LineString)
- 交叉(Crossing):两条线在非端点处相交但未打断
- 悬挂端点(Dangling):线段端点未与其他线段连接
- 伪节点(Pseudo node):仅连接两条线段的冗余节点
点要素(Point)
- 重复点检测:坐标完全相同或距离小于容差的点对
- 孤立点检测:与其他要素无空间关联的离群点
严重程度分级
error — 必须修复。影响数据正确性,如自相交、大面积重叠
warning — 建议修复。可能影响分析精度,如微小图斑、尖角碎片
info — 供参考。不影响分析但可优化,如重复要素、伪节点
修复策略
自相交修复
使用 buffer(0) 技巧:对自相交多边形做零距离缓冲,Shapely 会自动
修复拓扑结构。注意此操作可能改变顶点数量和微小面积。
间隙修复
对间隙区域执行 snap 操作,将边界吸附到最近的相邻要素边界。
吸附容差建议设为数据精度的 2-3 倍(如数据精度 0.01m,容差设 0.03m)。
重叠修复
根据业务规则选择策略:
- 优先级法:保留优先级高的要素,裁剪低优先级要素
- 面积法:重叠区域归属面积较大的要素
- dissolve 法:合并重叠要素为单一要素(适用于同类地物)
微小图斑处理
面积小于阈值的碎片面通常是矢量化误差,可合并到相邻最大面要素中。
标准工作流程
1. describe_geodataframe → 确认几何类型、CRS、要素数量
2. check_topology → 执行全套拓扑规则检查
3. 分析检查报告 → 按严重程度排序,定位问题区域
4. 制定修复方案 → 根据错误类型选择修复策略
5. 修复后复查 → 再次 check_topology 确认问题已解决
常见问题与陷阱
叠加分析产生的碎片
overlay_analysis 操作(intersection、union)经常产生大量微小碎片面
(slivers),这是浮点精度导致的正常现象。建议叠加后立即做碎片清理。
投影变换破坏拓扑
reproject_spatial_data 在坐标转换时可能引入微小的拓扑错误,
特别是从高精度投影转到低精度投影时。建议投影变换后重新检查拓扑。
大数据量性能
拓扑检查的时间复杂度为 O(n²)(两两比较)。当要素数量超过 10,000 时,
应利用空间索引(R-tree)加速,或按区域分块检查。
多部件几何体
MultiPolygon 中的各部件之间不应重叠。检查时需同时检测要素间重叠
和要素内部件间重叠。
可用工具
describe_geodataframe — 数据概览,确认几何类型和 CRS
check_topology — 拓扑规则检查(重叠、间隙、自相交、微小图斑)
reproject_spatial_data — 坐标系转换
create_buffer — 缓冲区分析(辅助间隙检测)