# Landsat

The American Landsat satellites have imaged the earth since 1972. That makes it the longest satellite image record there is: over Amsterdam alone 6,754 scenes, the oldest from 5 September 1972. Detail: 30 metres per pixel, 60 metres in the early years.

- Publisher: U.S. Geological Survey, NASA
- Area: World · Finest detail: 30 metres
- Period: 1972 – heden · Refreshed: daily
- Access: Account · Licence: Geen beperkingen (Landsat-databeleid USGS)
- Join keys: pad en rij (WRS-2), opnamedatum
- Status: warn (2026-10-11) · LANDSAT_8 · 4630 opnamen boven Amsterdam
- URL: https://www.usgs.gov/landsat-missions

## What can you do with it?
- **Watch a city grow.** Find cloud-free summer images of Almere or the Maasvlakte, ten years apart. Put them side by side or make an animation.
- **The Netherlands in 1972.** The oldest scenes come from Landsat 1, with 60-metre pixels. Coarse, but enough to follow the broad outline of the country.
- **Heat in the city.** The landsat-c2l2-st collection gives surface temperature. Compare stony neighbourhoods with parks on a hot summer day.
- **Forty years of green.** Compute NDVI from the red and near-infrared bands for every summer since the 1980s and follow an area through time.

## How to process it
1. **Search the USGS catalogue.** Searching needs no account. Sort with sortby=-properties.datetime (with 'properties.' in front) and use fields to drop assets and links.
   `https://landsatlook.usgs.gov/stac-server/collections/landsat-c2l2-sr/items?bbox=4.7,52.2,5.1,52.5&sortby=-properties.datetime&limit=3&fields=id,properties.datetime,properties.eo:cloud_cover,properties.platform,-assets,-links,-geometry`
2. **Filter on clouds.** Use query with eo:cloud_cover. Over Amsterdam there were twelve scenes with less than 10 percent cloud in summer 2022.
   `https://landsatlook.usgs.gov/stac-server/search?collections=landsat-c2l2-sr&bbox=4.7,52.2,5.1,52.5&datetime=2022-06-01T00:00:00Z/2022-08-31T23:59:59Z&query=%7B%22eo:cloud_cover%22:%7B%22lt%22:10%7D%7D&limit=5`
3. **Download without an account via Planetary Computer.** USGS requires a login, even for a thumbnail. Microsoft Planetary Computer offers the same Collection 2 Level-2 with an anonymous token, but lags a little behind.
   `https://planetarycomputer.microsoft.com/api/sas/v1/token/landsat-c2-l2`
4. **Read only what you need.** The bands are 30-metre Cloud Optimized GeoTIFFs. Use rasterio or rioxarray to read only the red and near-infrared (nir08) bands for your area.

## Interesting combinations
- How much has a municipality been paved over since 1985? → [pdok-wijkenbuurten](https://www.opendataindex.nl/en/bron/pdok-wijkenbuurten.md) via geometrie. Clip the images per year to the municipal boundary and count pixels with a low NDVI.
- A longer series with more detail → [copernicus-sentinel2](https://www.opendataindex.nl/en/bron/copernicus-sentinel2.md) via coördinaten en datum. Use Landsat for the years before 2015 and Sentinel-2 after. Mind the difference in pixel size.

## Similar sources
- [copernicus-sentinel2](https://www.opendataindex.nl/en/bron/copernicus-sentinel2.md): Sharper (10 metres) and more frequent, but only since 2015.
- [nasa-gibs](https://www.opendataindex.nl/en/bron/nasa-gibs.md): Ready-made daily images as a map layer, coarser and without raw bands.
- [Microsoft Planetary Computer, Landsat Collection 2](https://planetarycomputer.microsoft.com/dataset/landsat-c2-l2): The same Level-2 data, downloadable without an account, about a week later.

## What to watch out for
- **USGS login.** Searching is open, but every USGS download (including the thumbnail) redirects to the login page. On Amazon S3 the bucket is 'requester pays'.
- **Clouds.** In summer 2026 Landsat 8 and 9 passed over Amsterdam about every four days, but it was often cloudy. Filter on eo:cloud_cover and check the images yourself.
- **Stripes in Landsat 7.** Since late May 2003 every Landsat 7 scene misses strips, about 22 percent of the image. Prefer Landsat 5 or 8 for those years.
- **Not every year equally good.** The oldest scenes have 60-metre pixels and four bands. Level-2 (corrected for the atmosphere) only starts in August 1982.

## API (STAC 1.0.0)

- Base: https://landsatlook.usgs.gov/stac-server
- Access: Searching is anonymous. The files themselves require an account (stated in the collection). (from the description)
- Formats: GeoJSON (zoekresultaten)
- Size: 19670 scenes (tested)
- Filtering: CQL2 (text or JSON) on the queryables; 

### Endpoints
- `GET /collections/landsat-c2l2-sr/items`: scenes in this collection, with bbox, datetime, limit
- `GET/POST /search`: search across collections, with filter (CQL2), sortby and fields
- `GET /collections/landsat-c2l2-sr/queryables`: filterable fields

### Parameters
- `bbox`: lon/lat box: west,south,east,north (platform)
- `datetime`: date or period, e.g. 2026-06-01/2026-08-31 (platform)
- `limit`: per page; next via link rel=next (platform)
- `sortby`: sorting, e.g. -datetime (newest first) (from the description)
- `filter`: CQL2 filter on the queryables, e.g. eo:cloud_cover < 10 (from the description)
- `fields`: return only these fields (from the description)

### Limits and pitfalls
- sortby=-datetime gives a 400 ('No mapping found for [datetime]'); use sortby=-properties.datetime (15 Oct 2026). (tested)
- fields=id,properties.datetime does not drop assets and links; add -assets,-links. That saves about 22 KB per scene. (tested)
- Filter on cloud cover with the query extension: query={"eo:cloud_cover":{"lt":10}}. A text filter (filter=eo:cloud_cover<10) gave an error; filter expects CQL2 JSON here. (tested)
- Files via https://landsatlook.usgs.gov/data/ redirect to the USGS login page (ERS). Microsoft Planetary Computer issues an anonymous token for the same data. (tested)

### Example
```
https://landsatlook.usgs.gov/stac-server/collections/landsat-c2l2-sr/items?bbox=4.7,52.2,5.1,52.5&sortby=-properties.datetime&limit=3&fields=id,properties.datetime,properties.eo:cloud_cover,properties.platform,-assets,-links,-geometry
```

## How to fetch it

### curl
```bash
curl "https://landsatlook.usgs.gov/stac-server/collections/landsat-c2l2-sr/items?bbox=4.7,52.2,5.1,52.5&sortby=-properties.datetime&limit=5&fields=id,properties.datetime,properties.eo:cloud_cover,-assets,-links,-geometry"
```

### python
```python
import requests

url = "https://landsatlook.usgs.gov/stac-server/search"
r = requests.get(url, params={
    "collections": "landsat-c2l1", "bbox": "4.7,52.2,5.1,52.5",
    "sortby": "properties.datetime", "limit": 5,
    "fields": "id,properties.datetime,properties.platform,-assets,-links,-geometry"}).json()
for f in r["features"]:
    print(f["properties"]["datetime"], f["properties"]["platform"], f["id"])
```

## Who uses it
- [LandsatLook](https://landsatlook.usgs.gov): Search and view Landsat images in the browser (USGS)
- [EarthExplorer](https://earthexplorer.usgs.gov): USGS download portal for satellite images and aerial photos

## What you can build with it
- [Satellite before and after: see how your town or polder changed](https://www.opendataindex.nl/en/bouwen/satelliet-voor-en-na.md): Pick a place and two years, and get two cloud-free satellite images side by side with a slider, plus a calculation of how much water became land.


## Examples with real figures (2)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **Landsat scenes of Amsterdam: 138 scenes in 2025, 30% less than in 1985** (2025). Table landsat-c2l1. [Example](https://www.opendataindex.nl/en/voorbeeld/landsat-opnamen-amsterdam)
  - `https://landsatlook.usgs.gov/stac-server/aggregate?collections=landsat-c2l1&intersects=%7B%22type%22%3A%22Point%22%2C%22coordinates%22%3A%5B4.893%2C52.373%5D%7D&aggregations=total_count,datetime_frequency,platform_frequency`
- **Landsat scenes of Amsterdam by satellite: most Landsat 5 (2,047 scenes), then Landsat 8 and Landsat 7** (oktober 2026). Table landsat-c2l1. [Example](https://www.opendataindex.nl/en/voorbeeld/landsat-opnamen-per-satelliet)
  - `https://landsatlook.usgs.gov/stac-server/aggregate?collections=landsat-c2l1&intersects=%7B%22type%22%3A%22Point%22%2C%22coordinates%22%3A%5B4.893%2C52.373%5D%7D&aggregations=total_count,datetime_frequency,platform_frequency`
