灾害应急的时间窗口是以分钟计的。一场森林火灾发生后,指挥中心要在极短时间内回答几个问题:火往哪个方向蔓延、影响哪些村庄和人口、最近的扑救队伍和水源在哪里、群众往哪条路线撤离。传统做法是把需求丢给 GIS 团队,等数据整理、坐标对齐、图层叠加、出图排版,往往几小时过去了,风向变了、火情也变了。
问题不在数据少,而在“从数据到图”之间那段靠人传话的距离。本文讲的是另一种做法:把空间分析能力封装成可调用的“能力原子”,由 AI 智能体把指挥人员的一句话,翻译成一连串地图操作,结果实时上图。
目录
一、应急出图的老问题
1.1 一次灾情研判的常规链路
1.2 卡点不是没数据,是数据到图太远
二、智能体怎么把“人话”翻成“地图操作”
2.1 四层链路:用户只动嘴
2.2 应急场景里的“能力原子”对照
2.3 代码示例:一个应急研判 Agent 的四段式
三、四个灾种,四种对话
3.1 森林火灾:蔓延圈 + 水源队伍 + 双路线
3.2 洪涝:淹没分级 + 阻断断点 + 水陆双线
3.3 泥石流:沟谷危险带 + 阻断 + 绕行通道
3.4 电子围栏:红橙蓝管控 + 巡查派单
四、和应急 GIS 二次开发的对比
五、边界:智能体不替指挥下结论
一、应急出图的老问题
1.1 一次灾情研判的常规链路
灾时的常规链路是这样走的:监测系统告警 → 业务人员整理上报数据 → 联系 GIS 工程师提需求 → 等待排期 → 导出底图、叠加图层 → 出图汇报。中间还要反复对齐口径:上报的点是 GCJ02 还是 WGS84?缓冲区半径按 5 千米还是 10 千米?影响统计要带人口字段还是设施字段?每多一次沟通,窗口就少一截。
1.2 卡点不是没数据,是数据到图太远
从应急业务的视角看,痛点是成体系的:灾害位置和人口、设施、道路缺少统一空间关联;救援队伍、物资、避难所的位置与能力分散在不同部门系统;灾情的范围和等级缺少统一空间表达;资源、需求、道路与到达时间没法在一张图上综合分析。最终表现出来的,就是影响对象难识别、管控范围难划定、处置对象难落实、路线可达性不明、应急响应滞后。
二、智能体怎么把“人话”翻成“地图操作”
2.1 四层链路:用户只动嘴
整套架构分四层:
交互层是对话输入与地图画布双通道,操作结果实时上图,发现偏差用一句话纠正;意图理解层把中文需求解析成结构化指令,做意图识别、槽位抽取和参数映射;
能力编排层按需组合图层、样式、分析、组件等十余项能力,复杂需求自动拆成多步;
数据与执行层由低代码场景引擎完成图层入库、字段查询、空间计算和数据库访问。每一步工具调用都在对话面板可见,成果可保存为图层资产和场景。
2.2 应急场景里的“能力原子”对照
应急指挥关心的问题,几乎都能对应到一个具体能力。不是模型在“自由发挥”,而是把业务话术映射到注册好的算子上:
应急问题 | 智能体能力 | 底层动作 |
火往哪烧、危险圈多大 | 缓冲区分析 | 以火场/沟谷为中心,按等级生成影响圈 |
影响哪些村、多少人 | 缓冲区覆盖分析 | 叠加乡镇、人口图层,统计覆盖对象与字段汇总 |
队伍、物资离现场多远 | 多条件过滤 + 空间查询 | 圈出半径内队伍、物资、水源、避难所 |
上报点位和底图对不上 | 坐标系转换 | GCJ02 转 WGS84,点位不再漂移 |
风险等级分色呈现 | 分级分类着色 | 按字段值分档,红橙黄蓝映射风险等级 |
哪块区域最危急 | 热力渲染 | 点要素渲染为热力分布,密度一眼看清 |
态势留存、下次接着用 | 场景存档 | 图层集合、视图与配置整体复用 |
2.3 代码示例:一个应急研判 Agent 的四段式
以森林火灾为例,智能体的代码组织方式和前面讲的链路一一对应:run 作为总入口,内部按“感知(取数)—决策(指令→工具序列)—执行(引擎调用)—汇报(结论输出)”四段式展开。关键在 decide 里——模型不是直接生成 SQL 或字段名,而是先调 list_layer_fields 拿到真实字段清单,再据此组装 analyze_buffer 与 filter_layer_data 的参数,从机制上杜绝臆造字段。
class EmergencyAgent: """应急研判智能体:把一句灾情指令翻译成空间操作序列""" def __init__(self, engine): self.engine = engine # 低代码场景引擎 self.plan = [] # 工具调用序列 self.result = {} # —— 感知:取数 —— def perceive(self, event): # event = {type:'fire', lng, lat, wind_dir, radius_km} self.event = event self.resources = self.engine.query_layers( ['team', 'water_source', 'road', 'admin_village']) # —— 决策:自然语言 → 工具调用序列 —— def decide(self, instruction): # 「以火场为中心生成两级影响圈,覆盖统计村镇人口, # 匹配 10km 内可用队伍,疏散路线避开蔓延方向」 self.plan = [ {'tool': 'list_layer_fields', 'args': {'layer': 'admin_village'}}, {'tool': 'analyze_buffer', 'args': {'center': (self.event['lng'], self.event['lat']), 'radii_km': [5, 10], 'save_as': 'fire_zone'}}, {'tool': 'analyze_buffer_coverage', 'args': {'layer': 'fire_zone', 'sum_fields': ['population', 'village_count']}}, {'tool': 'filter_layer_data', 'args': {'layer': 'team', 'conditions': [{'within': 'fire_zone'}, {'eq': 'status', 'value': 'available'}]}} ] # 字段名由 list_layer_fields 返回值约束,不臆造 # —— 执行:逐步上图 —— def act(self): for step in self.plan: fn = getattr(self.engine, step['tool']) self.result[step['tool']] = fn(**step['args']) # —— 汇报:输出可上会的研判结论 —— def report(self): cov = self.result['analyze_buffer_coverage'] teams = self.result['filter_layer_data'] return (f'影响圈覆盖 {cov["village_count"]} 个村、' f'人口 {cov["population"]} 人;' f'10km 内可用队伍 {len(teams)} 支;' f'态势已保存为场景 fire_response。')三、四个灾种,四种对话
3.1 森林火灾:蔓延圈 + 水源队伍 + 双路线
对着对话框说一句“以当前火场为中心生成 5 千米和 10 千米两级影响圈,叠加附近水源和扑救队伍,疏散路线避开预测蔓延方向”,火场边界、橙色预测蔓延区、就近水源点位、两支扑救队伍位置会一并上图;橙色路线连接队伍、水源与火场,绿色路线引导群众向逆风方向撤离。左上角态势卡同步给出火场面积、已部署队伍数和可用水源数。
图1 森林火灾态势
3.2 洪涝:淹没分级 + 阻断断点 + 水陆双线
洪涝场景的指令是“叠加淹没区,按水深分三色,标出道路阻断和可到达的避难所”。蓝色区域按 0.3~0.8 米、0.8~2.0 米、2.0 米以上三级着色,红色断点表示当前不可通行路段,绿色虚线是人员转移路线,青色路线是连接船艇与受困点的水上救援通道;两端避难所标注具体名称,待转移人数、避难所数量在态势卡上实时汇总。
图2 洪涝应急态势
3.3 泥石流:沟谷危险带 + 阻断 + 绕行通道
泥石流的对话更短:“沿沟谷圈出高风险区,标出阻断路段,给一条绕行通道到临时安置点”。
红橙黄三级沟谷风险带沿山势延伸,阻断符号明确不可通行路段,绿色绕行通道避开危险核心区直达临时安置点,就近抢险队伍位置随图定位。高风险沟谷数、阻断点位数、已部署队伍数在左上角一目了然。
图3 泥石流风险研判
3.4 电子围栏:红橙蓝管控 + 巡查派单
灾前和常态化管控阶段,指令是“在重点防护区划红橙蓝三级围栏,把围栏入口异常自动派给就近巡查组”。红色高控区、橙色管控区、蓝色巡查区分层表达,巡查组沿路线覆盖边界,围栏入口告警自动流转到就近力量,发现异常—自动告警—就近派单—处置反馈形成闭环。
图4 电子围栏管控
四、和应急 GIS 二次开发的对比
把传统应急出图流程和智能体模式放在一起看,差异不在某一个功能点,而在整条链路的响应方式:
对比维度 | 传统应急 GIS 出图 | 智能体对话模式 |
灾情到态势 | 告警—提需求—排期—出图 | 对话直出,分钟级上图 |
技术门槛 | 需 GIS 工程师与开发协作 | 指挥、业务人员自然语言即可 |
变更成本 | 风向/水势变了重新排期 | 一句话改半径、范围、统计字段 |
空间算子 | 自行集成缓冲区、路径分析 | 引擎内置缓冲、覆盖、坐标转换等算子 |
成果复用 | 项目内定制,复用成本高 | 图层资产 + 场景存档,随取随用 |
数据接入 | ETL、服务发布、接口对接 | 文件上传解析、对话式 SQL |
适配对象 | 技术部门 | 指挥决策、业务管理、现场处置一线 |
五、边界:智能体不替指挥下结论
需要说清楚的是,对话出图不是让大模型“凭感觉画图”。
工程上有几道兜底:
一是字段语义层,调用前先预取图层字段清单,把业务术语映射到真实字段编码,杜绝模型臆造字段名;
二是渲染与入库解耦,大数据量下预览抽样渲染,统计以后端全量数据为准,口径不丢;
三是前端暂存、显式保存,样式和过滤先在画面上暂存,确认后才入库,改错一句话就撤销;四是遇到多义指令,比如多个同名围栏,智能体会主动询问而不是替用户猜。
换句话说,智能体把“出图”从工程任务变成了对话动作,但“往哪打、撤到哪、先保哪片”,仍然是指挥人员的判断。工具跑得快,判断还得人来下。
灾时最贵的是时间。当出图不再等排期、不再要求 GIS 技能,应急响应就从“先做图再调度”变成“边对话边调度”。专业能力被封装进可编排的场景引擎,由智能体按需调用——这不是能力降级,而是把 GIS 的本事交到指挥一线手里。