// the find
sakitam-fdd/wind-layer
:flags: :rocket: wind-layer | a openlayers && maptalks && amap && bmap && leaflet && mapbox-gl && maplibre-gl extension like windy.com for weather visualization
wind-layer is a weather visualization library that adds animated wind field (and broader meteorological data) rendering to six different JavaScript mapping libraries: OpenLayers, Mapbox GL, Maplibre GL, Leaflet, Maptalks, Baidu Maps, and Gaode Maps. The 2.x branch drops Canvas-based particle simulation in favor of WebGL shaders for colorization, particles, arrows, and raster layers, with a separate gl-core package that handles the rendering pipeline independently of any specific map SDK. Aimed at GIS developers building weather dashboards or similar geospatial data visualizations.
The architecture is genuinely well-thought-out: gl-core is a map-agnostic WebGL renderer, and each map adapter is a thin wrapper — porting to a new map SDK is mostly plumbing, not shader rewrites. The particle simulation uses a GPU ping-pong feedback texture approach (update.frag.glsl writes new positions, draw.vert.glsl reads them), which is the right way to do this at scale and keeps the CPU out of the hot path. Supporting multiple raster input formats (GeoTIFF, EXIF-encoded grayscale PNGs, multi-channel float PNGs) is practical — real meteorological pipelines produce all of these. The monorepo structure with per-package changelogs and a shared gl-core dependency means you can pull in just the adapter you need without dragging in dead code for six other map libraries.
The README is almost entirely in Chinese, which immediately walls off most of the potential audience; the English documentation is sparse and the VitePress docs site is described as 'still being improved' with no ETA. The 2.x branch drops EPSG:4326 and jsonArray data format support with no migration path — if you're on 1.x and need those, you're stuck, and the upgrade notes are buried in a single README paragraph. The source cache in gl-core (cahce.ts — note the typo) has no obvious eviction strategy documented, which matters when you're feeding in time-series tile data and memory pressure is real. GeoTIFF support requires an externally loaded script via configDeps, and on Safari this breaks silently — acceptable workaround, but the failure mode is bad enough that it deserves a runtime warning, not just a README footnote.