This notebook will query the SWOT River Database (SWORD) for river reaches (segments) or nodes (points) and visualize results using PO.DAAC’s Feature Translation Service. We use geospatial coordinates of the queried features (here river reaches along the Kasai River, a tributary of the Congo River in Africa) to then query and download or access via the cloud Pre-SWOT Hydrology data along the specified regions. This is a programmatic approach to using the ‘Advanced Search -> River Reach’ query in the Earthdata Search GUI.
Requirements
1. Compute environment
This tutorial can be run in the following environments: - Local compute environment e.g. laptop, server: this tutorial can be run on your local machine - AWS instance running in us-west-2: NASA Earthdata Cloud data in S3 can be directly accessed via temporary credentials; this access is limited to requests made within the US West (Oregon) (code: us-west-2) AWS region.
2. Earthdata Login
An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up.
Import libraries
import requestsimport jsonimport pprintimport xarray as xrimport geojsonimport matplotlib.pyplot as pltimport contextily as cximport plotly.graph_objects as gofrom IPython.display import JSON, Imageimport earthaccess
Authenticate Earthdata Login via earthaccess
auth = earthaccess.login()
Define a Function to Query Easier
First, we define a function to query a single reach, multiple reaches, or river nodes. This function returns the properties of river reaches including name, length, coordinates as well as individual node properties.
def response_to_FeatureCollection(response):""" This function will return a geojson.FeatureCollection representation of the features found in the provided response. Parameters ---------- response : requests.Response - a Response object returned from a GET request on the rivers or nodes endpoint. Returns ------- geojson.FeatureCollection - FeatureCollection containing all features extracted from the response. """ featureList = []for reach_id, reach_json in response.json()['results'].items(): reach_feature = geojson.loads(json.dumps(reach_json['geojson'])) reach_feature['properties']={k:v for k,v in reach_json.items() if k notin ['geojson', 'geometry']} featureList.append(reach_feature) featureCollection = geojson.FeatureCollection(featureList)return featureCollection
Single River Reach from the SWORD Database
In this section, we query the Feature Translation Service (FTS) SWORD service using a single Reach ID (from SWORD) to give us all of the metadata regarding the particular reach. In this example, we use the river Reach ID 13227000061. This ID represents a specific reach along the Kasai River, a tributary of the Congo River in Africa.
#change the reach ID in the link below for a different location.response_reach = requests.get("https://fts.podaac.earthdata.nasa.gov/rivers/reach/13227000061")featureCollection_reach = response_to_FeatureCollection(response_reach)pprint.pprint(response_reach.json(), compact=True, width=60, depth=2)
Note that we haven’t looked at any data from a collection yet, we’ve simply found the geospatial coordinates of our river reach of interest within the metadata.
Query Data by Coordinates
We can use results obtained from the FTS query to then directly and automatically query data using the earthaccess python library. We will use the coordinate information of a single reach to search for granules (files) available through the SWOT L2 raster files, whose data has the short-name SWOT_L2_HR_Raster_2.0.
#obtain the associated lat/lons for the featurelats = [xy[1] for feature in featureCollection_reach['features'] for xy in feature['coordinates']]lons = [xy[0] for feature in featureCollection_reach['features'] for xy in feature['coordinates']]# find max and min of lat and lon derived when visualizing the reach for the bounding box input to earthaccessmaxlat, maxlon, minlat, minlon =max(lats), max(lons), min(lats), min(lons)
#earthaccess data searchresults = earthaccess.search_data(short_name ='SWOT_L2_HR_Raster_2.0', bounding_box=(minlon,minlat,maxlon,maxlat))
Granules found: 30
Results contains a link to the data file (granule) from the SWOT_L2_HR_RiverSP_2.0 data collection that overlaps the geospatial search from FTS-SWORD for the river reaches of interest, which we can then download or use within the cloud. Earthaccess will return the link required for the environment (https if local and s3 if in the cloud).
Accessing Data in the Cloud (skip this chunk if local)
This code chunk will only work if you are running this script in the cloud, AWS us-west-2 region.
#access data within the cloud and open into an xarray datasetds_SWOT_raster = xr.open_mfdataset(earthaccess.open([results[0]]), engine="h5netcdf")ds_SWOT_raster
PROJCS["WGS 84 / UTM zone 34S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32734"]]
spatial_ref :
PROJCS["WGS 84 / UTM zone 34S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32734"]]
comment :
UTM zone coordinate reference system.
[1 values with dtype=object]
longitude
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
longitude (degrees East)
standard_name :
longitude
grid_mapping :
crs
units :
degrees_east
valid_min :
-180.0
valid_max :
180.0
comment :
Geodetic longitude [-180,180) (east of the Greenwich meridian) of the pixel.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
latitude
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
latitude (positive N, negative S)
standard_name :
latitude
grid_mapping :
crs
units :
degrees_north
valid_min :
-80.0
valid_max :
80.0
comment :
Geodetic latitude [-80,80] (degrees north of equator) of the pixel.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
wse
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
water surface elevation above geoid
grid_mapping :
crs
units :
m
quality_flag :
wse_qual
valid_min :
-1500.0
valid_max :
15000.0
comment :
Water surface elevation of the pixel above the geoid and after using models to subtract the effects of tides (solid_earth_tide, load_tide_fes, pole_tide).
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
wse_qual
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
summary quality indicator for the water surface elevation
standard_name :
status_flag
grid_mapping :
crs
flag_meanings :
good suspect degraded bad
flag_values :
[0 1 2 3]
valid_min :
0
valid_max :
3
comment :
Summary quality indicator for the water surface elevation quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
wse_qual_bitwise
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
bitwise quality indicator for the water surface elevation
Bitwise quality indicator for the water surface elevation quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
wse_uncert
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
uncertainty in the water surface elevation
grid_mapping :
crs
units :
m
valid_min :
0.0
valid_max :
999999.0
comment :
1-sigma uncertainty in the water surface elevation.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
water_area
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
water surface area
grid_mapping :
crs
units :
m^2
quality_flag :
water_area_qual
valid_min :
-2000000.0
valid_max :
2000000000.0
comment :
Surface area of the water pixels.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
water_area_qual
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
summary quality indicator for the water surface area
standard_name :
status_flag
grid_mapping :
crs
flag_meanings :
good suspect degraded bad
flag_values :
[0 1 2 3]
valid_min :
0
valid_max :
3
comment :
Summary quality indicator for the water surface area and water fraction quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
water_area_qual_bitwise
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
bitwise quality indicator for the water surface area
Bitwise quality indicator for the water surface area and water fraction quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
water_area_uncert
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
uncertainty in the water surface area
grid_mapping :
crs
units :
m^2
valid_min :
0.0
valid_max :
2000000000.0
comment :
1-sigma uncertainty in the water surface area.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
water_frac
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
water fraction
grid_mapping :
crs
units :
1
quality_flag :
water_area_qual
valid_min :
-1000.0
valid_max :
10000.0
comment :
Fraction of the pixel that is water.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
water_frac_uncert
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
uncertainty in the water fraction
grid_mapping :
crs
units :
1
valid_min :
0.0
valid_max :
999999.0
comment :
1-sigma uncertainty in the water fraction.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
sig0
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
sigma0
grid_mapping :
crs
units :
1
quality_flag :
sig0_qual
valid_min :
-1000.0
valid_max :
10000000.0
comment :
Normalized radar cross section (sigma0) in real, linear units (not decibels). The value may be negative due to noise subtraction.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
sig0_qual
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
summary quality indicator for the sigma0
standard_name :
status_flag
grid_mapping :
crs
flag_meanings :
good suspect degraded bad
flag_values :
[0 1 2 3]
valid_min :
0
valid_max :
3
comment :
Summary quality indicator for the sigma0 quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.
Bitwise quality indicator for the sigma0 quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
sig0_uncert
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
uncertainty in sigma0
grid_mapping :
crs
units :
1
valid_min :
0.0
valid_max :
1000.0
comment :
1-sigma uncertainty in sigma0. The value is provided in linear units. This value is a one-sigma additive (not multiplicative) uncertainty term, which can be added to or subtracted from sigma0.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
inc
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
incidence angle
grid_mapping :
crs
units :
degrees
valid_min :
0.0
valid_max :
90.0
comment :
Incidence angle.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
cross_track
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
approximate cross-track location
grid_mapping :
crs
units :
m
valid_min :
-75000.0
valid_max :
75000.0
comment :
Approximate cross-track location of the pixel.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
illumination_time
(y, x)
datetime64[ns]
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
time of illumination of each pixel (UTC)
standard_name :
time
tai_utc_difference :
37.0
leap_second :
0000-00-00T00:00:00Z
comment :
Time of measurement in seconds in the UTC time scale since 1 Jan 2000 00:00:00 UTC. [tai_utc_difference] is the difference between TAI and UTC reference time (seconds) for the first measurement of the data set. If a leap second occurs within the data set, the attribute leap_second is set to the UTC time at which the leap second occurs.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
datetime64[ns]
numpy.ndarray
illumination_time_tai
(y, x)
datetime64[ns]
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
time of illumination of each pixel (TAI)
standard_name :
time
comment :
Time of measurement in seconds in the TAI time scale since 1 Jan 2000 00:00:00 TAI. This time scale contains no leap seconds. The difference (in seconds) with time in UTC is given by the attribute [illumination_time:tai_utc_difference].
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
datetime64[ns]
numpy.ndarray
n_wse_pix
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
number of water surface elevation pixels
grid_mapping :
crs
units :
l
valid_min :
0
valid_max :
999999
comment :
Number of pixel cloud samples used in water surface elevation aggregation.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
n_water_area_pix
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
number of water surface area pixels
grid_mapping :
crs
units :
l
valid_min :
0
valid_max :
999999
comment :
Number of pixel cloud samples used in water surface area and water fraction aggregation.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
n_sig0_pix
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
number of sigma0 pixels
grid_mapping :
crs
units :
l
valid_min :
0
valid_max :
999999
comment :
Number of pixel cloud samples used in sigma0 aggregation.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
n_other_pix
(y, x)
float64
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
number of other pixels
grid_mapping :
crs
units :
l
valid_min :
0
valid_max :
999999
comment :
Number of pixel cloud samples used in aggregation of quantities not related to water surface elevation, water surface area, water fraction or sigma0.
Array
Chunk
Bytes
2.71 MB
2.71 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float64
numpy.ndarray
dark_frac
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
fractional area of dark water
grid_mapping :
crs
units :
l
valid_min :
-1000.0
valid_max :
10000.0
comment :
Fraction of pixel water surface area covered by dark water.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
ice_clim_flag
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
climatological ice cover flag
standard_name :
status_flag
source :
UNC
grid_mapping :
crs
flag_meanings :
no_ice_cover uncertain_ice_cover full_ice_cover
flag_values :
[0 1 2]
valid_min :
0
valid_max :
2
comment :
Climatological ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on external climatological information (not the SWOT measurement). Values of 0, 1, and 2 indicate that the pixel is likely not ice covered, may or may not be partially or fully ice covered, and likely fully ice covered, respectively.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
ice_dyn_flag
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
dynamic ice cover flag
standard_name :
status_flag
source :
UNC
grid_mapping :
crs
flag_meanings :
no_ice_cover partial_ice_cover full_ice_cover
flag_values :
[0 1 2]
valid_min :
0
valid_max :
2
comment :
Dynamic ice cover flag indicating whether the surface is ice-covered on the day of the observation based on analysis of external satellite optical data. Values of 0, 1, and 2 indicate that the pixel is not ice covered, partially ice covered, and fully ice covered, respectively.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
layover_impact
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
layover impact
grid_mapping :
crs
units :
m
valid_min :
-999999.0
valid_max :
999999.0
comment :
Estimate of the water surface elevation error caused by layover.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
sig0_cor_atmos_model
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
two-way atmospheric correction to sigma0 from model
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
grid_mapping :
crs
units :
1
valid_min :
1.0
valid_max :
10.0
comment :
Atmospheric correction to sigma0 from weather model data as a linear power multiplier (not decibels). sig0_cor_atmos_model is already applied in computing sig0.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
height_cor_xover
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
height correction from KaRIn crossovers
grid_mapping :
crs
units :
m
valid_min :
-10.0
valid_max :
10.0
comment :
Height correction from KaRIn crossover calibration. The correction is applied before geolocation but reported as an equivalent height correction.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
geoid
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
geoid height
standard_name :
geoid_height_above_reference_ellipsoid
source :
EGM2008 (Pavlis et al., 2012)
grid_mapping :
crs
units :
m
valid_min :
-150.0
valid_max :
150.0
comment :
Geoid height above the reference ellipsoid with a correction to refer the value to the mean tide system, i.e. includes the permanent tide (zero frequency).
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
solid_earth_tide
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
solid Earth tide height
source :
Cartwright and Taylor (1971) and Cartwright and Edden (1973)
grid_mapping :
crs
units :
m
valid_min :
-1.0
valid_max :
1.0
comment :
Solid-Earth (body) tide height. The zero-frequency permanent tide component is not included.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
load_tide_fes
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
geocentric load tide height (FES)
source :
FES2014b (Carrere et al., 2016)
institution :
LEGOS/CNES
grid_mapping :
crs
units :
m
valid_min :
-0.2
valid_max :
0.2
comment :
Geocentric load tide height. The effect of the ocean tide loading of the Earth’s crust.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
load_tide_got
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
geocentric load tide height (GOT)
source :
GOT4.10c (Ray, 2013)
institution :
GSFC
grid_mapping :
crs
units :
m
valid_min :
-0.2
valid_max :
0.2
comment :
Geocentric load tide height. The effect of the ocean tide loading of the Earth’s crust. This value is reported for reference but is not applied to the reported height.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
pole_tide
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
geocentric pole tide height
source :
Wahr (1985) and Desai et al. (2015)
grid_mapping :
crs
units :
m
valid_min :
-0.2
valid_max :
0.2
comment :
Geocentric pole tide height. The total of the contribution from the solid-Earth (body) pole tide height and the load pole tide height (i.e., the effect of the ocean pole tide loading of the Earth’s crust).
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
model_dry_tropo_cor
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
dry troposphere vertical correction
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
grid_mapping :
crs
units :
m
valid_min :
-3.0
valid_max :
-1.5
comment :
Equivalent vertical correction due to dry troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
model_wet_tropo_cor
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
wet troposphere vertical correction
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
grid_mapping :
crs
units :
m
valid_min :
-1.0
valid_max :
0.0
comment :
Equivalent vertical correction due to wet troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.
Array
Chunk
Bytes
1.35 MB
1.35 MB
Shape
(582, 581)
(582, 581)
Count
2 Tasks
1 Chunks
Type
float32
numpy.ndarray
iono_cor_gim_ka
(y, x)
float32
dask.array<chunksize=(582, 581), meta=np.ndarray>
long_name :
ionosphere vertical correction
source :
Global Ionosphere Maps
institution :
JPL
grid_mapping :
crs
units :
m
valid_min :
-0.5
valid_max :
0.0
comment :
Equivalent vertical correction due to ionosphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.
Water surface elevation of the pixel above the geoid and after using models to subtract the effects of tides (solid_earth_tide, load_tide_fes, pole_tide).
summary quality indicator for the water surface elevation
standard_name :
status_flag
grid_mapping :
crs
flag_meanings :
good suspect degraded bad
flag_values :
[0 1 2 3]
valid_min :
0
valid_max :
3
comment :
Summary quality indicator for the water surface elevation quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.
Bitwise quality indicator for the water surface elevation quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.
summary quality indicator for the water surface area
standard_name :
status_flag
grid_mapping :
crs
flag_meanings :
good suspect degraded bad
flag_values :
[0 1 2 3]
valid_min :
0
valid_max :
3
comment :
Summary quality indicator for the water surface area and water fraction quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.
Bitwise quality indicator for the water surface area and water fraction quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.
Summary quality indicator for the sigma0 quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.
Bitwise quality indicator for the sigma0 quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.
1-sigma uncertainty in sigma0. The value is provided in linear units. This value is a one-sigma additive (not multiplicative) uncertainty term, which can be added to or subtracted from sigma0.
Time of measurement in seconds in the UTC time scale since 1 Jan 2000 00:00:00 UTC. [tai_utc_difference] is the difference between TAI and UTC reference time (seconds) for the first measurement of the data set. If a leap second occurs within the data set, the attribute leap_second is set to the UTC time at which the leap second occurs.
Time of measurement in seconds in the TAI time scale since 1 Jan 2000 00:00:00 TAI. This time scale contains no leap seconds. The difference (in seconds) with time in UTC is given by the attribute [illumination_time:tai_utc_difference].
Climatological ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on external climatological information (not the SWOT measurement). Values of 0, 1, and 2 indicate that the pixel is likely not ice covered, may or may not be partially or fully ice covered, and likely fully ice covered, respectively.
Dynamic ice cover flag indicating whether the surface is ice-covered on the day of the observation based on analysis of external satellite optical data. Values of 0, 1, and 2 indicate that the pixel is not ice covered, partially ice covered, and fully ice covered, respectively.
two-way atmospheric correction to sigma0 from model
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
grid_mapping :
crs
units :
1
valid_min :
1.0
valid_max :
10.0
comment :
Atmospheric correction to sigma0 from weather model data as a linear power multiplier (not decibels). sig0_cor_atmos_model is already applied in computing sig0.
Geoid height above the reference ellipsoid with a correction to refer the value to the mean tide system, i.e. includes the permanent tide (zero frequency).
Geocentric load tide height. The effect of the ocean tide loading of the Earth’s crust. This value is reported for reference but is not applied to the reported height.
Geocentric pole tide height. The total of the contribution from the solid-Earth (body) pole tide height and the load pole tide height (i.e., the effect of the ocean pole tide loading of the Earth’s crust).
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
grid_mapping :
crs
units :
m
valid_min :
-3.0
valid_max :
-1.5
comment :
Equivalent vertical correction due to dry troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
grid_mapping :
crs
units :
m
valid_min :
-1.0
valid_max :
0.0
comment :
Equivalent vertical correction due to wet troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.
Equivalent vertical correction due to ionosphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.
We can query the FTS SWORD service over multiple river reaches too. In this example, we use ID 132270000. This ID represents multiple reaches along the Kasai River, a tributary of the Congo River in Africa. Note that this reach includes the reach ID of 13227000061 we plotted earlier. The response includes 9 individual reaches.
We can also query the FTS SWORD service for river nodes, points along the river reaches. In this example, we use the ID of 13227000060. Note that this ID corresponds to the same reach ID 13227000061 we used earlier. The only difference is that the last digit of 0 corresponds to all the individual nodes along the reach. If the last digit is 1 in the reach ID, it corresponds to the overall properties of the reach itself. The response returns 52 nodes along the reach.