Web Access to RSIG Data
Researchers with sufficient programming experience can use a web service to obtain data from RSIG and Estuary Data Mapper (EDM) without having to use the RSIG or EDM applications.
End users who are interested in bulk data transfer may opt to use the web service directly, or incorporate it into an automated script.
You may also want to read more about web service queries and essential performance tips.
- About the web service
- Anatomy of a web service call
- Popular RSIG data sources
- Output data formats
- Command-line examples using cURL
About the RSIG API web service
The RSIG web service (rsigserver) is OGC-WCS/WMS-compliant.
The following links exit the site
- Open Geospatial Consortium's Web Coverage Service (WCS) standards
- Open Geospatial Consortium's Web Map Service (WMS)
Essential information about the web service is as follows:
- The purpose of rsigserver is to stream (over a network) aggregated (across multiple source data files) subsets (by time-range, variables, longitude-latitude-layer domain) of data into client applications (without the need for first writing files to disk, as in ftp).
- EMVL extends rsigserver each time a new data source is requested for RSIG.
- All data are GMT-hourly.
- Longitude, latitude, elevation (meters above MSL when available), and GMT timestamps are always included implicitly to facilitate geospatial-temporal data alignment.
Anatomy of a web service call
To create a webservice call you must first construct a URL of the proper form, which is outlined below. To get started you may want to obtain data with the RSIG3D desktop application, which prints the URL for every data request it makes. You can copy/paste the URL to use as a basis for constructing other customized URLs. Examples of full URLs are given in the Command Line Example section below.
The URL for typical RSIG API calls is composed of three main parts: a basename, mandatory key/value pairs, and optional key/value pairs. Some of the optional key/value pairs are specific to certain data types. The key/value pairs are always separated by ampersands (&) in the URL string. Some people may find the length of the URL string to be long and daunting, but if you break it down into its constituent components it is easy to understand.
Basename: The basename below specifies the RSIG server and web service. The question mark signifies the end of the basename and the beginning of a series of key/value pairs to follow that specify details about the data that is being requested.
https://ofmpub.epa.gov/rsig/rsigserver?
Mandatory key/value pairs: The mandatory key/value pairs are required in part to make the RSIG API OGC-WCS compliant. They also describe basic details about the data request including the data source, the desired format, and the spatial and temporal extents of the data being requested as shown in the table below.
| Mandatory key | Value | Notes |
|---|---|---|
| SERVICE | WCS | This value should not be changed and indicates that data is being requested. |
| VERSION | 1.0.0 | This value should not be changed and indicates the OGC specification level. |
| REQUEST | GetCapabilities or GetCoverage | GetCapabilities is used for learning about the webservice. GetCoverage is for requesting data. |
| COVERAGE | The data being requested | The RSIG API provides access to over 5,000 specific data sources and variables. You can discover them by using GetCapabilities (see examples below), or by inspecting the data selection options in the RSIG3D desktop application. As an example, the COVERAGE for AirNow PM2.5 is airnow.pm25 . |
| FORMAT | ascii, netcdf-coards, netcdf-ioapi, original, or xdr | Choose which format you want for the returned data:
You can find out more about these formats and their compatibility with other software in the WCS Output Data Formats section below. |
| TIME | ISO-8601 time range | Example: 2025-07-15T14:00:00Z/2025-07-15T14:59:59Z |
| BBOX | Rectangular lon/lat bounding box of the form west,south,east,north (no spaces) | Example: -126.0,24.0,-66.0,50.0 for a typical CONUS bounding box. |
Optional key/value pairs: Other key/value pairs can be specified to tailor your request.
| Optional key | Value | Notes |
|---|---|---|
| COMPRESS | 0 or 1 | 0=no compression, 1=data stream is compressed with gzip. |
| CORNERS | 1 | If CORNERS=1 is specified, certain data (such as satellite or CMAQ model data) will include the lon/lat coordinates of each data cell's vertices. |
Putting it all together: To construct a URL, start with the basename and then append key value pairs separated by ampersands. Make sure that there are no spaces or line breaks anywhere in the URL. The order of the key/value pairs does not matter, but standard practice is to list the mandatory ones first, followed by the optional ones. Here is an example that will request AirNow PM2.5 data for August 1, 2025 in ASCII (plain text) format. More examples can be found in the Command Line Examples below.
Popular RSIG data sources
The table below lists some of the popular data sources available via RSIG, but is by no means exhaustive. RSIG can serve over 5,000 data sources and variables. See the full list of RSIG variables for more information. Note that a given source (e.g. airnow) may have many variables that can be requested (e.g. pm25, ozone, no2).
| Source | Description | Variables |
|---|---|---|
| AirNow (EPA) | AirNow ground stations. | airnow.pm25, airnow.ozone, airnow.no2 |
| AQS (EPA) | AQS Data Mart ground stations. | aqs.pm25, aqs.pm25_daily_average, aqs.ozone, aqs.ozone_8hour_average, aqs.ozone_daily_8hour_maximum |
| CMAQ EQUATES (EPA) | CMAQ modeled gridded met and air-quality data. | cmaq.equates.conus.conc.no2 |
| HMS (NOAA) | Satellite based fire and smoke detections. | hms.fire_power, hms.smoke |
| HRRR (NOAA) | High Resolution Rapid Refresh meteorological model | hrrr.wind_10m |
| METAR (NWS) | Meteorological measurements associated with airports worldwide. | metar.wind, metar.temperature |
| MODIS (NASA) | Moderate resolution imaging spectroradiometer in low-Earth orbit delivering daily overpasses. | modis.mod4.Optical_Depth_Land_And_Ocean |
| OMI (NASA) | Satellite based imaging spectrometer in low-Earth orbit delivering daily overpasses. | omi.l2.omto3.ColumnAmountO3, omi.l2.omno2.ColumnAmountNO2Trop |
| PurpleAir (PurpleAir, Inc.) | Network of low-cost PM2.5 sensors from PurpleAir Inc. The "pm25_corrected" variable has an EPA derived correction factor applied to improve the accuracy of the PM2.5 measurements in most cases. | purpleair.pm25_corrected |
| TEMPO (NASA) | Satellite based imaging spectrometer in geosyncronous orbit delivering hourly measurements during daylight hours. | tempo.l2.no2.vertical_column_troposphere |
| TROPOMI (ESA) | Satellite based imaging spectrometer in low-Earth orbit delivering daily overpasses. | tropomi.offl.no2.nitrogendioxide_total_column |
WCS Output data formats
| Format | Description |
|---|---|
| ASCII | Tab-delimited spreadsheet. Use with compression (&COMPRESS=1) to improve download speed. Good for spreadsheets and scripts. |
| XDR | Text header with followed by data encoded using the XDR standard. Good for streaming to custom software. |
| NetCDF-COARDS | NetCDF file with COARDS metadata conventions. See NetCDF documentation for a list of compatible software. |
| NetCDF-IOAPI | NetCDF file with IOAPI conventions. Compatible with IDV, Panoply, and CMAQ-related-utilities. |
| Original | Original (unsubsetted) satellite files (tarred and gzipped). WARNING: large files and slow downloads! |
Command-line examples using cURL
To help craft WCS queries, you can use cURL, a command available on multiple platforms for transferring data. As summarized on the cURL home page :
curl is an open source command line tool and library for transferring data with URL syntax that compiles and runs under a wide variety of operating systems....
The easiest way to learn these WCS commands is to run RSIG3D and inspect the status window in the lower left hand corner after a data request is made. The exact WCS call used by the application is echoed to the status window, and can be used as a starting point for constructing custom WCS calls.
Note that in the examples below, the curl commands should all be entered on a single line.
Note for Windows users: The command-line examples below should be run in a Powershell terminal. You may need to replace 'curl' in the examples below with 'curl.exe'.
List available datasets from the RSIG WCS server
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCapabilities'
Listing just the names of available variables from a script
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCapabilities' |grep name | grep -v WCS | sed 's/<name>//g; s/<\/name>//g' | tr -d '[:blank:]'
Getting ASCII format data from TROPOMI NO2
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCoverage&COVERAGE=tropomi.offl.no2.nitrogendioxide_total_column&TIME=2026-02-01T17:00:00Z/2026-02-01T17:59:59Z&BBOX=-78,37,-76,38&FORMAT=ascii'
Getting XDR-format MODIS AOD data from NASA Goddard
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCoverage&FORMAT=xdr&TIME=2025-07-15T14:00:00Z/2025-07-15T14:59:59Z&BBOX=-126.0,24.0,-66.0,50.0&COVERAGE=modis.mod4.Optical_Depth_Land_And_Ocean' > modis_sample1.xdr
Compression/decompression is optional but recommended when streaming large amounts of data over long-distance networks. To use compression, add the &COMPRESS=1 option to return data that has been gzipped. Windows users may need to get a decompression utility such as 7zip to uncompress .gz files.
Same as above but including MODIS cell corner points
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCoverage&FORMAT=xdr&TIME=2025-07-15T14:00:00Z/2025-07-15T14:59:59Z&BBOX=-126.0,24.0,-66.0,50.0&COVERAGE=modis.mod4.Optical_Depth_Land_And_Ocean&CORNERS=1' > modis_sample2.xdr
The CORNERS=1 option will result in 8 additional variables: Longitude_SW, Longitude_SE, Longitude_NW, Longitude_NE, Latitude_SW, Latitude_SE, Latitude_NW, Latitude_NE which are the linearly interpolated/extrapolated corner points surrounding each MODIS ground point center to provide quadrillateral cells for each MODIS data point.
Getting CALIPSO satellite LIDAR data in ascii format
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCoverage&FORMAT=ascii&TIME=2023-06-15T00:00:00Z/2023-06-15T23:59:59Z&BBOX=-95.0,34.0,-89.0,38.0,0,40000&COVERAGE=calipso.l1.Total_Attenuated_Backscatter_532&MINIMUM_CAD=20&MAXIMUM_UNCERTAINTY=99'
Getting CMAQ wind data for the lowest grid layer (in IOAPI format)
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCoverage&COVERAGE=cmaq.equates.conus.metdot3d.wind&TIME=2005-08-28T20:00:00Z/2005-08-29T01:59:59Z&BBOX=-90,30,-88,32,1,1&FORMAT=netcdf-ioapi' > cmaq_sample.nc
To obtain data for all layers, omit the last two values of BBOX:
BBOX=-90,30,-88,32
To obtain the first three layers:
BBOX=-90,30,-88,32,1,3
Optional compression/decompression
...&COMPRESS=1' | gzip -d > sample.nc
Regridding one day of TEMPO NO2 data to layer one of the CMAQ EQUATES 12km grid in Lambert space (saved as NetCDF IOAPI format)
curl --silent --retry 0 -L --tcp-nodelay --max-time 0 'https://ofmpub.epa.gov/rsig/rsigserver?SERVICE=wcs&VERSION=1.0.0&REQUEST=GetCoverage&FORMAT=netcdf-ioapi&TIME=2026-03-01T17:00:00Z/2026-03-01T18:59:59Z&BBOX=-125,25,-65,50&COVERAGE=tempo.l2.no2.vertical_column_troposphere&CORNERS=1&MINIMUM_QUALITY=normal&MAXIMUM_CLOUD_FRACTION=0.15&MAXIMUM_SOLAR_ZENITH_ANGLE=70.0®RID=weighted&LAMBERT=33.0,45.0,-97.0,40.0&ELLIPSOID=6370000,6370000&GRID=459,299,-2556000,-1728000,12000,12000' > cmaq_sample_regridded.nc
Example Windows and UNIX scripts for automated downloads
Contact the RSIG team for a sample script that will automate downloads using cURL.