4. 线数据清洗实战
线数据在环境空间数据中承担着“连接”与“传导”的角色:河流把污染物从上游带到下游,道路把泄漏物扩散到路网,排污管线把厂区与受纳水体连成一条完整的污染路径。与点数据相比,线数据的几何问题更隐蔽——一条看似连续的河流,可能在交汇处断开;一条方向相反的排污管线,会让下游分析得出完全颠倒的结论。本节围绕河流、道路、排污管线三类典型线数据,讲清楚线段打断与合并、悬挂节点检查、方向一致性处理、重复线删除与几何有效性修复这五项核心操作,并给出可复现的处理思路与判断依据。
先明确“线”在环境数据中的语义约定
线数据清洗不是单纯的几何修整,而是让几何与业务语义对齐。以河流为例,一条河流通常被表达为若干条河段(reach),相邻河段在汇流点处共享端点;排污管线则以管段为单位,方向定义为“从排放口流向受纳水体”。本节统一约定:河流与排污管线的方向均以水流方向为正方向,即从上游指向下游、从排放源指向受纳对象;道路不强调方向,但要求拓扑连通。这个约定会贯穿后续的方向一致性处理与图示,切换参照系时必须显式说明。
另一个需要提前确定的是容差。线数据的打断、合并、悬挂节点判定都依赖容差:坐标在容差范围内视为重合。环境数据常见的投影坐标系(如 CGCS2000 高斯投影)下,建议平面容差取 0.5~1 m,用于捕捉数字化误差;而拓扑容差可略大,取 1~2 m,用于判定端点是否相接。容差过小会漏掉本应相连的节点,过大则会把邻近但不相交的河流误判为连通,造成污染溯源时的“假汇流”。
线段打断与合并:让几何粒度与业务粒度一致
打断(Split)解决的是“一条线承载了多个语义”的问题。典型场景是:一条河流线跨越了两个水质监测断面,但属性表只记录了一个水质类别;或者一条排污管线在厂界处应分为厂内段与厂外段,以便分别归属责任主体。打断的输入是线要素与打断点(或打断线),输出是若干条首尾相接的新线段,原属性按规则复制或按位置赋值。
合并(Merge/Dissolve)解决的是相反的问题:同一河流被数字化成多段、属性一致,需要还原为一条完整河流用于长度统计或连通性分析。合并的关键不是简单地把几何拼起来,而是按共同属性字段分组后合并,例如按“河流编码”分组,避免把不同河流误合并。合并后应检查节点数是否减少、总长度是否守恒(允许容差内的微小变化),以此判断合并是否丢失了折点。
实际处理顺序建议先打断后合并:先按断面、行政边界、汇流点打断,保证每条线段语义单一;再对属性相同且首尾相接的线段合并,减少冗余节点。若顺序颠倒,合并会把本应保留的打断点抹掉,后续再打断就得重新定位。
悬挂节点检查:找出“看起来连着、其实没连”的断头
悬挂节点(dangling node)是指只被一条线共享的端点,通俗说就是“断头线”。在河流网络中,悬挂节点可能出现在三种位置:真实的河源(合理悬挂)、数字化遗漏导致的断口(错误悬挂)、以及本应相交却因容差不足而未捕捉的伪相交。清洗时要区分这三类,不能一律删除或一律延伸。
判断方法可以分三步走。第一步做拓扑检查,统计每个端点的关联线数,关联数为 1 的即为候选悬挂点。第二步叠加业务参照,例如把候选悬挂点与河源点图层、行政区边界、监测断面比对:落在河源附近的视为合理悬挂,保留;落在两条河流本应交汇处却断开的,视为错误悬挂。第三步对错误悬挂做捕捉或延伸,捕捉容差取前述 1~2 m,延伸时限制延伸长度不超过容差的两倍,避免把断头线“拉”到无关河流上。对排污管线,悬挂节点往往意味着管段缺失,应回到原始竣工资料核对,而不是靠几何延伸“补”出来。
方向一致性处理:让“上游”真的在上游
方向是线数据最容易被忽视、后果却最严重的属性。污染溯源、事故影响范围推演、纳污能力计算都依赖“从哪来、到哪去”。方向一致性处理的目标是:同一水系内所有河段的方向都指向下游,所有排污管线的方向都指向受纳水体。
具体做法分两步。第一步是建立方向参照:对河流,可用已知的干流方向或高程递减方向作为基准,逐段比较起点与终点的高程(或与下游汇流点的距离),高程高的一端为起点。对排污管线,以排放口为起点、受纳水体接入点为终点。第二步是批量翻转:对方向相反的要素执行几何反转(Reverse),同时注意属性表中若有“起止点编号”“上游断面”“下游断面”等字段,必须同步交换,否则几何与属性会互相矛盾。这一步最容易出错——只翻几何不翻属性,后续按属性做汇流统计时会出现“下游断面在上游”的荒谬结果。
判断方向是否处理到位,可以用一个简单检验:沿水流方向累加各河段长度,若某条支流的终点恰好落在干流某河段的中部,则该支流方向应指向这个交点,且干流在该点之后的河段应位于支流汇入点的下游。这个检验不需要复杂工具,在属性表里核对起止点坐标即可完成。
重复线删除与几何有效性修复
重复线在环境数据中很常见:不同部门各自数字化同一段排污管线,叠加后形成完全重合或部分重合的两条线。重复线会导致长度重复统计、污染负荷重复计算。删除策略应基于“完全重合”与“部分重合”分别处理:完全重合(坐标在容差内一致)的保留属性更完整的一条;部分重合的先用打断把重合段分离出来,再删除重合段、保留非重合段,最后重新合并,避免误删有效部分。
几何有效性修复针对自相交、零长度线段、重复折点、悬挂的极小线段等问题。自相交的河流线在拓扑分析时会被判为无效,导致连通性计算失败;零长度线段会让方向判断失去意义。修复顺序建议为:先删除零长度与重复折点,再处理自相交(在交点处打断并重新连接),最后做一次有效性校验。校验通过的标准是:几何类型正确、无自相交、节点数与折点数合理、总长度与修复前差异在容差范围内。
一份可直接执行的处理检查表
把上述操作串成可复用的检查流程,比零散地记步骤更实用。下表给出面向河流与排污管线的检查项、判断依据与处理动作,可作为清洗作业的自检清单。
| 检查项 | 判断依据 | 处理动作 |
|---|---|---|
| 线段粒度 | 一条线跨越断面、行政边界或厂界,属性无法唯一赋值 | 在断面/边界处打断,按位置复制或赋值属性 |
| 冗余分段 | 相邻线段属性相同且首尾相接 | 按河流编码等业务字段分组合并,校验总长度守恒 |
| 悬挂节点 | 端点关联线数为 1 | 区分河源(保留)与断口(捕捉或延伸,延伸≤2倍容差) |
| 方向一致性 | 起点高程低于终点,或管线起点非排放口 | 几何反转,同步交换起止点相关属性字段 |
| 重复线 | 两线坐标在容差内重合 | 完全重合保留属性完整者;部分重合先打断再删重合段 |
| 几何有效性 | 存在自相交、零长度线段、重复折点 | 删零长度与重复折点,交点处打断重连,再做有效性校验 |
完成上述处理后,建议做一次整体验收:统计清洗前后的要素数、总长度、悬挂节点数、方向异常数,四项指标应呈现“要素数因合并减少、总长度基本守恒、悬挂节点仅剩合理河源、方向异常归零”的合理变化。若总长度明显缩短,多半是合并时丢了折点或误删了部分重合段;若悬挂节点数不降反升,则要检查捕捉容差是否设置过小。把这些指标与清洗日志一并留存,线数据才算真正达到了可用于污染溯源与汇流分析的质量水平。