136 lines
6.8 KiB
TeX
136 lines
6.8 KiB
TeX
\chapter{预警可视化大屏系统}
|
||
|
||
本章介绍基于Flask后端和ECharts前端的Web可视化大屏系统的设计、架构和实现。
|
||
|
||
\section{系统需求分析}
|
||
|
||
\subsection{功能需求}
|
||
|
||
高温健康风险预警可视化系统面向政府管理者、社区工作者和公众三类用户,核心功能需求包括:
|
||
|
||
\begin{enumerate}
|
||
\item \textbf{实时温度与风险展示}:以图表形式展示当前及未来数日的温度变化趋势和风险等级预测
|
||
\item \textbf{多时间尺度覆盖}:同时呈现短期(3天)、中期(7天)和长期(30天)三个时间尺度的预警信息
|
||
\item \textbf{人口脆弱性概览}:展示老年人口比例和暴露-反应关系,辅助风险评估
|
||
\item \textbf{历史数据回溯}:支持查看过去90天的温度、体感温度和风险等级历史记录
|
||
\item \textbf{年度统计摘要}:提供各年份的高温天数、平均温度等汇总统计
|
||
\end{enumerate}
|
||
|
||
\subsection{非功能需求}
|
||
|
||
\begin{itemize}
|
||
\item 深色科技蓝风格,符合数据大屏的视觉规范
|
||
\item 页面首次加载时间不超过3秒
|
||
\item 支持1920×1080及以上分辨率显示
|
||
\item 自动刷新数据(30分钟周期),确保大屏长时间运行时信息不过时
|
||
\item 模型不可用时自动降级为默认预测,保证系统可用性
|
||
\end{itemize}
|
||
|
||
\section{系统架构设计}
|
||
|
||
系统采用经典的B/S(Browser/Server)架构,前后端分离:
|
||
|
||
\begin{itemize}
|
||
\item \textbf{后端(Python Flask):}负责数据查询、模型推理(LSTM/XGBoost)、JSON响应封装。启动时延迟加载模型文件,减少初始内存占用
|
||
\item \textbf{前端(HTML5 + CSS3 + JavaScript):}单页架构,使用ECharts 5.5进行图表渲染,通过fetch API异步请求后端数据
|
||
\item \textbf{数据流:}前端定时请求 → Flask路由分发 → 模型推理/数据查询 → JSON序列化 → 前端ECharts渲染
|
||
\end{itemize}
|
||
|
||
系统部署于开发服务器(Flask内置Werkzeug),监听所有网络接口(0.0.0.0:5005),支持局域网内多设备访问。
|
||
|
||
\section{后端API设计}
|
||
|
||
Flask后端提供4个核心RESTful API端点:
|
||
|
||
\subsection{预测接口 GET /api/predict}
|
||
|
||
返回三个时间尺度的风险预测结果。响应JSON结构包含:
|
||
\begin{itemize}
|
||
\item \texttt{city}:当前预测城市(焦作/郑州)
|
||
\item \texttt{date}:预测基准日期
|
||
\item \texttt{predictions}:包含\texttt{short}、\texttt{medium}、\texttt{long}三个子对象
|
||
\item 每个子对象包含:\texttt{level}(风险等级0-3)、\texttt{label}(中文标签)、\texttt{probabilities}(4维概率向量)、\texttt{confidence}(置信度0-1)、\texttt{suggestions}(防护建议字符串列表)、\texttt{color}(CSS颜色码)
|
||
\item \texttt{risk\_population}:估算的风险暴露老年人口数
|
||
\end{itemize}
|
||
|
||
当模型文件不可用时,接口返回基于均匀概率的fallback默认预测。
|
||
|
||
\subsection{历史接口 GET /api/history}
|
||
|
||
返回JSON数组,包含最近90天每日的温度、体感温度、风险等级和热浪标识,供前端趋势图表使用。
|
||
|
||
\subsection{统计接口 GET /api/stats}
|
||
|
||
返回年度汇总JSON,包含各年份平均温度数组、热浪天数数组、最高温度数组,以及焦作(12.8\%)和郑州(11.6\%)的固定老龄化率。
|
||
|
||
\subsection{主页 GET /}
|
||
|
||
返回包含完整前端代码的HTML页面(单文件架构)。
|
||
|
||
\section{前端可视化面板}
|
||
|
||
前端为单HTML文件,使用CSS Grid定义响应式布局,包含六个功能面板:
|
||
|
||
\subsection{面板1:温度变化趋势}
|
||
|
||
双Y轴折线图,蓝色线表示日均气温(temp\_mean)、橙色线表示体感温度(heat\_index)。背景标注三条水平阈值线:绿色虚线(32°C,中风险阈值)、黄色虚线(35°C,高风险阈值)、红色虚线(38°C,严重风险阈值)。X轴为日期,时间跨度90天,底部支持dataZoom缩放。
|
||
|
||
\subsection{面板2:多时间尺度风险展示}
|
||
|
||
三个并列卡片,分别展示短期(3天)、中期(7天)和长期(30天)的风险预测结果。每个卡片包含风险等级大字号中文标签(低风险/中风险/高风险/严重风险)、对应颜色圆点、置信度进度条和具体防护建议。
|
||
|
||
\subsection{面板3:老年人口结构}
|
||
|
||
饼图展示焦作市和郑州市的65岁及以上人口与65岁以下人口的比例,中心文本显示「65岁及以上:XX\%」。数据来源第七次全国人口普查(2020年)。
|
||
|
||
\subsection{面板4:预警时间线}
|
||
|
||
堆叠柱状图,X轴为月份(1-12月),Y轴为天数,不同颜色堆叠表示各风险等级。直观展示夏季(6-8月)高风险天数集中爆发的季节性特征。
|
||
|
||
\subsection{面板5:暴露-反应曲线}
|
||
|
||
折线图展示基于Chen等(2018)文献构建的温度-相对风险(RR)暴露-反应曲线,X轴为日平均温度(°C),Y轴为相对风险。标注最适温度(MMT)参考线(RR=1.0),以及95\%置信区间的上下界。
|
||
|
||
\subsection{面板6:历史数据表格}
|
||
|
||
近7天的每日明细表格,列包括日期、平均温度(°C)、体感温度(°C)、风险等级、热浪标识。支持垂直滚动。
|
||
|
||
\section{前端技术实现}
|
||
|
||
\subsection{配色方案}
|
||
|
||
深色科技蓝主题:
|
||
\begin{itemize}
|
||
\item 页面背景:\texttt{\#0a1632}(深蓝黑)
|
||
\item 面板背景:\texttt{rgba(255, 255, 255, 0.05)}(半透明白色毛玻璃)
|
||
\item 边框:\texttt{rgba(0, 212, 255, 0.15)}(青色低透明度)
|
||
\item 图表强调色:青色\texttt{\#00d4ff}、蓝色\texttt{\#1e90ff}、金色\texttt{\#ffd700}
|
||
\item 风险配色:绿色(低)、黄色(中)、橙色(高)、红色(严重)
|
||
\end{itemize}
|
||
|
||
\subsection{CSS Grid布局}
|
||
|
||
使用CSS Grid定义6个面板区域:
|
||
\begin{verbatim}
|
||
grid-template-areas:
|
||
"temp trend temp risk pop stats"
|
||
"temp history temp timeline curve table"
|
||
\end{verbatim}
|
||
|
||
每个面板使用\texttt{backdrop-filter: blur(10px)}实现背景毛玻璃效果,\texttt{border-radius: 8px}圆角边框,\texttt{padding: 16px}内边距。
|
||
|
||
\subsection{ECharts初始化}
|
||
|
||
所有6个图表通过\texttt{echarts.init()}独立初始化,使用\texttt{option}配置对象的JSON声明式语法进行渲染。全局设置dark背景主题和统一的\texttt{textStyle.color: '\#e0e6ed'}浅色文本。
|
||
|
||
\section{系统运行}
|
||
|
||
启动命令:
|
||
\begin{verbatim}
|
||
python -m src.web.app
|
||
\end{verbatim}
|
||
|
||
启动后在浏览器访问\texttt{http://localhost:5005}即可查看大屏。开发模式(debug=True)支持代码热更新。生产环境建议使用Gunicorn或Waitress作为WSGI服务器。
|
||
|
||
系统当前为原型版本,使用开发服务器运行。未来可扩展方向包括:接入实时气象数据流、增加预警信息自动推送(邮件/短信)、支持多城市切换、添加用户认证和操作日志。
|