How to get wind tiles for your next wind visualization

1 min

Quick (and open-source) way to build wind visualizations

(thanks to Henry Rodman for the vrt and vsicurl hints below)

Step 1: Find the right GRIB2 file

Browse NOAA’s HRRR model (limited to CONUS, see below for global options) via the ASDI bucket.

File structure:

s3://noaa-hrrr-bdp-pds/hrrr.YYYYMMDD/conus/hrrr.t{HH}z.wrfsfcf{XX}.grib2
  • t{HH}z = model run hour
  • f{XX} = forecast hour (f00 is analysis, f01f48 are 1–48h forecasts)

Example URL for wind at 10m on 2025-05-12 06Z, 4-hour forecast:

https://noaa-hrrr-bdp-pds.s3.amazonaws.com/hrrr.20250512/conus/hrrr.t06z.wrfsfcf04.grib2

Step 2: Understand the wind data

Wind data is split into two bands:

  • U = east-west component (positive = eastward)
  • V = north-south component (positive = northward)

You’ll need both bands for visualization.

Step 3: Create the TiTiler URL

Use vsicurl to let TiTiler access the remote GRIB2 file directly:

https://your-titiler-instance.xyz/cog/preview.png?rescale=-127,128&url=vrt:///vsicurl/https://noaa-hrrr-bdp-pds.s3.amazonaws.com/hrrr.20250512/conus/hrrr.t06z.wrfsfcf04.grib2

Step 4: Extract wind bands

Get the U and V wind components (in this case, bands 10 and 11):

https://your-titiler-instance.xyz/cog/preview.png?rescale=-127,128&url=vrt:///vsicurl/https://noaa-hrrr-bdp-pds.s3.amazonaws.com/hrrr.20250512/conus/hrrr.t06z.wrfsfcf04.grib2?bands=10,11&format=png

This gives you the necessary tiled wind png, ready for visualization. It should look something like this one:

Wind tile example
Wind tile example

Step 5: Visualize with DeckGL

Pass your complete TiTiler URL to the ParticleLayer from WeatherLayers in Deck.GL:

new ParticleLayer({
  id: 'wind-particles',
  image: 'THE_URL_GOES_HERE',
  imageType: 'VECTOR',
  imageUnscale: [-127, 128],
  bounds: [-134.1214, 21.1222, -60.8912, 52.6287],
  clipBounds: [-134.1214, 21.1222, -60.8912, 52.6287],
  // rest of the config
})

The result should look something like this:

What about GFS?

I haven’t tested it yet, but the same approach should work for GFS data (NOAA GFS on AWS) with the only difference being the path structure.