简介:本资源为《河湖健康评估技术导则》SL/T 793—2020的正式发布版本,属于中华人民共和国水利行业标准,面向水利、生态环境、水资源评价领域的科研人员、规划设计人员及高校师生,用于指导河流与湖泊健康状况的系统评估与分级判定。文件共1个PDF,包体约2.36MB,采用标准正文版式,含前言、目次与全文章节,便于查阅与引用。正文从评估原则切入,明确科学性与实用性要求,依次展开技术准备、调查监测、报告编制等流程,并给出水文完整性、化学完整性、形态结构完整性、生物完整性及社会服务功能可持续性五类指标,逐项列出水资源开发利用率、流量过程变异程度、生态流量满足程度、湖库营养状态、岸带植被覆盖度、鱼类保有指数等计算方法与赋分标准,最终按五级划分河湖健康水平。目前已有1290人学习下载,适合用于评估方案编制、指标口径核对与标准条文查阅,也可作为论文写作与项目评审中的规范依据。
1. 从"水质达标"到"生态完整性":SL/T 793-2020 评的是河湖的哪一层状态
河湖长制考核、水生态修复项目验收、流域规划环评,三件事最后都会撞到同一份文件:SL/T 793—2020《河湖健康评估技术导则》。不少人的第一反应是"这不就是水质评价的加强版",翻开表1才发现水质只占化学完整性里的一格,真正拉开差距的是"盆"和"生物"——河流纵向连通指数、岸带人工干扰程度、大型底栖无脊椎动物生物完整性指数,这些指标在传统水质监测月报里几乎不出现。标准2020年6月5日发布、9月5日实施,正文11章加4个附录,中国水利水电科学研究院主编,中国水利水电出版社出版,书号155170·563。它把河湖健康定义为"生态状况良好,且具有可持续的社会服务功能",最终收敛成一个0到100的RHS分值,再映射到五级色带。适用对象是河流(不含入海河口)、湖泊和水库,三类水体的指标组合并不相同,这是动手前必须先分清的第一件事。
2. 指标体系拆解:四层结构、基本指标与 RHS 分级色带
2.1 目标层—准则层—亚准则层—指标层的四层拆法
标准把评估对象拆成四层,这个层级不是为了排版好看,而是直接对应后续的赋分聚合顺序:先算指标层得分,再按亚准则层归类,再算准则层,最后合成目标层RHS。准则层只有两个:生态良好和功能良好。生态良好往下再分"水""盆""生物"三个亚准则层,分别对应水文完整性、形态结构完整性和生物完整性;功能良好下面只有社会服务功能可持续性一个亚准则层。
这个拆法的实际意义在于,任何一个单指标得分都不能直接下结论。比如某条河水质全是Ⅱ类,水质优劣程度拿100分,但如果纵向连通指数是1.2个/100km,这一项直接归零,形态结构完整性这一支就被拖下去了。评估报告里必须按层级展示,而不是只报总分。
2.2 基本指标与备选指标的取舍
标准明确了基本指标为必选、备选指标可结合实际选择,另外允许流域或地区按科学认知、数据获得、评估标准、相对独立四条原则增设自选指标。自选指标最容易踩的坑是内涵重复,比如已经选了"河岸带人工干扰程度",又加一个"岸线硬化率",两者高度相关,加权后会人为放大某一类压力的影响。
三类水体的指标组合差异集中在几处:河流有流量过程变异程度、生态流量满足程度、河流纵向连通指数;湖泊有入湖流量变异程度、最低生态水位满足程度、湖泊连通指数、湖泊面积萎缩比例;水库则用下泄生态基流满足程度和库容淤积损失率。湖泊和水库额外带营养状态、浮游植物密度等指标,河流不做营养状态评价。
| 准则层 | 亚准则层 | 河流 | 湖泊 | 水库 |
|---|---|---|---|---|
| 生态良好 | 水文完整性 | 水资源开发利用率(基本)、流量过程变异程度(备选)、生态流量满足程度(基本) | 水资源开发利用率(基本)、入湖流量变异程度(备选)、最低生态水位满足程度(基本) | 水资源开发利用率(基本)、下泄生态基流满足程度(基本) |
| 生态良好 | 化学完整性 | 水质优劣程度、饮用水水源地水质达标状况(基本);底泥污染状况、水功能区达标率(备选) | 同河流,另加营养状态(基本) | 同河流,另加营养状态(基本) |
| 生态良好 | 形态结构完整性 | 河流纵向连通指数(基本)、岸稳定性与岸带植被覆盖度(备选)、排污口布局合理程度(备选)、岸带人工干扰程度(基本) | 湖泊连通指数(基本)、湖泊面积萎缩比例(备选)、岸稳定性与岸带植被覆盖度(备选) | 库容淤积损失率(备选)、岸稳定性与岸带植被覆盖度(备选) |
| 生态良好 | 生物完整性 | 大型底栖无脊椎动物生物完整性指数(基本)、鱼类保有指数(基本) | 另加浮游植物密度(基本)、浮游动物生物损失指数(备选)、大型水生植物覆盖度(备选) | 同湖泊 |
| 功能良好 | 社会服务功能可持续性 | 公众满意度(基本)、防洪指标(备选)、供水指标(备选) | 同河流 | 同河流 |
提示:表1中同一指标在不同水体下可能是基本也可能是备选,做评估系统时不要用一张全局指标表,要按水体类型分别配置。
2.3 RHS 五级分级与色值约定
分级只有五档,但边界值的归属容易写错:非常健康是 80≤RHS≤100,健康是 60≤RHS<80,亚健康 40≤RHS<60,不健康 20≤RHS<40,病态 0≤RHS<20。颜色和RGB色值在表2中一并给出,成果图直接取用即可。
| 评估分级 | 颜色 | RGB 色值 | 赋分范围(RHS) |
|---|---|---|---|
| 非常健康 | 蓝 | 0,180,255 | 80≤RHS≤100 |
| 健康 | 绿 | 150,200,80 | 60≤RHS<80 |
| 亚健康 | 黄 | 255,255,0 | 40≤RHS<60 |
| 不健康 | 橙 | 255,165,0 | 20≤RHS<40 |
| 病态 | 红 | 255,0,0 | 0≤RHS<20 |
2.4 把指标配置和档位赋分写成代码
指标类别和赋分档位都属于"会反复改"的内容,硬编码在计算函数里,第二年换个流域就得重写。常见做法是抽成配置字典,再加一个按档位取分的通用函数。这里用离散档位法:取已达成的最右档位赋分,低于最低阈值时取最低档赋分。
# 指标配置:按水体类型声明基本/备选,便于评估系统按需组装 INDICATORS = { "river": { "水文完整性": {"水资源开发利用率": "基本", "流量过程变异程度": "备选", "生态流量满足程度": "基本"}, "形态结构完整性": {"河流纵向连通指数": "基本", "河岸带人工干扰程度": "基本", "排污口布局合理程度": "备选"}, }, "lake": { "水文完整性": {"水资源开发利用率": "基本", "入湖流量变异程度": "备选", "最低生态水位满足程度": "基本"}, "形态结构完整性": {"湖泊连通指数": "基本", "湖泊面积萎缩比例": "备选"}, }, } def score_by_table(value, table): """按赋分标准表的离散档位取分。 table: [(阈值, 赋分), ...],阈值升序,例如 [(20,100),(30,80),(40,50)] 低于最小阈值时返回最小阈值对应的赋分。 """ table = sorted(table, key=lambda x: x[0]) if value < table[0][0]: return table[0][1] score = table[0][1] for threshold, s in table: if value >= threshold: score = s return score # 南方水资源开发利用率:≤20→100,30→80,40→50,50→20,≥60→0 print(score_by_table(35.0, [(20, 100), (30, 80), (40, 50), (50, 20), (60, 0)])) # 80INDICATORS按水体类型分层,键名直接对应报告章节,生成目录时不用再映射。score_by_table的关键在value < table[0][0]这个分支,如果漏掉,低值场景会返回字典里最后一档的赋分,把"越好越满分"算成"越好越低分"。表中未给中间档的指标(如水质优劣程度),也可以改成线性插值,但报告里要注明插值规则,否则和审查方的口径对不上。
3. 水文与化学完整性:公式推导与 Python 复算
3.1 水资源开发利用率:南北分区阈值差了整整一倍
水资源开发利用率按 WURI = WS / WR × 100% 计算,WS 是流域地表水供水量,WR 是地表水资源量,单位统一为万 m³。评估年单年计算,评估间隔超过3年时取近3年地表水资源开发利用率的均值。
赋分必须分区:北方包括松花江区、辽河区、海河区、黄河区、淮河区和西北诸河区6个水资源一级区,阈值是 ≤40→100、50→80、67→50、75→20、≥90→0;南方包括长江区、东南诸河区、珠江区和西南诸河区4个水资源一级区,阈值是 ≤20→100、30→80、40→50、50→20、≥60→0。南方60%就已归零,北方要到90%才归零,这个差异在跨流域项目里经常被抄错。
3.2 流量过程变异程度与入湖流量变异程度
流量过程变异程度衡量的是实测月径流量与天然月径流量的平均偏离程度,核心公式是
FDI = √( Σ(m=1..12) [ (q_m − Q_m) / Q ]² )
其中 Q = (1/12) Σ Q_m,q_m 为评估年第 m 月实测月径流量,Q_m 为同月天然月径流量,Q 为天然月径流量年均值,单位均为 m³/s。注意分母是天然序列的均值,不是实测序列的均值,也不是逐月各自为分母。入湖流量变异程度 FLI 公式形式一致,只是把单条河流的月径流量换成所有入湖河流第 m 月的合计值,再除以所有入湖河流天然月径流量年均值。
import numpy as np def fdi(q_obs, q_nat): """流量过程变异程度 FDI,公式(2)(3) q_obs / q_nat: 长度12的月径流量序列,单位 m3/s """ q_obs = np.asarray(q_obs, dtype=float) q_nat = np.asarray(q_nat, dtype=float) if q_obs.shape != (12,) or q_nat.shape != (12,): raise ValueError("输入必须为12个月的月径流量序列") q_bar = q_nat.mean() # 天然月径流量年均值 return float(np.sqrt(np.sum(((q_obs - q_nat) / q_bar) ** 2))) def fli(r_obs_month, r_nat_month): """入湖流量变异程度 FLI,公式(4)~(7) r_obs_month / r_nat_month: 已按月份汇总的所有入湖河流月径流量合计 """ r_obs_month = np.asarray(r_obs_month, dtype=float) r_nat_month = np.asarray(r_nat_month, dtype=float) r_bar = r_nat_month.mean() return float(np.sqrt(np.sum(((r_obs_month - r_nat_month) / r_bar) ** 2)))FDI 的赋分档位是 ≤0.05→100、0.1→75、0.3→50、1.5→25、3.5→10、≥5→0,FLI 完全相同。实务中最容易缺的是天然月径流量序列,通常用流域水文模型还原或借用邻近参证站资料,但报告里必须写明还原方法,不能只给一串数字。
3.3 生态流量、最低生态水位与下泄生态基流
这三项容易混,实际对应三类水体:河流看生态流量满足程度,湖泊看最低生态水位满足程度,水库看下泄生态基流满足程度。
生态流量满足程度要分别算4—9月和10月至次年3月最小日均流量占相应时段多年平均流量的百分比,然后取两者赋分的较低值,而不是取平均。10月至次年3月的档位是 ≥30%→100、20%→80、10%→40、5%→20、<5%→0;4—9月是 ≥50%→100、40%→80、30%→40、10%→20、<10%→0。枯水期要求明显更严,春季的阈值反而宽松,这个反直觉的设计是因为汛期流量基数大、占比天然偏低。
最低生态水位满足程度按滑动平均持续时间判:年内日均水位全程高于最低生态水位给100,出现低于但3日滑动平均不低于给75,7日滑动平均不低于给50,14日给30,30日给10,60日给0。最低生态水位优先取规划或管理文件确定的限值,没有限值时用天然水位资料法、湖泊形态法或生物空间最小需求法推。
def ebfi_score(days_meet, days_total=365, region="south"): """下泄生态基流满足程度,公式(8) days_meet: 评估年水库下泄生态基流满足天数 """ ebfi = days_meet / days_total * 100 if region == "south": table = [(80, 20), (90, 40), (98, 80), (100, 100)] else: table = [(60, 20), (70, 40), (80, 80), (95, 100)] return ebfi, score_by_table(ebfi, table) print(ebfi_score(330, region="south")) # (90.41, 40)南方的档位里 100→100、98→80、90→40、80→20、≤75→0,注意 75 到 80 之间落到最低档;北方 ≥95→100、80→80、70→40、60→20、≤50→0。score_by_table对低于最小阈值的输入返回最小阈值档赋分,正好匹配 ≤75→0 这类表述。
3.4 化学完整性五类指标的统计口径
化学完整性看着简单,拧巴的是统计口径。水质优劣程度按Ⅰ~Ⅲ类水质比例赋分,但"比例"的权重基数不一样:河流按河长统计,湖泊按水面面积统计,水库按蓄水量统计。同一组监测数据,按河长和按面积算出来的Ⅰ~Ⅲ类比例可能相差十几个百分点,报告必须注明基数来源。水质类别判定按 SL 395 执行。
饮用水水源地水质达标状况按 SWR = WDB / WSP × 100% 计算,WDB 是评估年满足饮用水水源地水质标准的供水量,WSP 是集中式饮用水水源地供水总量,都用万 m³。底泥污染状况用底泥污染指数,即底泥中某项污染物浓度占对应标准值的百分比,取值时选超标浓度最高的那项污染物的倍数,标准值参考 GB 15618。水功能区达标率按达标水功能区个数占比评估,且要求全因子评估。湖库营养状态按 SL 395 计算营养状态指数后查表赋分。
| 指标 | 计算口径 | 赋分关键点 |
|---|---|---|
| 水质优劣程度 | 河流按河长、湖泊按面积、水库按蓄水量 | 兼顾Ⅰ~Ⅲ类比例与劣Ⅴ类比例,劣Ⅴ类≥50%直接归零 |
| 饮用水水源地水质达标状况 | WDB / WSP ×100% | 100%→100,95%→80,80%→60,70%→40,60%→20,≤50%→0 |
| 湖库营养状态 | SL 395 营养状态指数 | 指数≤10→100,42→80,50→70,60→50,70→0 |
| 底泥污染状况 | 污染物浓度 / GB 15618 标准值 | 取超标倍数最高项,指数<1→100,>5→0 |
| 水功能区达标率 | 达标个数 / 评估个数 ×100% | 数值直接作为赋分,全因子评估 |
4. 形态结构、生物完整性与调查监测点位布设
4.1 河流纵向连通指数与湖泊连通指数
河流纵向连通指数按单位河长内影响河流连通性的建筑物或设施数量统计,单位是个/100km,有过鱼设施的不在统计范围内。赋分档位是 0→100、0.2→80、0.25→60、0.5→40、1→20、≥1.2→0。做过鱼设施扣除这一条在实操中争议最大,扣不扣要看设施是否常年有效运行,不能只看设计图纸。
湖泊连通指数是加权平均,CIS = Σ(CISn × Qn) / Σ Qn,Qn 是第 n 条环湖河流评估年实测出(入)湖水量,CISn 是该条河流的连通性赋分。单条河流的连通性赋分要按阻隔时间和年出(入)湖水量占多年平均实测年径流量的比例,取两者中最差的状况确定。表14把状况分成顺畅、较顺畅、阻隔、严重阻隔、完全阻隔五档,例如阻隔2个月且水量占比40%左右对应40分,完全阻隔对应0分。
4.2 湖泊面积萎缩比例与库容淤积损失率
湖泊面积萎缩比例 ASI = (1 − AC / AR) × 100%,AC 是评估年湖泊水面面积,AR 是历史参考年湖泊水面面积。历史参考年宜选20世纪50年代与评估年水文频率相近年份,这个"水文频率相近"经常被忽略,直接拿丰水年的老地形图去比枯水年的现状,萎缩比例会被高估。赋分档位是 ≤5%→100、10%→60、20%→30、30%→10、≥40%→0。
库容淤积损失率 VSI = SLC / TCR × 100%,SLC 是截至评估年总淤积损失库容,TCR 是总库容,单位都是万 m³。赋分档位是 ≤10%→100、15%→80、20%→60、30%→40、40%→20、≥50%→0。
def asi_score(a_now, a_ref): """湖泊面积萎缩比例,公式(12)""" asi = (1 - a_now / a_ref) * 100 table = [(5, 100), (10, 60), (20, 30), (30, 10), (40, 0)] return asi, score_by_table(asi, table) def vsi_score(slc, tcr): """库容淤积损失率,公式(13)""" vsi = slc / tcr * 100 table = [(10, 100), (15, 80), (20, 60), (30, 40), (40, 20), (50, 0)] return vsi, score_by_table(vsi, table)两个函数都返回比例和赋分,写报告时把比例一并放进成果表,比只放分数更利于复核。score_by_table在 ASI 超过40% 时返回0,符合 ≥40%→0 的表述。
4.3 岸稳定性五要素与岸带植被覆盖度
河湖(库)岸稳定性 BKSS 是五个要素分值的算术平均:BKSS = (SAS + SCS + SHS + SMS + STS) / 5,分别是岸坡倾角、岸坡植被覆盖度、岸坡高度、基质类别、坡脚冲刷强度。每一项又分稳定、基本稳定、次不稳定、不稳定四档,对应100、75、25、0分。例如岸坡倾角≤15°为稳定,≤30°为基本稳定,≤45°为次不稳定,≤60°为不稳定;基质类别里基岩稳定、岩土基本稳定、黏土次不稳定、非黏土不稳定。五个要素里有任意一项是0分,平均值仍可能超过60分,所以不能只看总分,要把单项分值并列展示。
岸带植被覆盖度评估河湖(库)岸带自然和人工植被垂直投影面积占岸带面积的比例,重点看陆向范围的乔木、灌木、草本。方法有两种:参考点比对赋分法,按所在生态分区参考点的调查数据确定乔木、灌木、草本覆盖度参考值,参考点选定按附录A;以及直接评判赋分法,按表19的档位直接打分。
4.4 大型底栖无脊椎动物生物完整性指数(附录B)
这一项是生物完整性里的核心基本指标,附录B给了完整流程:设参考点和受损点,从备选参数里筛选评估参数,再计算评估参数分值。标准对大型底栖无脊椎动物的界定是生活史全部或大部分时间生活于水体底部、不能通过500μm孔径网筛的无脊椎动物,主要由环节动物、软体动物、线形动物、扁形动物和节肢动物组成。
实操中的困难在参考点数量,附录A给出的参考点确定依据包括受人类活动干扰程度、历史资料、生境条件等,实际项目里往往凑不够合格参考点,这时报告要说明替代方案,而不是硬凑。采样必须过500μm筛,筛网规格不对,整个指数就失去可比性。
4.5 监测点位布设与调查时期
点位布设是评估成果能不能站住脚的前提。河湖(库)岸带先划范围和分区,河流再分段,逐级落到评估河段、监测点位、监测河段、监测断面;湖库按分区设点位。小河和大河的监测断面布置方式不同(图5、图6),大河还要按图9的样方区范围做岸带调查。
| 环节 | 关键要求 | 常见错误 |
|---|---|---|
| 岸带范围与分区 | 先定水域毗连地带范围,再按横向分区(图2、图3) | 直接按管理范围线代替岸带范围 |
| 河流分段 | 按评估河段划分,点位落在监测河段内 | 分段长度不均导致代表性偏差 |
| 监测断面 | 小河、大河分别按图5、图6布置 | 断面数量不足,单断面代表整段 |
| 调查时期 | 按9.4规定的调查监测时期执行 | 只在丰水期采样一次 |
| 代表值确定 | 评估河段及湖库按9.6确定代表值 | 用算术平均代替代表值规则 |
技术准备阶段要形成工作大纲,之后是专项勘察、专项调查、专项监测,最后整理数据编制报告。调查监测方案里如果没有把点位坐标、采样时期、采样方法写清楚,后续复核基本没法做。
5. 赋分权重、报告编制与结果校验
5.1 权重聚合:从指标层到 RHS
单指标赋分算完,接下来是逐级加权。表33给出目标层及准则层的赋分权重,具体取值以标准正文为准,不同流域可按区域特点调整,但权重必须在报告中明示。聚合顺序是:指标层得分 → 亚准则层 → 准则层 → 目标层 RHS。附录D提供了完整的赋分表,D.1 是评估河段健康赋分表,D.2 是河流健康赋分表,D.3、D.4 是湖泊分区与湖泊健康赋分表,D.5、D.6 是水库分区与水库健康赋分表。
def aggregate(scores, weights, template="{:.2f}"): """按权重聚合,scores 与 weights 的键必须一致。 scores: {"水文完整性": 82.0, "化学完整性": 90.0, ...} weights: 同一层级的权重,未归一化时自动归一 """ keys = set(scores) & set(weights) if keys != set(scores): raise KeyError("权重缺失:%s" % (set(scores) - keys)) total_w = sum(weights[k] for k in scores) rhs = sum(scores[k] * weights[k] for k in scores) / total_w return float(template.format(rhs)) print(aggregate({"水文完整性": 82.0, "化学完整性": 90.0, "形态结构完整性": 55.0}, {"水文完整性": 0.3, "化学完整性": 0.35, "形态结构完整性": 0.35})) # 74.55aggregate的容错点在权重缺失时直接抛异常,而不是静默按已匹配部分计算,这一步能挡住大部分"某准则层漏算"的低级错误。归一化处理让权重表可以写成百分数或小数,两种写法都不会算错。
5.2 逐级校验:把附录D赋分表当核对清单
报告编制最容易出问题的地方是各级分数对不上。建议按附录D的顺序反向核对:先确认每个指标层的赋分与计算值一致,再确认亚准则层汇总与指标层加权一致,最后确认 RHS 与准则层加权一致。任何一级差超过0.1分,都要回到原始数据重算,而不是四舍五入抹平。
成果图按图10的样式出,分级色带直接取表2的RGB值。注意分级边界:RHS 等于80时属于"非常健康"(80≤RHS≤100),等于60时属于"健康"(60≤RHS<80),等于40时属于"亚健康",等于20时属于"不健康",只有严格小于20才是"病态"。写分级判断代码时如果用>而不是>=,成果图会把一批满分河段标成绿色而不是蓝色。
注意:公众满意度调查表按附录C执行,调查对象、样本量、发放方式要在报告里写明,否则功能良好这一支的得分会被质疑。
5.3 一个具体技巧:先锁数据版本,再算 RHS
评估周期通常跨年,水位、水质、生物数据来自不同部门,口径和版本经常变。我的做法是在算 RHS 之前先给每个指标绑定一个数据版本号,写进赋分表备注列,格式如SL793-{指标}-{数据年份}-{来源单位}。这样复核时能直接定位到某一条监测记录,也方便下一年度做同口径对比。指标赋分脚本只接受带版本号的输入,缺版本号直接报错退出,把数据治理的活挡在计算之前,比事后解释为什么分数变了要省事得多。
本文还有配套的精品资源,点击获取