使用 Felt API 可视化 NOAA 天气数据的完整教程

作者:API传播员 · 2025-10-19 · 阅读时间:6分钟

温度、风、降水等数据为地图提供了丰富的背景信息。通过可视化这些数据的全球分布,我们不仅能够更好地理解特定位置的天气条件,还可以揭示地球表面现象的整体模式。从跨越海洋的风向模式到热带地区湿润的大气河流,有效的天气数据可视化能够帮助我们更深入地了解地球的动态变化。

美国国家海洋和大气管理局(NOAA)发布了大量关于地球表面动态过程的观测和建模数据。然而,从NOAA网站获取这些数据并将其转化为直观的地图可视化可能会面临一定的挑战。在本文中,我们将展示如何利用 Felt API 来解锁这些数据的潜力


环境准备

在本教程中,我们将使用多个 Python 库来处理和可视化光栅数据,并在 Jupyter Notebook 环境中进行操作。建议使用虚拟环境来安装所需的库,安装方式如下:

pip install 

在 Notebook 中导入以下库:

  • 全球天气预报系统(GFS):该模型提供了包含多种天气和海洋变量的全球数据,分辨率约为 13 公里,预测范围从模型运行开始的 120 小时到 16 天。
  • 高分辨率快速刷新模型(HRRR):这是一个覆盖美国大陆的高分辨率(3 公里)模型,提供 15 分钟间隔的天气变量预测。

这些数据集可以通过 AWS 开放数据注册中心访问:

在本教程中,我们将聚焦于 GFS 模型预测的全球阵风数据。不过,本文介绍的方法同样适用于其他数据集,您可以根据自己的需求进行调整。


数据请求

通过 NOMADS 门户访问数据的一个特点是其短暂性——由于数据量巨大,单个时间点的数据只能在较短的时间窗口内获取。因此,我们需要了解请求 URL 中哪些部分是可变的,并根据需求进行修改。以下是完整的 URL 示例:

https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?dir=%2Fgfs.20230711%2F06%2Fatmos&file=gfs.t06z.pgrb2.0p25.anl&var_GUST=on&all_lev=on&subregion=&toplat=90&leftlon=-180&rightlon=180&lowlat=-90

URL 解析:

  • 基本网址https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl
  • 日期和时间dir=%2Fgfs.20230711%2F06%2Fatmos 表示数据日期为 2023 年 7 月 11 日,时间为 06:00。
  • 变量var_GUST=on 表示请求阵风数据。
  • 范围subregion=&toplat=90&leftlon=-180&rightlon=180&lowlat=-90 表示全球范围。

我们可以使用 urllibrasterioMemoryFile 功能直接读取数据,而无需手动下载:

from urllib.request import urlopen
import rasterio
from rasterio.io import MemoryFile

url = "https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?..."
response = urlopen(url)
with MemoryFile(response.read()) as memfile:
    with memfile.open() as dataset:
        gust_data = dataset.read(1)# 读取第一个波段数据

此时,gust_data 是一个包含阵风速度(单位:米/秒)的 NumPy 数组。


数据可视化

为了更直观地查看数据,我们可以使用 matplotlibimshow 方法绘制阵风数据:

import matplotlib.pyplot as plt

plt.imshow(gust_data, cmap='viridis')
plt.colorbar(label='Wind Gust (m/s)')
plt.show()

绘制的图像展示了全球阵风的分布模式,包括陆地、海洋和地形的影响。


数据转换为颜色显示

为了更好地进行视觉呈现,我们需要将阵风速度数据映射到颜色梯度中。这个过程被称为“颜色映射”。以下是步骤:

  1. 查看数据分布:通过直方图了解数据范围。
  2. 裁剪数据:将高于 35 m/s 的值裁剪为 35。
  3. 归一化处理:将数据映射到 0-1 的范围。
import numpy as np

gust_data = np.clip(gust_data, 0, 35)# 裁剪数据
gust_normalized = gust_data / 35# 归一化

然后,我们可以更新数据的元数据以进行地理引用,并保存为 GeoTIFF 格式。


上传到 Felt 平台

通过 rasterioMemoryFile 功能,我们可以将处理后的数据直接上传到 Felt 平台

from felt import FeltAPI

api = FeltAPI(api_key="your_api_key")
with MemoryFile() as memfile:
    with memfile.open(**updated_metadata) as dataset:
        dataset.write(gust_normalized, 1)
        api.upload_layer(memfile, layer_name="Global Wind Gusts")

上传成功后,您将在 Felt 平台的图层面板中看到“正在处理”的提示,随后即可在地图上查看阵风数据。


数据模式的注释

除了阵风数据,我们还可以使用类似的方法处理其他变量,例如“可降水量”。通过 Felt 的注释功能,我们可以标记数据中的显著模式,例如:

  • 热带辐合带的高密度水分分布。
  • 亚马逊和刚果盆地雨林的蒸散量。

这些注释有助于更好地理解天气数据中的关键特征。


总结

本文展示了如何利用 Felt API 将 NOAA 提供的天气数据转化为直观的地图可视化。通过 Python 工具链,我们能够高效地处理、转换和上传数据,从而实现全球天气模式的可视化。

天气数据的可视化不仅能为研究提供支持,还能为实际应用场景(如农业、灾害管理等)提供重要参考。未来,Felt 平台将进一步优化对天气数据的支持,敬请期待!

原文链接: https://felt.com/blog/visualizing-weather-data-using-the-felt-api