Easy Python download and plot NEXRAD N0Q compositive reflectivity. Uses RGB high resolution PNG images of North America.
Tested with pytest
, flake8
and mypy
type checking.
python -m pip install -e .
RGB data scaling: NEXRAD N0Q base reflectivity maps.
- Black: No Data
- -32 dBZ .. 90 dBZ
- 0.5 dBZ increment
These data are reduced fidelity RGB images.
We use xarray.DataArray
and plot image by image.
For high-fidelity science data, the lower level data are needed--contact us if interested.
import nexradutils as nq
dat = nq.load('~/data/2015-01-19/nexrad/nexrad2015-01-19T01:15:00.png')
>>> dat
<xarray.DataArray (lat: 540, lon: 1220, color: 3)>
array([[[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255]]], dtype=uint8)
Coordinates:
* lat (lat) float64 23.0 23.05 23.1 23.15 23.2 23.25 23.3 23.35 23.4 ...
* lon (lon) float64 -126.0 -125.9 -125.9 -125.8 -125.8 -125.7 -125.7 ...
* color (color) 'R' 'G' 'B'
Attributes:
filename: ~/data/nexrad2015-01-19T01:15:00.png
wldfn: None
time: 2015-01-19 01:15:00
.lat
and .lon
are vectors of geodetic latitude and longitude respectively, computed based on the .wld
file corresponding to the images.
Get NEXRAD reflectivity data with parallel download:
download-nexrad start stop outdir
example:
download from 2018-01-01 to 2018-01-02 to ~/data/nexrad
:
download-nexrad 2018-01-01T00 2018-01-03T00 ~/data/nexrad
NEXRAD plots are georegistered via Cartopy, which is the replacement for deprecated Basemap
- Plot all data in directory:
plot-nexrad ~/data/nexrad/
- Plot a specific file (subplots if multiple files specified):
plot-nexrad ~/data/nexrad/2018-01-01T12:35:00.png
- Plot via file glob match:
plot-nexrad ~/data/nexrad/ -pat 2018-01-01T12*.png
- Keogram (specify lat or lon and value):
plot-nexrad ~/data/2018-01-01/nexrad/ -keo lat 40
EPSG:4326 coordinates (WGS84) are in .wld
files, which are generally the
same for wide time spans of data. The
.wld format
is like:
0.005 (size of pixel in x direction)
0.0 (rotation of row) (Typically zero)
0.0 (rotation of column) (Typically zero)
-0.005 (size of pixel in y direction)
-126.0 (x coordinate of centre of upper left pixel in map units--here it's WGS84 longitude)
50.0 (y coordinate of centre of upper left pixel in map units--here it's WGS84 latitude)
For initial analysis, the original Nexrad image size of 12200 x 5400 pixels may be too high to complete in a reasonable time. I choose to downsize by a factor of 10, which takes a long time, but is a one-time process.
mkdir orig
cp *.png orig
nice mogrify -scale 10% "*.png"
If you have trouble with this being very slow, try:
MAGICK_TEMPORARY_PATH=/run/shm nice mogrify -scale 10% "*.png"