303.525 datasets geïndexeerd1.419 uitgevers
Open Data IndexDe index van open data over Nederland
Open Data Index›Bouwen›Satelliet voor en na: zie hoe je stad of polder veranderde

Satelliet voor en na: zie hoe je stad of polder veranderde

Kies een plek en twee jaren, en krijg twee wolkenvrije satellietbeelden naast elkaar met een schuif, plus een berekening van hoeveel water land werd.

Je AI-assistentOpen Data Index MCP aan
De MCP-server van Open Data Index staat aan in je chat. Zo leest de assistent dit project en de bronnen zelf.
Jij plakt de prompt van dit project
De assistent haalt op bij Open Data Index
  • geef_project("satelliet-voor-en-na")
  • geef_bron("landsat")
  • geef_bron("copernicus-sentinel2")
  • geef_bron("nasa-gibs")
De assistent

Ik heb het project, de geteste aanroepen en de valkuilen. Ik bouw een tool met Landsat, Copernicus Sentinel-2 en NASA GIBS en Worldview. Zo kan het eruitzien:

Dit bouw je zelf. Kopieer de prompt naar Claude, ChatGPT of Cursor, met de MCP-server aan, of volg de stappen hieronder.

Volg de stappen
TIJDVAKMaasvlakte · vak 92 km²SchuifNaastWater
16 jul 2006Landsat 5 · wolken 0%7 apr 2025Landsat 9 · wolken 0,23%
52,00° N51,92° NN012 km
3,95° O4,10° O
Water in het vak
68,7%200653,9%2025
Nieuw land≈ 13 km²Maasvlakte 2
Landsat-archief
2.383sinds 1984
L4L5L7L8L9
Mockup

Dit is een mockup, geen werkende versie, met de echte Landsat-beelden van 16 juli 2006 en 7 april 2025 (opgehaald op 17 oktober 2026, 23:33, via Planetary Computer) en de cijfers uit onze proefdraai van 16 en 17 oktober 2026. De MCP-server zet je aan met het adres op Voor AI.

Voor wie

Journalisten die een verhaal over nieuwbouw, natuur of havens willen laten zien, docenten aardrijkskunde, gemeenten en iedereen die wil zien hoe zijn woonplaats veranderde.

Wat je krijgt

Een pagina waar je een vak op de kaart trekt en twee jaren kiest. De app zoekt per jaar de helderste opname, toont beide beelden met een schuif en berekent het aandeel water. In de proefdraai op 16 en 17 oktober 2026 voor de Maasvlakte (vak 3,95 tot 4,10 graden oost, 51,92 tot 52,00 noord, ongeveer 92 km²): de USGS-catalogus had 2.383 Landsat-opnamen van dit vak sinds 1984, waarvan 292 met minder dan 10% wolken. De helderste opnamen: Landsat 5 op 16 juli 2006 en Landsat 9 op 7 april 2025. Volgens het waterbit in de kwaliteitsband was 68,7% van het vak water in 2006 en 53,9% in 2025: ongeveer 13 km² meer land, de aanleg van Maasvlakte 2. Daarnaast twee kant-en-klare beelden van NASA GIBS zonder account: een Landsat-jaarmozaïek uit de jaren 80 (datum 1985-12-01, nog zonder de westelijke havens) en Sentinel-2 op 30 meter van 12 mei 2025 (HLS_S30). De helderste Sentinel-2-opname in de Copernicus-catalogus van april en mei 2025 was die van 12 mei (0,007% wolken), maar de banden downloaden vraagt een account.

Landsat-opnamen van Amsterdam per satelliet: het meest Landsat 5 (2.047 opnamen), dan Landsat 8 en Landsat 7

Landsat-opnamen van Amsterdam per satelliet, oktober 2026, in opnamen. Totaal: 4.640; de grootste 8 van 8 categorieën staan in de grafiek. Landsat 5 is 44% van het totaal.

Bron: USGS, LandsatLook STAC (aggregate, Collection 2 Level-1) · opgehaald 25 oktober 2026 · selectie: Opnamen waarop de Dam in Amsterdam (4.893 O, 52.373 N) staat, ongeacht bewolkingOpen de tabel Los blok

Zo zou je kunnen starten6 stappen

  1. 1

    Tel wat er is: Landsat-aggregatie bij USGS

    De STAC-server van USGS kent de aggregatie-extensie: in één aanroep het aantal opnamen per satelliet, en met query (eo:cloud_cover kleiner dan 10) ook het aantal heldere. Zo zie je voor je zoekt of een vak genoeg beelden heeft. Level-2 (landsat-c2l2-sr, gecorrigeerd voor de atmosfeer) begint in 1982; Landsat 1 tot en met 3 staan alleen in Level-1. Het vak in bbox is lengte,breedte (west, zuid, oost, noord).

    https://landsatlook.usgs.gov/stac-server/aggregate?collections=landsat-c2l2-sr&bbox=3.95,51.92,4.10,52.00&aggregations=total_count,platform_frequency
    {"aggregations":[{"name":"total_count","data_type":"integer","value":2383},
      {"name":"platform_frequency","data_type":"frequency_distribution","overflow":0,"buckets":[
        {"key":"LANDSAT_5","data_type":"string","frequency":919},{"key":"LANDSAT_7","data_type":"string","frequency":675},
        {"key":"LANDSAT_8","data_type":"string","frequency":574},{"key":"LANDSAT_9","data_type":"string","frequency":207},
        {"key":"LANDSAT_4","data_type":"string","frequency":8}]}], …}
  2. 2

    Zoek per jaar de helderste opname

    Zoek met datetime (één seizoen), query op eo:cloud_cover en sortby=properties.eo:cloud_cover (met 'properties.' ervoor, anders HTTP 400). Laat met fields de bestanden en links weg (-assets,-links,-geometry), dat scheelt ruim 20 kB per opname. Sla Landsat 7 na mei 2003 over (strepen, ongeveer 22% van het beeld mist) en kies Tier 1 (T1) boven Tier 2 (T2). Let op: eo:cloud_cover geldt voor de hele scène van 185 km, niet voor jouw vak.

    https://landsatlook.usgs.gov/stac-server/search?collections=landsat-c2l2-sr&bbox=3.95,51.92,4.10,52.00&datetime=2006-04-01T00:00:00Z/2006-09-30T23:59:59Z&query={"eo:cloud_cover":{"lt":10}}&sortby=properties.eo:cloud_cover&limit=5&fields=id,properties.datetime,properties.eo:cloud_cover,properties.platform,-assets,-links,-geometry,-bbox
    {"type":"FeatureCollection","numberMatched":7,"numberReturned":5,"features":[
      {"stac_version":"1.0.0","id":"LE07_L2SP_199024_20060910_20200914_02_T1_SR","collection":"landsat-c2l2-sr","type":"Feature",
       "properties":{"datetime":"2006-09-10T10:29:36.146817Z","eo:cloud_cover":0,"platform":"LANDSAT_7"}},
      {…,"id":"LE07_L2SP_198024_20060717_20200914_02_T1_SR", … "platform":"LANDSAT_7"}},
      {…,"id":"LT05_L2SP_198024_20060911_20200831_02_T2_SR", … "eo:cloud_cover":0,"platform":"LANDSAT_5"}},
      {…,"id":"LT05_L2SP_199024_20060716_20200831_02_T1_SR","properties":{"datetime":"2006-07-16T10:33:06.013038Z","eo:cloud_cover":0,"platform":"LANDSAT_5"}},
      …], …}
  3. 3

    Meet water en land via Planetary Computer

    Bij USGS stuurt elke download (ook een miniatuur) je naar het inlogscherm. Microsoft Planetary Computer heeft dezelfde Collection 2 Level-2 zonder account, met een rekendienst erbij. Het id is korter: haal de verwerkingsdatum en _SR weg (LT05_L2SP_199024_20060716_20200831_02_T1_SR wordt LT05_L2SP_199024_20060716_02_T1). POST het vak als GeoJSON naar /item/statistics met assets=qa_pixel en categorical=true: je krijgt per QA-waarde het aantal pixels. Bit 7 (128) betekent water, bit 3 (8) wolk. Zonder max_size gaf een vergelijkbare vraag bij ESA WorldCover een HTTP 502.

    curl -X POST "https://planetarycomputer.microsoft.com/api/data/v1/item/statistics?collection=landsat-c2-l2&item=LC09_L2SP_199024_20250407_02_T1&assets=qa_pixel&categorical=true&max_size=1024" \
      -H 'Content-Type: application/json' -d '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[3.95,51.92],[4.10,51.92],[4.10,52.00],[3.95,52.00],[3.95,51.92]]]}}'
    {"type":"Feature","geometry":{…},"properties":{"statistics":{"qa_pixel_b1":{"min":21762.0,"max":30048.0, … "count":93632.0, … "unique":12.0,
      "histogram":[[1689.0,33798.0,1041.0,49472.0,479.0,930.0,1257.0,893.0,3954.0,73.0,36.0,10.0],
                   [21762.0,21824.0,21890.0,21952.0,22018.0,22080.0,22280.0,23826.0,23888.0,24082.0,24144.0,30048.0]],
      "valid_percent":100.0,"masked_pixels":0.0,"valid_pixels":93632.0, …}}}}
  4. 4

    Maak de twee beelden

    Dezelfde dienst knipt een beeld uit: /item/bbox/<west,zuid,oost,noord>/800x600.png met assets red, green en blue en de color_formula die Planetary Computer zelf voor Landsat gebruikt (gamma RGB 2.7, saturation 1.5, sigmoidal RGB 15 0.55). Zonder die formule zijn de ruwe waarden te donker. Elke uitsnede was ongeveer 1,3 seconde en 210 tot 240 kB.

  5. 5

    Sentinel-2: zoeken mag, downloaden vraagt een account

    De Copernicus Data Space heeft een STAC-API zonder robots.txt. Zoek met POST en een CQL2-JSON-filter op eo:cloud_cover. De banden staan op S3 (s3://eodata/…) en de download-API geeft zonder token HTTP 401; de miniatuur (thumbnail) is wel open, maar dat is de hele tegel van 110 km in 9 kB. Voor echte Sentinel-2-pixels maak je een gratis account aan, of je gebruikt Planetary Computer (collectie sentinel-2-l2a) of de HLS-laag van NASA GIBS (stap 6).

    curl -X POST "https://stac.dataspace.copernicus.eu/v1/search" \
      -H 'Content-Type: application/json' -d '{"collections":["sentinel-2-l2a"],"bbox":[3.95,51.92,4.10,52.00],"datetime":"2025-04-01T00:00:00Z/2025-05-31T23:59:59Z","filter-lang":"cql2-json","filter":{"op":"<","args":[{"property":"eo:cloud_cover"},5]},"sortby":[{"field":"properties.eo:cloud_cover","direction":"asc"}],"limit":5,"fields":{"include":["id","properties.datetime","properties.eo:cloud_cover"],"exclude":["assets","links","geometry","bbox"]}}'
    {"type":"FeatureCollection","links":[{"rel":"next", … "token":"next:sentinel-2-l2a:S2A_MSIL2A_20250519T105711_N0511_R094_T31UET_20250519T150605"}}, …],
     "features":[
      {"id":"S2B_MSIL2A_20250512T105619_N0511_R094_T31UET_20250512T133423","properties":{"eo:cloud_cover":0.006779,"datetime":"2025-05-12T10:56:19.024Z"}},
      {"id":"S2B_MSIL2A_20250412T105619_N0511_R094_T31UET_20250412T132010","properties":{"eo:cloud_cover":0.012418,"datetime":"2025-04-12T10:56:19.024Z"}},
      {"id":"S2C_MSIL2A_20250427T105641_N0511_R094_T31UET_20250427T163412","properties":{"eo:cloud_cover":0.026506,"datetime":"2025-04-27T10:56:41.025Z"}}, …]}
  6. 6

    Kant-en-klare beelden van NASA GIBS, ook uit de jaren 80

    GIBS is een open WMS zonder sleutel. Voor voor-en-na zijn twee lagen handig: HLS_S30_Nadir_BRDF_Adjusted_Reflectance (Sentinel-2 omgerekend naar 30 meter, per dag sinds november 2015, tot 11 oktober 2026) en Landsat_WELD_CorrectedReflectance_TrueColor_Global_Annual (jaarmozaïeken, alleen met de datums 1983-12-01 tot 1985-12-01, 1988-12-01 tot 1990-12-01 en 1998-12-01 tot 2000-12-01). Welke datums een laag heeft, staat in GetCapabilities (2,6 MB) onder Dimension. In WMS 1.3.0 met EPSG:4326 is BBOX breedte,lengte. Een datum zonder opname geeft een zwart beeld en HTTP 200, geen fout (WELD op 1995-12-01: een zwarte JPEG van 3 kB). Controleer de bestandsgrootte en kijk ook zelf naar wolken.

Hoe de bronnen samenkomen

  • LandsatCopernicus Sentinel-2via coördinaten (bbox) en datum

    Landsat gaat terug tot 1982 (Level-2) op 30 meter, Sentinel-2 begint in 2015 op 10 meter. Gebruik Landsat voor het 'voor' en Sentinel-2 voor een scherp 'na', en zeg dat de pixelgrootte verschilt.

  • LandsatNASA GIBS en Worldviewvia coördinaten en datum (GIBS-tijd TIME=JJJJ-MM-DD)

    GIBS levert kant-en-klare plaatjes uit Landsat (WELD) en uit Landsat en Sentinel-2 samen (HLS). Handig om snel te kijken of een datum helder was voordat je echte pixels ophaalt.

Laat AI het bouwen

Plak deze prompt in Claude, ChatGPT, Cursor of Lovable. Hij noemt de echte endpoints, de koppelsleutels en de valkuilen, zodat de assistent meteen werkende code schrijft. Controleer de uitkomst altijd met de bron zelf.

Bouw een web-app (Next.js met een kleine server-route, of Python met Flask) waarin ik op een kaart een vak teken en twee jaren kies. De app laat twee wolkenvrije satellietbeelden naast elkaar zien met een schuif, en berekent hoeveel procent van het vak water was in elk jaar.

Data, alle zonder sleutel:
1. Zoeken (USGS Landsat STAC): https://landsatlook.usgs.gov/stac-server/search?collections=landsat-c2l2-sr&bbox=<w,z,o,n>&datetime=<jaar>-04-01T00:00:00Z/<jaar>-09-30T23:59:59Z&query={"eo:cloud_cover":{"lt":10}}&sortby=properties.eo:cloud_cover&fields=id,properties.datetime,properties.eo:cloud_cover,properties.platform,-assets,-links,-geometry
   Tellen: https://landsatlook.usgs.gov/stac-server/aggregate?collections=landsat-c2l2-sr&bbox=<w,z,o,n>&aggregations=total_count,platform_frequency
2. Beeld en meting (Microsoft Planetary Computer, data-API):
   - Uitsnede: https://planetarycomputer.microsoft.com/api/data/v1/item/bbox/<w,z,o,n>/800x600.png?collection=landsat-c2-l2&item=<id>&assets=red&assets=green&assets=blue&color_formula=gamma RGB 2.7, saturation 1.5, sigmoidal RGB 15 0.55&nodata=0
   - Statistiek: POST https://planetarycomputer.microsoft.com/api/data/v1/item/statistics?collection=landsat-c2-l2&item=<id>&assets=qa_pixel&categorical=true&max_size=1024 met het vak als GeoJSON-Feature in de body.
3. Sentinel-2 zoeken (Copernicus): POST https://stac.dataspace.copernicus.eu/v1/search met collections ["sentinel-2-l2a"], bbox, datetime en een CQL2-JSON-filter op eo:cloud_cover.
4. Kant-en-klare beelden (NASA GIBS WMS): https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi?SERVICE=WMS&REQUEST=GetMap&VERSION=1.3.0&LAYERS=HLS_S30_Nadir_BRDF_Adjusted_Reflectance&CRS=EPSG:4326&BBOX=<z,w,n,o>&WIDTH=800&HEIGHT=600&FORMAT=image/jpeg&TIME=2025-05-12

Wat je moet weten:
- sortby moet properties.eo:cloud_cover of -properties.datetime zijn; zonder 'properties.' komt er een HTTP 400. fields houdt assets en links tenzij je -assets,-links meegeeft.
- eo:cloud_cover geldt voor de hele scène (185 km), niet voor het vak: tel ook de wolkpixels in het vak (QA-bit 3) en kies anders een andere opname.
- Sla Landsat 7 na 31 mei 2003 over (strepen) en kies Tier 1 (_T1_ in het id).
- USGS-id naar Planetary Computer-id: verwerkingsdatum en _SR eraf. LT05_L2SP_199024_20060716_20200831_02_T1_SR wordt LT05_L2SP_199024_20060716_02_T1.
- QA_PIXEL is een bitmasker: waarde & 128 = water, & 8 = wolk, & 16 = wolkschaduw. Water in procenten = pixels met bit 7 / alle pixels. Het aantal pixels verschilt per opname (andere baan): reken in procenten van het vak.
- Downloads bij USGS vragen een login; Copernicus-banden staan op S3 en de download-API geeft 401 zonder token. Planetary Computer en GIBS werken zonder account. Planetary Computer liep op 15 oktober 2026 ongeveer een week achter op USGS.
- Volgorde van coördinaten: STAC en Planetary Computer lengte,breedte; WMS 1.3.0 met EPSG:4326 breedte,lengte.
- Kies voor beide jaren hetzelfde seizoen als het kan: eb en vloed, natte zandvlakten en bladeren aan de bomen veranderen de meting.
- Bronvermelding: 'Landsat-beelden: USGS/NASA Landsat Program', Copernicus Sentinel-2 (bewerkt), NASA GIBS. Stuur een eigen User-Agent mee.

Uitkomst: kaart met teken-gereedschap, twee jaarkeuzes, een vergelijkschuif met beide beelden en hun datum en satelliet, en eronder 'Water: 68,7% (2006) en 53,9% (2025), ongeveer 13 km² meer land', met de kanttekening dat het waterbit een schatting is.

Probeer het zelf

De kern van het project in een klein script. Nodig: Python 3.10+ en requests. Getest op 2026-10-17; hieronder de echte uitvoer van die proefdraai.

# Satelliet voor en na: hoeveel land kwam er bij op de Maasvlakte tussen 2006 en 2025?
# Bronnen: Landsat (USGS STAC + Microsoft Planetary Computer), Copernicus Sentinel-2 (STAC), NASA GIBS (WMS). Geen sleutel.
import json, requests

UA = {"User-Agent": "mijn-project/1.0 (+jij@voorbeeld.nl)"}
VAK = [3.95, 51.92, 4.10, 52.00]                  # lengte/breedte: west, zuid, oost, noord (Maasvlakte)
USGS = "https://landsatlook.usgs.gov/stac-server"
PC = "https://planetarycomputer.microsoft.com/api"
WOLK = json.dumps({"eo:cloud_cover": {"lt": 10}})

# 1. Hoeveel Landsat-opnamen zijn er van dit vak, en hoeveel bijna wolkenvrij? Eén aanroep met de aggregatie-extensie.
agg = requests.get(f"{USGS}/aggregate", headers=UA, timeout=60, params={
    "collections": "landsat-c2l2-sr", "bbox": ",".join(map(str, VAK)), "aggregations": "total_count,platform_frequency"}).json()
helder = requests.get(f"{USGS}/aggregate", headers=UA, timeout=60, params={
    "collections": "landsat-c2l2-sr", "bbox": ",".join(map(str, VAK)), "query": WOLK, "aggregations": "total_count"}).json()
totaal = agg["aggregations"][0]["value"]
per = {b["key"]: b["frequency"] for b in agg["aggregations"][1]["buckets"]}
print(f"Landsat Level-2 boven het vak: {totaal} opnamen, {helder['aggregations'][0]['value']} met minder dan 10% wolken")
print("  per satelliet:", ", ".join(f"{k} {v}" for k, v in sorted(per.items())))

# 2. De helderste opname uit het voorjaar en de zomer van elk jaar. Landsat 7 heeft sinds 2003 strepen: sla die over,
#    net als Tier 2 (T2, minder nauwkeurig gelegd).
def beste(jaar):
    r = requests.get(f"{USGS}/search", headers=UA, timeout=60, params={
        "collections": "landsat-c2l2-sr", "bbox": ",".join(map(str, VAK)), "query": WOLK, "limit": 20,
        "datetime": f"{jaar}-04-01T00:00:00Z/{jaar}-09-30T23:59:59Z", "sortby": "properties.eo:cloud_cover",
        "fields": "id,properties.datetime,properties.eo:cloud_cover,properties.platform,-assets,-links,-geometry"}).json()
    return next(f for f in r["features"] if f["properties"]["platform"] != "LANDSAT_7" and "_T1_" in f["id"])

# 3. Planetary Computer: zelfde opname, maar zonder account. Tel per pixel het waterbit (bit 7) van de QA_PIXEL-band.
def water(usgs_id):
    d = usgs_id.split("_")                         # LT05_L2SP_199024_20060716_20200831_02_T1_SR
    pc_id = "_".join(d[:4] + d[5:7])               # ->  LT05_L2SP_199024_20060716_02_T1
    vlak = {"type": "Feature", "properties": {}, "geometry": {"type": "Polygon", "coordinates": [[
        [VAK[0], VAK[1]], [VAK[2], VAK[1]], [VAK[2], VAK[3]], [VAK[0], VAK[3]], [VAK[0], VAK[1]]]]}}
    st = requests.post(f"{PC}/data/v1/item/statistics", headers=UA, json=vlak, timeout=120, params={
        "collection": "landsat-c2-l2", "item": pc_id, "assets": "qa_pixel", "categorical": "true", "max_size": 1024}).json()
    aantallen, waarden = next(iter(st["properties"]["statistics"].values()))["histogram"]
    nat = sum(n for n, v in zip(aantallen, waarden) if int(v) & 128)
    beeld = requests.get(f"{PC}/data/v1/item/bbox/{','.join(map(str, VAK))}/800x600.png", headers=UA, timeout=120, params={
        "collection": "landsat-c2-l2", "item": pc_id, "assets": ["red", "green", "blue"], "nodata": 0,
        "color_formula": "gamma RGB 2.7, saturation 1.5, sigmoidal RGB 15 0.55"})
    open(f"{pc_id}.png", "wb").write(beeld.content)
    return pc_id, nat / sum(aantallen), len(beeld.content)

# Oppervlak van het vak in km2 (bij benadering, op 52 graden noorderbreedte).
km2 = (VAK[2] - VAK[0]) * 111.32 * 0.6157 * (VAK[3] - VAK[1]) * 111.32
uitkomst = {}
for jaar in (2006, 2025):
    f = beste(jaar)
    pc_id, aandeel, grootte = water(f["id"])
    uitkomst[jaar] = aandeel
    print(f"\n{jaar}: {f['properties']['platform']} {f['properties']['datetime'][:10]}, wolken (hele scène) {f['properties']['eo:cloud_cover']}%")
    print(f"  {pc_id}: water {aandeel:.1%} van het vak; beeld opgeslagen ({grootte // 1000} kB)")
print(f"\nVak {km2:.0f} km2: water {uitkomst[2006]:.1%} -> {uitkomst[2025]:.1%}, "
      f"dus ongeveer {(uitkomst[2006] - uitkomst[2025]) * km2:.0f} km2 meer land")

# 4. Sentinel-2 (Copernicus): zoeken mag zonder account, de banden downloaden niet (401 zonder token).
s2 = requests.post("https://stac.dataspace.copernicus.eu/v1/search", headers=UA, timeout=60, json={
    "collections": ["sentinel-2-l2a"], "bbox": VAK, "datetime": "2025-04-01T00:00:00Z/2025-05-31T23:59:59Z", "limit": 3,
    "filter-lang": "cql2-json", "filter": {"op": "<", "args": [{"property": "eo:cloud_cover"}, 5]},
    "sortby": [{"field": "properties.eo:cloud_cover", "direction": "asc"}]}).json()
s = s2["features"][0]
print(f"\nSentinel-2 helderst in april-mei 2025: {s['id'][:24]} … wolken {s['properties']['eo:cloud_cover']:.3f}%")
print(f"  banden: {s['assets']['B04_10m']['href'][:40]}… (S3, account nodig)")

# 5. NASA GIBS: kant-en-klare beelden, open WMS. HLS_S30 = Sentinel-2 op 30 m; Landsat WELD = jaarmozaïek uit de jaren 80.
for laag, datum in [("Landsat_WELD_CorrectedReflectance_TrueColor_Global_Annual", "1985-12-01"),
                    ("HLS_S30_Nadir_BRDF_Adjusted_Reflectance", s["properties"]["datetime"][:10])]:
    r = requests.get("https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi", headers=UA, timeout=120, params={
        "SERVICE": "WMS", "REQUEST": "GetMap", "VERSION": "1.3.0", "LAYERS": laag, "CRS": "EPSG:4326",
        "BBOX": f"{VAK[1]},{VAK[0]},{VAK[3]},{VAK[2]}", "WIDTH": 800, "HEIGHT": 600, "FORMAT": "image/jpeg", "TIME": datum})
    open(f"gibs_{laag[:10]}_{datum}.jpg", "wb").write(r.content)
    print(f"GIBS {laag} {datum}: {r.status_code} {r.headers['Content-Type']} {len(r.content) // 1000} kB")
Uitvoer
Landsat Level-2 boven het vak: 2383 opnamen, 292 met minder dan 10% wolken
  per satelliet: LANDSAT_4 8, LANDSAT_5 919, LANDSAT_7 675, LANDSAT_8 574, LANDSAT_9 207

2006: LANDSAT_5 2006-07-16, wolken (hele scène) 0%
  LT05_L2SP_199024_20060716_02_T1: water 68.7% van het vak; beeld opgeslagen (237 kB)

2025: LANDSAT_9 2025-04-07, wolken (hele scène) 0.23%
  LC09_L2SP_199024_20250407_02_T1: water 53.9% van het vak; beeld opgeslagen (211 kB)

Vak 92 km2: water 68.7% -> 53.9%, dus ongeveer 13 km2 meer land

Sentinel-2 helderst in april-mei 2025: S2B_MSIL2A_20250512T1056 … wolken 0.007%
  banden: s3://eodata/Sentinel-2/MSI/L2A/2025/05/1… (S3, account nodig)
GIBS Landsat_WELD_CorrectedReflectance_TrueColor_Global_Annual 1985-12-01: 200 image/jpeg 53 kB
GIBS HLS_S30_Nadir_BRDF_Adjusted_Reflectance 2025-05-12: 200 image/jpeg 72 kB

Waar het misgaat

  • Wolken worden per scène geteld, niet per vak. Een scène van 185 km met 0% wolken is in jouw vak helder, maar een scène met 8% kan precies boven jouw polder bewolkt zijn. Tel daarom ook de wolkpixels (QA-bit 3) in je eigen vak. In de 2025-opname waren 1.257 van de 93.632 pixels in het vak als wolk gemarkeerd.
  • Downloaden is bij elke bron anders geregeld: USGS stuurt elke download naar een inlogscherm, Copernicus geeft HTTP 401 zonder token (alleen een miniatuur van 9 kB is open), Planetary Computer en GIBS werken zonder account. Bouw je app op die laatste twee als je geen accounts wilt beheren.
  • De ids verschillen tussen USGS en Planetary Computer (verwerkingsdatum en _SR vallen weg). Wie de USGS-id rechtstreeks aan Planetary Computer geeft, krijgt HTTP 404 ('No item … found in landsat-c2-l2 collection').
  • Het waterbit is een schatting. Natte zandvlakten, schaduw en eb en vloed veranderen de uitkomst, en de twee opnamen komen uit een ander seizoen (juli 2006 en april 2025). Presenteer '13 km² meer land' als orde van grootte, niet als het officiële oppervlak van Maasvlakte 2.
  • Coördinaten draaien om tussen diensten: STAC en Planetary Computer lengte,breedte (3.95,51.92,…), GIBS-WMS 1.3.0 met EPSG:4326 breedte,lengte (51.92,3.95,…). GIBS geeft bij een datum zonder opname gewoon een zwart plaatje terug met HTTP 200.
  • Landsat 7 heeft sinds 31 mei 2003 strepen zonder data (ongeveer 22% van het beeld). De helderste opnamen van 2006 waren allebei Landsat 7; het script slaat ze over en neemt Landsat 5.

Verder bouwen

  • Maak een tijdreeks in plaats van twee beelden: neem per jaar de helderste zomeropname sinds 1985 en teken het aandeel water of groen (NDVI uit red en nir08) als lijn. Zo zie je in welk jaar de Maasvlakte 2 uit zee kwam.
  • Knip het vak uit op een gemeentegrens van PDOK (wijken en buurten) in plaats van een rechthoek, en meet hoeveel een gemeente versteende sinds 1985.
  • Gebruik voor het 'na'-beeld echte Sentinel-2-pixels op 10 meter via Planetary Computer (collectie sentinel-2-l2a) of met een gratis Copernicus-account, en zet de scherpte naast die van Landsat.
  • Maak een gif of video van alle heldere opnamen (292 voor de Maasvlakte) met de datum erin gebrand.

Meer met deze data

Landsat-opnamen van Amsterdam: 138 opnamen in 2025, 30% minder dan in 1985

Landsat-opnamen van Amsterdam, 1985 – 2025, in opnamen. Het hoogste punt was 1985 (196).

Bron: USGS, LandsatLook STAC (aggregate, Collection 2 Level-1) · opgehaald 25 oktober 2026 · selectie: Opnamen waarop de Dam in Amsterdam (4.893 O, 52.373 N) staat, ongeacht bewolking; Vanaf 1985: het eerste volle jaar van Landsat 5, met opnamen om de zestien dagen (Landsat 1 begon in juli 1972 met veel minder opnamen)Open de tabel Los blok

Nederland op een bijna wolkenloze 12 april 2025, gezien door de VIIRS-camera van NASA

Ware kleuren uit de kaartdienst GIBS van NASA, laag VIIRS_SNPP_CorrectedReflectance_TrueColor. Je ziet de Waddeneilanden, het IJsselmeer en de Flevopolders, de Zeeuwse delta en de lichte vlekken van de steden. De rechte naad rechts is de rand tussen twee overvluchten. Eén pixel is hier honderden meters: genoeg voor het land, te grof voor je straat.

Bron: NASA GIBS (WMS), VIIRS true colour · opgehaald 18 oktober 2026Open de tabel Los blok

De bronnen3

Landsat

USGS en NASAWereld, 30 meter

De Amerikaanse Landsat-satellieten fotograferen de aarde al sinds 1972. Daarmee is het de langste reeks satellietbeelden die er is: boven Amsterdam alleen al 6.754 opnamen, de oudste van 5 september 1972. Detail: 30 meter per pixel, in de eerste jaren 60 meter.

APISatellietbeeldDownloadAardobservatieWonen en ruimteKlimaat en milieu
Achter op schema
bijgewerkt 5 dagen geleden

Copernicus Sentinel-2Uitgewerkt

ESA en Europese CommissieWereld, 10 meter

De Sentinel-2-satellieten fotograferen heel Nederland om de paar dagen, in dertien kleurbanden. Detailniveau: 10 meter per pixel.

SatellietbeeldAPIAardobservatieKlimaat en milieuWonen en ruimte
Actueel
bijgewerkt gisteren

NASA GIBS en WorldviewUitgewerkt

NASAWereld, 250 – 750 meter

Meer dan duizend kaartlagen van NASA-satellieten, kant-en-klaar als afbeelding: van het dagelijkse ware-kleurenbeeld tot nachtlicht, branden en sneeuw.

OpenSatellietbeeldKaartlaagAardobservatieKlimaat en milieu
Actueel
bijgewerkt 15 uur geleden

Meer om te bouwen