Solar Dynamics Observatory
First, we download the Kerchunk catalog:
julia
using Downloads
Downloads.download("https://esip-qhub-public.s3-us-west-2.amazonaws.com/noaa/nwm/nwm_reanalysis.json.zst", "nwm_reanalysis.json.zst")
"nwm_reanalysis.json.zst"
This is a compressed file. We can decompress it in memory using the TranscodingStreams.jl
API.
julia
using CodecZstd
write("nwm_reanalysis.json", transcode(ZstdDecompressor, read("nwm_reanalysis.json.zst")))
205497114
We can also open the decompressed catalog directly in Zarr.jl, or any package that sits on top of it. Let's open it in plain Zarr first:
julia
using Zarr
using ZarrDatasets, Rasters, YAXArrays
[ Info: new driver key :zarr, updating backendlist.
We can open in Zarr directly, which gives us a ZarrGroup:
julia
zg = Zarr.zopen("reference://nwm_reanalysis.json")
ZarrGroup at ReferenceStore with 2939545 references
and path
Variables: time elevation qBtmVertRunoff q_lateral qSfcLatRunoff streamflow feature_id velocity latitude qBucket order longitude
or in ZarrDatasets.jl, which accounts for CF conventions:
julia
zd = ZarrDataset("reference://nwm_reanalysis.json")
Dataset:
Group: root
Dimensions
time = 367439
feature_id = 2776738
Variables
time (367439)
Datatype: Dates.DateTime (Int32)
Dimensions: time
Attributes:
units = minutes since 1970-01-01 00:00:00 UTC
NAME = time
long_name = valid output time
_Netcdf4Dimid = 1
standard_name = time
valid_min = 4777980
valid_max = 4862880
elevation (2776738 × 367439)
Datatype: Union{Missing, Float32} (Float32)
Dimensions: feature_id × time
Attributes:
units = meters
coordinates = longitude latitude
long_name = Feature Elevation
_Netcdf4Dimid = 0
standard_name = Elevation
_FillValue = 0.0
qBtmVertRunoff (2776738 × 367439)
Datatype: Union{Missing, Float64} (Float64)
Dimensions: feature_id × time
Attributes:
missing_value = -9999000
coordinates = longitude latitude
units = m3
long_name = Runoff from bottom of soil to bucket
grid_mapping = crs
_Netcdf4Dimid = 0
_FillValue = 0.0
valid_range = Any[0, 20000000]
q_lateral (2776738 × 367439)
Datatype: Union{Missing, Float64} (Float64)
Dimensions: feature_id × time
Attributes:
missing_value = -99990
coordinates = longitude latitude
units = m3 s-1
long_name = Runoff into channel reach
grid_mapping = crs
_Netcdf4Dimid = 0
_FillValue = 0.0
valid_range = Any[0, 500000]
qSfcLatRunoff (2776738 × 367439)
Datatype: Union{Missing, Float64} (Float64)
Dimensions: feature_id × time
Attributes:
missing_value = -999900000
coordinates = longitude latitude
units = m3 s-1
long_name = Runoff from terrain routing
grid_mapping = crs
_Netcdf4Dimid = 0
_FillValue = 0.0
valid_range = Any[0, 2000000000]
streamflow (2776738 × 367439)
Datatype: Union{Missing, Float64} (Float64)
Dimensions: feature_id × time
Attributes:
missing_value = -999900
coordinates = longitude latitude
units = m3 s-1
long_name = River Flow
grid_mapping = crs
_Netcdf4Dimid = 0
_FillValue = 0.0
valid_range = Any[0, 5000000]
feature_id (2776738)
Datatype: Int32 (Int32)
Dimensions: feature_id
Attributes:
cf_role = timeseries_id
long_name = Reach ID
_Netcdf4Dimid = 0
comment = NHDPlusv2 ComIDs within CONUS, arbitrary Reach IDs outside of CONUS
NAME = feature_id
velocity (2776738 × 367439)
Datatype: Union{Missing, Float64} (Float64)
Dimensions: feature_id × time
Attributes:
missing_value = -999900
coordinates = longitude latitude
units = m s-1
long_name = River Velocity
grid_mapping = crs
_Netcdf4Dimid = 0
_FillValue = 0.0
valid_range = Any[0, 5000000]
latitude (2776738)
Datatype: Union{Missing, Float32} (Float32)
Dimensions: feature_id
Attributes:
units = degrees_north
long_name = Feature latitude
_Netcdf4Dimid = 0
standard_name = latitude
_FillValue = 0.0
qBucket (2776738 × 367439)
Datatype: Union{Missing, Float64} (Float64)
Dimensions: feature_id × time
Attributes:
missing_value = -999900000
coordinates = longitude latitude
units = m3 s-1
long_name = Flux from gw bucket
grid_mapping = crs
_Netcdf4Dimid = 0
_FillValue = 0.0
valid_range = Any[0, 2000000000]
order (2776738 × 367439)
Datatype: Union{Missing, Int32} (Int32)
Dimensions: feature_id × time
Attributes:
coordinates = longitude latitude
long_name = Streamflow Order
_Netcdf4Dimid = 0
standard_name = order
_FillValue = 0
longitude (2776738)
Datatype: Union{Missing, Float32} (Float32)
Dimensions: feature_id
Attributes:
units = degrees_east
long_name = Feature longitude
_Netcdf4Dimid = 0
standard_name = longitude
_FillValue = 0.0
Global attributes
TITLE = OUTPUT FROM WRF-Hydro v5.2.0-beta2
code_version = v5.2.0-beta2
stream_order_output = 1
proj4 = +proj=lcc +units=m +a=6370000.0 +b=6370000.0 +lat_1=30.0 +lat_2=60.0 +lat_0=40.0 +lon_0=-97.0 +x_0=0 +y_0=0 +k_0=1.0 +nadgrids=@
cdm_datatype = Station
model_initialization_time = 1979-02-01_00:00:00
model_output_valid_time = 1979-02-01_01:00:00
dev_channelBucket_only = 0
model_configuration = retrospective
featureType = timeSeries
dev_channel_only = 0
Conventions = CF-1.6
model_total_valid_times = 1416
station_dimension = feature_id
dev_NOAH_TIMESTEP = 3600
dev_OVRTSWCRT = 1
_NCProperties = version=2,netcdf=4.7.4,hdf5=1.10.7,
model_output_type = channel_rt
dev = dev_ prefix indicates development/internal meta data
Note the more descriptive display here.
or in YAXArrays.jl,
julia
ya = YAXArrays.open_dataset(...)
And perform random operations Or visualize a subset (show this!!!!)
This page was generated using Literate.jl.