Visualizing Weather Forecasts Through Landscape Imagery
气象如画:通过风景图像可视化天气预报

传统气象站常以原始数字数据形式展示传感器读数。浏览这类仪表盘往往令人感到信息繁杂且压力重重,因为用户需要花费大量精力去定位、解读并有效可视化特定参数。
观看风景图像对人眼而言更为自然。观察风景元素所带来的舒缓效果能减轻压力,且几乎无需费力,从而带来更轻松的视觉体验。
以下方法展示了如何将气象信息编码到风景图像中,实现无数字或极少依赖数字数据的呈现方式。
编码原则
该风景图像展现了林间的一座小屋。图像的水平轴代表24小时时间线,从左侧代表当前时刻的小屋开始,延伸至右侧次日的天气状况。沿垂直轴分布的各种风景元素象征着不同的天气事件和条件。某一事件离当前时刻越远,在图像中就越靠右显示。

风景图像中可编码以下信息:
- 便于时间线导航的时间标记:
- 日出和日落时间
- 正午和午夜
- 天气预报信息:
- 风向和风力
- 温度变化
- 最高和最低温度值
- 云量
- 降水量
- 当前天气状况:
- 温度
- 气压
- 非气象事件:
- 生日
- 节假日
实现方案
图像生成代码采用Python编写,使用Pillow库,并基于OpenWeather提供的数据。该图像专为296x128电子墨水显示屏设计。代码已在Python 3.9版本上测试通过。
| 事件图像 | 描述 |
|---|---|
![]() |
日出 |
![]() |
日落 |
![]() |
云量 |
![]() |
当前时间位置 |
![]() |
午夜 |
![]() |
正午 |
| 南风 | |
| 东风 | |
| 西风 | |
| 北风 | |
![]() |
降雨 |
![]() |
降雪 |
![]() |
高气压 |
![]() |
正常气压 |
![]() |
低气压 |
![]() |
非气象事件:某人的生日。 |
树木越高,表示预期风力越大。森林中若出现多种不同类型的树木,则表示风向为中间方向。
示例
| 景观图片 | 描述 |
|---|---|
![]() |
当前时间为中午左右,预计天气晴朗,伴有少量云。夜间将刮起适度的北风。目前气温正在上升,但日落后将开始下降,在日出前达到最低点。在此期间,风向预计将转为东北风。 |
![]() |
太阳正在升起,今天将是炎热晴朗的一天,伴有轻微的东南风。日落后气温仍将保持高位,风向将转为东风,并在整个傍晚逐渐增强。 |
![]() |
全天及夜间将寒冷多雨。夜间南风将转为西北风。别忘了明天是某人的生日。 |
景观在一天中的变化

运行代码
准备 Linux 环境
./makevenv.sh
source .venv/bin/activate
准备环境 Windows
makevenv.bat
.venv/Scripts/Activate
图像创建测试
在 secrets.py 中使用您的 OpenWeather API 密钥更新 OWM_KEY 变量。
(可选)在 secrets.py 中更改坐标为您所在的位置。
python run_test.py
在“tmp”文件夹中查找生成的图像。
运行服务器
python run_server.py

从浏览器访问服务器页面,即可查看生成的图像数量。
电子墨水模块

硬件设置包括一块ESP32 开发板和一个2.9英寸电子墨水显示模块。目前,该设置仅显示从互联网获取的图像,每15分钟更新一次。目前尚不确定图像生成代码是否可适配 ESP32 上的 MicroPython 环境。
手机

测试过程中会生成多张图像。黑白图像适用于电子墨水模块,而彩色图像则可用于手机主屏幕。对于安卓设备,有一款名为Web Image Widget的应用,可让您创建一个显示互联网图像的小部件。使用时,先从仓库启动服务器脚本,然后添加一个指向其中一张生成图像的小部件即可。















