本项目为方案设计阶段,页面中的数字来自需求测算与架构推演,不是上线后的实际运行数据。 已交付项目会单独标注「已交付」。
这个项目难在哪
每个案例的难点都不一样。先把难点说清楚,方案才有意义。
五个气象数据源更新频次完全不同:雷达图 6 分钟、省级预报 1 小时、地方站 5 分钟、预警机构按需推送,但研判要求 10 分钟内出结论
通用降雨阈值直接套到本地,误报率高到没人信,阈值必须按历史数据、地质条件、流域特征区域化标定
预警发布只推一条消息没有意义,值班员需要知道转移路线、集合点、责任人是谁
同一张地图要给县领导、部门负责人、值班员、网格员、公众五种人看,图层权限完全不同
项目背景:一张图要装下整个县的灾害风险
这是一个西南边境县的地质灾害预警项目。县域地处山区,雨季滑坡、泥石流频发,历史上出过人员伤亡。县里要建一张图,把气象、地质、监测、预案四类数据叠在一张地图上,能在灾害发生前给出预警。
需求听起来很标准:实时监测、智能研判、分级预警、预案推送。但真正做方案时会发现,**这四个词每一个都藏着时间问题**。
预警系统的价值不在于「能不能算出来」,而在于「算出来的时候还来不来得及」。一条 30 分钟后才能发出的红色预警,对需要 40 分钟转移群众的村子来说,等于没有。所以这个项目的方案是从**时间预算**倒推的,不是从功能清单正推的。
9 分钟链路:每一环的时间预算怎么分
从气象数据进来到预警发出去,中间要过五个环节。方案给每一环定了硬指标,加起来 9 分钟,留 1 分钟缓冲,卡在「10 分钟内出结论」这个总要求里:
| 处理环节 | 时间要求 | 保障机制 |
|---|---|---|
| 数据接收 | ≤2 分钟 | 双通道冗余 + 断点续传 |
| 格式标准化 | ≤1 分钟 | 自动转换脚本 + 异常告警 |
| 数据融合 | ≤2 分钟 | 流式处理 + 内存计算 |
| 模型研判 | ≤3 分钟 | 异步计算 + 结果缓存 |
| 预警发布 | ≤1 分钟 | 多渠道并行推送 |
这张表看着像排期,实际是**责任划分工具**。哪一环超时,就查哪一环,不用开会吵。上线后如果某次预警慢了 4 分钟,直接看监控就知道是数据接收卡住了还是研判超时。
最耗时的不是算,是等数据
五个数据源的更新频次差了一个数量级:
| 数据源 | 数据类型 | 对接方式 | 更新频次 |
|---|---|---|---|
| 国家气象局 | 雷达图、卫星云图 | API 拉取 | 6 分钟/次 |
| 省级气象部门 | 精细化预报 | API 拉取 | 1 小时/次 |
| 地方气象站 | 实时监测数据 | 物联网直采 | 5 分钟/次 |
| 专业预警机构 | 地质灾害预警 | 订阅推送 | 按需 |
| 应急管理部门 | 预警研判结果 | 消息订阅 | 按需 |
省级精细化预报一小时才更新一次。如果研判逻辑里把它当必要条件,那最快也只能一小时出一次结论。所以方案里做了**数据分级依赖**:地方站的实时雨量是**必需项**,5 分钟就有;雷达图是**加强项**,用来判断降雨云团移动;省级预报是**参考项**,只影响趋势判断,不影响是否触发预警。
预警结论上必须标注「本结论基于截至 X 时 Y 分的数据」。不标的话,用户会以为看到的是当前状态,实际可能是十几分钟前的判断。这一点在复盘时极其重要。
阈值:拍脑袋定的阈值,误报三次就没人信了
预警系统有一个反直觉的特点:**它的失败不是因为漏报,而是因为误报太多**。漏报一次是事故,误报十次之后,整个系统就被当成「狼来了」,真预警也没人动。
所以阈值不能拿一份通用表格套。方案里给的是四级降雨阈值,但明确标注了一句:**必须根据历史数据、地质条件、流域特征做区域化标定**。
| 预警等级 | 短时强降雨(1h) | 过程降雨(24h) | 累计降雨(7d) | 土壤含水率 |
|---|---|---|---|---|
| 红色 | >50mm | >100mm | >200mm | >95% |
| 橙色 | 25–50mm | 50–100mm | 100–200mm | 85–95% |
| 黄色 | 10–25mm | 25–50mm | 50–100mm | 70–85% |
| 蓝色 | <10mm | <25mm | <50mm | 60–70% |
为什么同一个降雨量,在两个村意义完全不同
同样是 1 小时 30mm,在坡度 15 度、植被覆盖好的地方没什么事,在坡度 45 度、表层是松散堆积物的沟谷里就可能启动泥石流。所以单一的降雨阈值必然要么太松要么太紧。
方案里用的是**多因子组合判断**,不是一个降雨数字拍板:
| 降雨等级 | 地形风险 | 监测异常 | 综合预警 |
|---|---|---|---|
| 高 | 高 | 有 | 红色(任一项达红色即触发) |
| 高 | 中 | 有 | 橙色(降雨 + 任一项) |
| 中 | 高 | 无 | 橙色(地形 + 降雨) |
| 中 | 中 | 有 | 黄色(多项中等) |
| 低 | 高 | 无 | 黄色(地形高风险) |
| 低 | 中 | 无 | 蓝色(基础监测) |
矩阵的价值在于**允许单项极值直接升到最高级**。地形风险极高、且已经有监测点位移异常的地方,哪怕雨量只是黄色区间,也应该按红色处置。这类「一票否决」的规则,在真实场景里救过很多人。
阈值要能自己改
方案里还写了一套动态调优机制,逻辑很朴素:
- **误报率超过 20%,阈值上调。** 说明报得太频繁,群众开始不当事了。
- **漏报率超过 10%,阈值下调。** 说明有真事件没报出来,这个优先级最高。
- **每季度做一次评审。** 结合当年雨季的实际情况和专家意见微调。
这里有个必须提前说清的工程问题:**误报和漏报怎么统计**。如果每次预警后没有人回填「实际有没有发生灾害」,那误报率永远算不出来。所以预案里要带一个动作——预警解除后,值班员必须填一条核实记录。没有这条记录,调优机制就是空转。
五类研判模型:不同灾害用不同算法
地质灾害不是一个模型能算完的。方案里按灾害类型分了五类模型,输入参数和输出结果都不一样:
| 模型 | 适用范围 | 输入参数 | 输出 |
|---|---|---|---|
| 滑坡崩塌 | 边坡、崖壁区域 | 降雨 + 地形 + 地质 + 植被 | 风险概率与等级 |
| 泥石流 | 沟谷、汇水区域 | 降雨 + 地形 + 松散物源 | 启动概率与规模 |
| 地面沉降 | 软土、采空区 | 水位 + 荷载 + 历史沉降 | 沉降速率与趋势 |
| 不稳定斜坡 | 人工边坡区域 | 地质 + 降雨 + 震动 | 失稳概率 |
| 综合风险 | 全域评估 | 多源数据融合 | 风险热力图 |
算法层面,物理模型、统计模型、机器学习、深度学习各有位置:
| 算法类型 | 具体算法 | 适用场景 | 局限 |
|---|---|---|---|
| 物理模型 | 极限平衡法、有限元 | 地质条件已知 | 精度高,但参数获取难 |
| 统计模型 | Logistic 回归、层次分析 | 历史数据丰富 | 可解释,但需要样本 |
| 机器学习 | Random Forest、XGBoost | 样本充足 | 精度高,泛化依赖样本质量 |
| 深度学习 | LSTM、GCN | 时空数据融合 | 复杂关系拟合强,可解释性弱 |
这里有一条容易被忽略的判断:**县级项目不要一上来就追深度学习**。县里的历史灾害样本可能只有几十条,训练不出可靠的 LSTM。更务实的做法是先用**物理模型 + 统计阈值**跑起来,把每一次预警的核实结果沉淀成样本,两三年后再谈模型升级。
系统里那些「AI 研判」的标签,如果没有样本支撑,本质上还是阈值判断,只是包装得更贵。
预案不是附件,是预警的一部分
很多预警系统做到最后一步就停了:弹一个红色预警,写一句「请做好防范」。值班员收到之后还得自己翻文件找转移路线、找责任人电话。这几分钟的查找时间,可能就吃掉了整个预警窗口。
所以方案里把预案做成了**结构化数据**,而不是一个 PDF 附件。预案拆成六个要素:
| 预案要素 | 内容 | 关联维度 |
|---|---|---|
| 基本信息 | 名称、编号、版本、适用范围 | 灾害类型、区域 |
| 组织架构 | 指挥体系、职责分工、联系方式 | 部门、角色 |
| 响应流程 | 标准化响应步骤、时限要求 | 预警等级 |
| 资源清单 | 应急物资、设备、队伍 | 区域、地点 |
| 转移路线 | 避险路线、集合点、安置点 | 区域、起点 |
| 知识库 | 历史案例、操作指南、注意事项 | 灾害类型 |
拆成结构化数据之后,预警发布时才能做到**按区域、按等级自动匹配预案**:红色预警触发的是「立即转移」,橙色是「预防性撤离」,黄色只是「加强监测」。同一个村,不同等级对应不同的转移路线和集合点,这些都能在地图上一键调出来。
预案里的责任人电话,是整套系统里最容易过期的数据。人调岗了、号码换了,系统不会自动知道。方案里要求每季度核对一次责任人清单,并且把「最近核对时间」显示在预案页面上——超过 90 天没核对,标黄提醒。
同一张图,五种人看五种东西
一张图最容易被做坏的方式,是给所有人看全部图层。县领导想看全域风险态势,网格员只需要看自己那片的设备,公众只应该看到避险点。图层权限必须按角色切。
| 角色 | 基础地理 | 监控视频 | 设备状态 | 报警事件 | 能耗数据 | 应急预案 |
|---|---|---|---|---|---|---|
| 县级领导 | 完全 | 完全 | 只读 | 完全 | 统计级 | 只读 |
| 部门负责人 | 完全 | 完全 | 完全 | 完全 | 完全 | 编辑 |
| 值班员 | 完全 | 完全 | 完全 | 完全 | 无 | 执行 |
| 网格员与运维 | 完全 | 完全 | 巡检区域 | 无 | 无 | 无 |
| 访客与公众 | 公开区域 | 无 | 无 | 无 | 无 | 无 |
权限按四个维度分别控制,而不是一个开关:**图层可见**(公开/授权/管理)、**数据查看**(只读/详细/完整)、**操作控制**(无/部分/完全)、**数据导出**(禁止/受限/完全)。
分开控制的必要性在于:网格员可以「看到」他巡检区域内的设备状态,但不应该「导出」整个县的设备清单;县领导可以看全部视频,但不需要「操作」云台。如果只做一个「有没有权限」的开关,这些差异全都表达不出来。
另外两条是硬要求:**与统一身份认证对接,组织架构自动同步**(人调岗了权限跟着变,不靠人工维护);**临时授权自动过期**(汛期给某个部门开一个月的高级权限,到期自动收回,不用记着去关)。
几条可以带走的判断
- **预警系统的成败在「信」不在「准」。** 误报率超过 20%,系统就会被当成狼来了,之后真预警也没人动。阈值调优机制比模型精度更重要。
- **从时间预算倒推功能,而不是从功能清单正推。** 先定「几分钟内要出结论」,再决定每个环节能花多久、哪些数据源可以等、哪些必须实时。
- **多源数据的更新频次差异必须显式处理。** 一小时更新一次的预报,不能当成触发预警的必要条件。
- **阈值必须区域化标定,且要有误报与漏报的反馈闭环。** 没有「预警后核实」这个动作,调优机制永远空转。
- **预案要做成结构化数据,不是 PDF 附件。** 预警发出去的那一刻,转移路线和责任人电话就应该在屏幕上。
- **县级项目不要一上来就追深度学习。** 几十条历史样本训练不出可靠模型,先用物理模型加阈值跑起来,用真实核实记录沉淀样本。
用到的技术
这些技术在其他项目里也用过,完整的协议支持清单和已实测规模见技术能力
有类似的项目?
把你的现场情况说清楚就行,不用先写需求文档。我们会告诉你从哪切入最划算、哪些环节其实可以不花钱。