2026 年,河流水环境治理正在从“定期取样检测”走向“在线监测与污染源预警”。
过去,水质监管主要依赖人工采样、实验室检测和周期性巡查。这种方式检测结果准确,但存在采样频率有限、结果存在时间延迟、突发污染难以及时发现等问题。
如果某个排水口突然排放异常水体,污染物可能已经沿河流向下游扩散,监管人员才收到检测结果。
随着在线水质传感器、物联网网关、遥感监测和水文模型逐步应用,河流水质治理开始进入新的阶段。
系统可以持续采集 pH、溶解氧、浊度、氨氮、化学需氧量和流速数据,自动识别异常变化,并结合上下游监测点判断污染可能来自哪个区域。
河流水质具有动态变化特征。
降雨、排污、施工、农业面源污染和水流变化,都可能在短时间内影响监测指标。
水质预警系统可以帮助管理部门回答几个问题:
下面用 Python 写一个简化版河流水质异常监测系统。
第一步是定义河流沿线监测点。
每个监测点包含河段位置、上下游顺序和附近排水口信息。
import json
import random
from datetime import datetime
from collections import defaultdict
MONITOR_POINTS = [
{
"point_id": "W001",
"name": "上游生态监测点",
"river_order": 1,
"nearby_source": "生态保护区"
},
{
"point_id": "W002",
"name": "工业园上游点",
"river_order": 2,
"nearby_source": "工业园入口"
},
{
"point_id": "W003",
"name": "工业园下游点",
"river_order": 3,
"nearby_source": "工业排水口"
},
{
"point_id": "W004",
"name": "城市居民区点",
"river_order": 4,
"nearby_source": "城市生活排水区"
}
]监测点需要按照水流方向建立顺序。
只有明确上下游关系,系统才能进一步分析污染传播路径。
第二步是模拟传感器采集结果。
def collect_water_quality_data(point):
record = {
"point_id": point["point_id"],
"name": point["name"],
"river_order": point["river_order"],
"nearby_source": point["nearby_source"],
"ph": round(random.uniform(5.5, 9.5), 2),
"dissolved_oxygen": round(random.uniform(2.0, 10.0), 2),
"turbidity": round(random.uniform(5, 120), 2),
"ammonia_nitrogen": round(random.uniform(0.1, 3.0), 2),
"cod": round(random.uniform(8, 65), 2),
"flow_speed": round(random.uniform(0.2, 2.5), 2),
"collect_time": datetime.now().isoformat()
}
return record真实系统中,水质数据可能来自固定监测站、浮标、无人船和人工补充采样。
多种数据源结合,可以提高异常判断的可靠性。
第三步是根据多个指标计算监测点风险。
以下阈值仅用于程序演示,不代表实际监管标准。
def detect_water_quality_risk(record):
score = 0
issues = []
if record["ph"] < 6 or record["ph"] > 9:
score += 3
issues.append("pH 值偏离常规范围。")
if record["dissolved_oxygen"] < 4:
score += 3
issues.append("溶解氧偏低。")
if record["turbidity"] > 80:
score += 2
issues.append("水体浊度明显升高。")
if record["ammonia_nitrogen"] > 1.5:
score += 4
issues.append("氨氮指标偏高。")
if record["cod"] > 40:
score += 4
issues.append("化学需氧量偏高。")
if score >= 9:
level = "critical"
elif score >= 6:
level = "high"
elif score >= 3:
level = "medium"
elif score > 0:
level = "low"
else:
level = "normal"
return {
"point_id": record["point_id"],
"risk_score": score,
"risk_level": level,
"issues": issues
}单点风险识别可以快速发现异常河段。
但要定位污染来源,还需要比较上下游数据变化。
第四步是按照河流顺序分析指标变化。
def analyze_upstream_downstream_change(records):
sorted_records = sorted(
records,
key=lambda item: item["river_order"]
)
change_results = []
for index in range(1, len(sorted_records)):
upstream = sorted_records[index - 1]
downstream = sorted_records[index]
ammonia_change = (
downstream["ammonia_nitrogen"]
- upstream["ammonia_nitrogen"]
)
cod_change = (
downstream["cod"]
- upstream["cod"]
)
turbidity_change = (
downstream["turbidity"]
- upstream["turbidity"]
)
change_results.append({
"upstream_point": upstream["point_id"],
"downstream_point": downstream["point_id"],
"ammonia_change": round(ammonia_change, 2),
"cod_change": 30549.t.kuaisou.com
"turbidity_change": round(turbidity_change, 2)
})
return change_results如果某项指标在两个相邻监测点之间突然升高,说明污染源可能位于这段河道附近。
第五步是根据上下游变化识别疑似污染区间。
def locate_possible_pollution_source(
change_results,
point_map
):
suspects = []
for item in change_results:
score = 0
reasons = []
if item["ammonia_change"] > 0.8:
score += 4
reasons.append("氨氮在该区间明显升高。")
if item["cod_change"] > 15:
score += 4
reasons.append("化学需氧量在该区间明显升高。")
if item["turbidity_change"] > 35:
score += 2
reasons.append("浊度在该区间明显升高。")
if score == 0:
continue
downstream = point_map[
item["downstream_point"]
]
suspects.append({
"upstream_point": item["upstream_point"],
"downstream_point": item["downstream_point"],
"nearby_source": downstream["nearby_source"],
"suspicion_score": score,
"reasons": 30549.t.kuaisou.com
})
suspects.sort(
key=lambda item: item["suspicion_score"],
reverse=True
)
return suspects污染区间定位并不能直接认定污染责任主体。
它的价值是缩小排查范围,指导监管人员优先检查附近排水口和生产区域。
第六步是根据风险和疑似污染源生成处理建议。
def generate_water_response_plan(
risk_results,
pollution_suspects
):
actions = []
for risk in risk_results:
if risk["risk_level"] == "critical":
actions.append({
"target": risk["point_id"],
"action": "emergency_sampling",
"message": "水质风险严重,建议立即开展人工复核采样。"
})
elif risk["risk_level"] == "high":
actions.append({
"target": risk["point_id"],
"action": "increase_frequency",
"message": "建议提高该监测点的数据采集频率。"
})
for suspect in pollution_suspects[:3]:
actions.append({
"target": suspect["nearby_source"],
"action": "source_inspection",
"message": "该区间存在指标突变,建议检查附近排水口。"
})
if not actions:
actions.append({
"target": "river",
"action": "keep_monitoring",
"message": "当前水质状态整体稳定。"
})
return actions水质预警必须形成业务闭环。
系统发现异常后,还需要联动人工采样、排水口检查和应急监测。
最后生成河流水质预警报告。
def run_river_water_quality_monitor():
records = [
collect_water_quality_data(point)
for point in MONITOR_POINTS
]
risk_results = [
detect_water_quality_risk(record)
for record in records
]
changes = analyze_upstream_downstream_change(
records
)
point_map = {
point["point_id"]: point
for point in MONITOR_POINTS
}
pollution_suspects = locate_possible_pollution_source(
changes,
point_map
)
response_plan = generate_water_response_plan(
risk_results,
pollution_suspects
)
risk_count = defaultdict(int)
for result in risk_results:
risk_count[result["risk_level"]] += 1
report = {
"report_name": "河流水质污染源预警报告",
"monitor_records": records,
"risk_results": risk_results,
"upstream_downstream_changes": changes,
"pollution_suspects": pollution_suspects,
"response_plan": response_plan,
"risk_count": 30523.t.kuaisou.com
"generate_time": datetime.now().isoformat()
}
return report
if __name__ == "__main__":
report = run_river_water_quality_monitor()
print(json.dumps(
report,
ensure_ascii=False,
indent=2
))从这套流程可以看到,河流水环境治理正在从结果检测走向过程预警。
未来,水质系统不会只展示某个监测点是否超标,还会分析上下游变化、污染传播方向和疑似污染区间。
在线监测不会完全替代实验室检测,但可以大幅提升突发异常的发现速度。
谁能把水质传感器、河流拓扑、污染源信息和应急任务结合起来,谁就更容易实现精细化水环境治理。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。