CoDD Wiki
How to find, inspect and download coincident satellite observations with the UMD Coincident Data Discovery Engine.
1. Overview
The Coincident Data Discovery Engine (CoDD) is a portal for global-scale, cross-platform satellite data search. It indexes the footprints of acquisitions from optical, radar and altimetry missions and precomputes where two missions observed the same place at nearly the same time. You can:
- Search one product by time range, cloud cover, land percentage and region.
- Search coincident pairs between two products, within a maximum time difference.
- Explore results on the map: filter pairs by time difference, toggle each product, step through stacked footprints and preview thumbnails.
- Download the results table (CSV), the footprints (GeoJSON), or ready-to-run code that fetches the source data
(Google Earth Engine for Landsat/Sentinel, Python
earthaccessfor ICESat-2, SWOT and NISAR).
The sidebar has five tabs: Wiki (this page), Search, Results, Download and About. The sidebar can be widened by dragging its right edge. On phones the map sits above the sidebar; drag the bar between them to give more room to either, pinch to zoom the map, and tap the Result filters header to open the filters.
2. Quick start
Find coincident pairs
- Open the Search tab and click the Matrix button next to the data-source dropdown.
- Click a green cell, e.g. Landsat 8 × Sentinel-2. The temporal coverage chart below the matrix shows which months have pairs; click or drag across months to fill the Start/End dates.
- Click Confirm. Both products are filled in and the search switches to intersection mode.
- Optionally draw a polygon or rectangle on the map, adjust the filters and the maximum time difference.
- Click Intersection Search, then open the Results tab.
Search a single product
- On the Search tab pick one data source (leave the second one empty).
- Set the time range and filters, then click Search.
3. Data sources
| Mission | Product in CoDD | Type | Time span in CoDD |
|---|---|---|---|
| Landsat 7 | Collection 2, Level-2 (LE07_…) | Optical | Dec 2019 – Jan 2024 |
| Landsat 8 | Collection 2, Level-2 (LC08_…) | Optical | Dec 2019 – present |
| Landsat 9 | Collection 2, Level-2 (LC09_…) | Optical | Oct 2021 – present |
| Sentinel-1 | GRD (S1A/S1C_…_GRD…) | SAR | Dec 2019 – present |
| Sentinel-2 | MSI Level-2A (S2A/B/C_MSIL2A_…) | Optical | Dec 2019 – present |
| Sentinel-3 | OLCI full resolution (S3A/B_OL_1_EFR_…) | Optical | Jan 2024 – present |
| ICESat-2 | ATL03 granule segments (see naming) | Laser altimetry | Sep 2019 – present |
| SWOT | L2 HR Raster (SWOT_L2_HR_Raster_…) | Radar altimetry | Jul 2023 – May 2025 |
| NISAR | L2 provisional products (NISAR_L2_PR_…) | SAR | Oct 2025 – present |
| PlanetScope | Legacy entry | Optical | No data loaded |
"Present" means the latest ingested month. For exact month-by-month availability of any mission, open the combination matrix and click the radio button next to the mission's name.
Filters that depend on the mission:
- Cloud cover applies to Landsat 7/8/9, Sentinel-2 and SWOT. Other missions have no cloud value and are never removed by this filter.
- Land percentage uses each footprint's land fraction. ICESat-2 has no land value; in an intersection search it is kept, in a single-product search it is removed when the slider is below 100%.
4. Combination matrix & temporal coverage
The Matrix button next to the data-source dropdown opens a grid of every mission pair.
- Green cells are available combinations; the number is the count of precomputed coincident pairs (e.g. 35M). Click anywhere in a cell to preview it.
- Gray cells (–) have no pairs.
- Row radio buttons (next to each mission name) show that mission's own monthly coverage.
- The temporal coverage chart shows one row per year and one square per month: green = data, gray = none. Hover a square for its count; click or drag across squares to set Start/End (End becomes the first day of the month after the selection).
- Confirm applies the previewed pair to the Search tab. Close the popup with x, Esc or a click outside.
Currently available combinations:
| Mission | Can be paired with |
|---|---|
| Landsat 7 | Sentinel-1, Sentinel-2, ICESat-2, SWOT |
| Landsat 8 | Sentinel-1, Sentinel-2, Sentinel-3, ICESat-2, SWOT, NISAR |
| Landsat 9 | Sentinel-1, Sentinel-2, Sentinel-3, ICESat-2, SWOT, NISAR |
| Sentinel-1 | Landsat 7/8/9, Sentinel-2, ICESat-2, SWOT, NISAR |
| Sentinel-2 | Landsat 7/8/9, Sentinel-1, ICESat-2, SWOT, NISAR |
| Sentinel-3 | Landsat 8, Landsat 9, NISAR |
| ICESat-2 | Landsat 7/8/9, Sentinel-1, Sentinel-2, SWOT, NISAR |
| SWOT | Landsat 7/8/9, Sentinel-1, Sentinel-2, ICESat-2 |
| NISAR | Landsat 8, Landsat 9, Sentinel-1, Sentinel-2, Sentinel-3, ICESat-2 |
New combinations appear in the matrix automatically as data packages are ingested.
5. Searching
Filters
| Filter | Description |
|---|---|
| Data sources | One source for a product search; click + (or use the matrix) for a second source and an intersection search. x removes the second source. |
| Start / End | Acquisition time range, in UTC. |
| Maximum cloud cover | Keeps footprints at or below this cloud percentage (missions without a cloud value are kept). |
| Maximum land percentage | Keeps footprints at or below this land fraction (see mission notes). |
| Maximum time difference | Intersection search only: hours, minutes and seconds between the two acquisitions (default 3 h). |
Region of interest
- Draw a polygon or rectangle with the drawing tools on the left of the map. The first drawn shape limits the search; the trash tool removes it.
- Find a place with the magnifier at the top right of the map; it zooms to the place and outlines it.
- Import Shapefile (zipped) displays a shapefile on the map.
- Input precise rectangular boundary draws a rectangle from typed latitudes/longitudes. After a single-product search, Filter By Region keeps only results inside the rectangle or shapefile; Clear Filter undoes it.
While a search runs
The status line and progress bar below the search button show progress; Cancel stops the search and clears partial results. When the search finishes the status line says how many results were found.
6. Results table
- Product search: ID, acquisition time and cloud cover for each footprint.
- Intersection search: one row per coincident pair. The column headers name the two products (e.g. Landsat 8 ID, Sentinel-2 ID); Time Difference (hours) has three decimals. Click the time-difference header to sort ascending / descending.
- Hover a truncated ID to see it in full. ICESat-2 IDs have an i icon explaining the naming convention.
Table ↔ map
- Click a row to select its footprint: the map zooms in if needed, centres on it, highlights it in red and opens its popup. In the pair table, the clicked product gets the popup and its pair partner is outlined in dashed orange; the clicked row gets an orange border. Clicking the time-difference cell selects the row's first product.
- Hover a row to emphasise its footprints on the map.
- Click a footprint on the map to highlight every row it appears in (a footprint can belong to several pairs); hover a footprint to tint its rows.
- If a product's layer is switched off in the result filters, clicking its row switches it back on.
7. Map & result filters
Footprints and bubbles
- When zoomed out, results are grouped into numbered bubbles; click a bubble to zoom in. A footprint with no neighbours shows as a small 1 bubble; clicking it opens that footprint. Zoom in further (level 5 on the global map, level 2 in the polar view) to see individual footprints.
- In an intersection search the first product is blue and the second yellow (see the legend at the bottom left). The selected footprint is red.
- The layer button at the top right switches the basemap (street, satellite, topographic).
Polar view
- The Polar view button at the top right of the map shows the Arctic from above (NSIDC polar stereographic, EPSG:3413), so footprints near the pole keep their true shape and tracks crossing the 180° meridian are drawn in one piece. Global view switches back; results, filters and selections stay.
- Basemaps come from NASA GIBS: Blue Marble with relief and bathymetry (default), Blue Marble Next Generation, and a land/water map; coastlines, a graticule and place labels can be switched on in the layer button. The polar map covers the Northern Hemisphere down to about 40–50°N.
- A region drawn in the polar view is searched exactly as drawn. A region that contains the North Pole or crosses the 180° meridian is searched as its whole latitude band (e.g. everything north of 75°N), so no results are missed; the status line says so.
Result filters panel
After an intersection search a Result filters panel appears above the legend (its header collapses it):
- Layers: a checkbox per product turns its footprints on or off; the number is the count of unique footprints.
- Time difference: a histogram of pairs per 10-minute bin (bins widen automatically for very long ranges) above a slider with from and to handles. Only footprints with at least one pair inside the range stay on the map, and the table hides rows outside it. Click a bar to select exactly that bin; Reset restores everything.
- The summary line shows how many pairs and footprints are currently shown. CSV and automated-code downloads follow the same range.
Popup and stacked footprints
- The popup shows the ID, acquisition time, cloud cover, land percentage and a thumbnail.
- ▲ Go up / ▼ Go down step through every footprint of the same product in the selected footprint's bubble, nearest first (e.g. Sentinel-2 3 of 14 in this bubble); the map follows each one.
- Switch to <other product> in this bubble jumps to the other product's footprints in the same area.
8. Thumbnails
| Mission | Thumbnail |
|---|---|
| Landsat 7 / 8 / 9 | Microsoft Planetary Computer preview, with USGS LandsatLook as fallback |
| Sentinel-2 | Microsoft Planetary Computer preview |
| Sentinel-1 | ASF browse image |
| NISAR | ASF browse image (where published) |
| SWOT | PO.DAAC browse image; it requires a NASA Earthdata login, so when it cannot be shown inline a See thumbnail in a new window link opens it |
| ICESat-2, Sentinel-3 | Not available |
9. Download
Results
- Download Results Table as .csv exports the rows currently shown in the table (rows hidden by the time-difference or region filters are left out), up to 500 rows.
- Download Attribute and Geometry as .geoJSON exports the footprints and their attributes, up to 500 features.
Download via automated code
After a search, one button per queried product generates code that downloads the source data. Copy code or Download file saves it. Scripts cover up to 500 footprints and follow the time-difference range set on the map.
| Product | Code | How to run |
|---|---|---|
| Landsat 7/8/9, Sentinel-1, Sentinel-2, Sentinel-3 | Google Earth Engine script (JavaScript) | Paste into the Earth Engine Code Editor and press Run. The script reports scenes that are not in Earth Engine and creates one Google Drive export task per scene; start them from the Tasks tab. |
| ICESat-2, SWOT, NISAR | Python script using earthaccess (prototype) |
pip install earthaccess, then python codd_<product>_download.py. Requires a free
NASA Earthdata Login. Set DRY_RUN = True to list granules without downloading. |
| PlanetScope | – | Link to the Planet Data API instructions. |
Earth Engine collections used: LANDSAT/LE07|LC08|LC09/C02/T1_L2 (or T2_L2 for Tier 2 scenes),
COPERNICUS/S2_SR_HARMONIZED, COPERNICUS/S1_GRD, COPERNICUS/S3/OLCI. The script's
SCALE, BANDS, REGION and DRIVE_FOLDER settings can be edited before running.
10. ICESat-2 naming convention
ICESat-2 results are shown as IS2_ATL03_YYYYMMDD_RRRRCCSS_NNNN:
| Part | Meaning |
|---|---|
YYYYMMDD | Acquisition date (UTC) |
RRRR | Reference ground track |
CC | Cycle |
SS | Granule region |
NNNN | CoDD polygon counter: numbers the polygons cut from one granule. It is not part of the raw granule ID. |
The raw NSIDC file is named ATL03_YYYYMMDDHHMMSS_RRRRCCSS_VVV_EE.h5. Its time of day is the granule start time, which does not always
match the first second of data: when there are gaps before the first valid photons, the start time differs from any polygon's time.
CoDD therefore keeps only the date. To find the raw granule, search by date and RRRRCCSS (the generated Python script does this for you).
11. API reference
The web page uses these JSON endpoints, which can also be called directly. Mission codes:
l7 l8 l9 s1 s2 s3 is2 swot nisar ps.
| Endpoint | Returns |
|---|---|
GET /data/sources/ | All data sources (code, name, description, cloud field). |
GET /data/sources/<code>/acquisitions/ | Footprints of one mission (GeoJSON FeatureCollection). |
GET /data/sources/<code>/coverage/ | Monthly acquisition counts of one mission. |
GET /data/pairs/matrix/ | Number of coincident pairs for every mission pair. |
GET /data/pairs/<a>/<b>/ | Coincident pairs: features_a and features_b are aligned (item i of each is one pair)
and carry time_diff in decimal hours. |
GET /data/pairs/<a>/<b>/coverage/ | Monthly pair counts for a combination. |
Query parameters
- acquired-min, acquired-max
- ISO 8601 UTC timestamps, e.g.
2025-07-01T00:00:00Z. - cloud-percent-max
- Maximum cloud percentage (missions with a cloud value only; unknown values are kept).
- land-percent-max
- Maximum land percentage.
- polygon
- URL-encoded GeoJSON Feature with a Polygon geometry (the region of interest).
- time_diff
- Pairs only: maximum time difference in hours (default 24).
- page
- 1-based page number; 100 results per page. The response's
propertiesgivetotalandnum_pages.
Example
GET https://codd.umd.edu/data/pairs/l8/s2/?acquired-min=2025-07-01T00:00:00Z
&acquired-max=2025-07-02T00:00:00Z&cloud-percent-max=20&time_diff=1&page=1
12. FAQ & troubleshooting
- "No data found for the selected criteria." Widen the time range or region, raise the cloud cover / land limits, or increase the maximum time difference. Check the matrix coverage chart to see which months have data for your pair.
- I see numbered circles instead of footprints. Those are bubbles; zoom in (level 5 on the global map, level 2 in the polar view), or click a bubble or a table row.
- Arctic footprints look stretched. Switch to the Polar view (top right of the map).
- Footprints are piled on top of each other. Narrow the time-difference range, switch one product off in the result filters, or use Go up / Go down in the popup.
- A combination is gray in the matrix. No coincident pairs have been computed for it yet.
- The thumbnail does not load. Not every mission or scene has a browse image; SWOT images need an Earthdata login (use the new-window link).
- The Earth Engine script lists missing scenes. Some scenes are not in Earth Engine's collections (for example very recent or Tier 2 / Level-2SR scenes); the remaining scenes are still exported.
- Downloads stop at 500. CSV, GeoJSON and generated scripts are limited to 500 rows / footprints; narrow the search or the time-difference range and download in parts.
13. Citation & contact
If CoDD helps your work, please cite:
Wang, R., Xie, Y., Du, L., Yu, J., Duncan, K., Farrell, S., Li, Z., & Chai, K. (2025). Coincident Data Discovery Engine: A Portal for Global-Scale Cross-Platform Satellite Data Search. Proceedings of the 33rd ACM International Conference on Advances in Geographic Information Systems (ACM SIGSPATIAL), 860–863. doi:10.1145/3748636.3762800
Questions and suggestions are welcome through the feedback form. The BibTeX entry and acknowledgements are on the About tab.