303.525 datasets geïndexeerd1.419 uitgevers
Open Data IndexDe index van open data over Nederland
Open Data Index›Bouwen›Monumentenwandeling door je eigen buurt
AppOm te beginnenErfgoed en cultuur

Monumentenwandeling door je eigen buurt

Een app die rond elk startpunt een wandeling langs tien rijksmonumenten maakt, met adres, beschrijving, foto, een oud beeld uit het Rijksmuseum en een café onderweg.

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("monumentenwandeling")
  • geef_bron("rijksmonumenten")
  • geef_bron("openstreetmap")
  • geef_bron("rijksmuseum")
De assistent

Ik heb het project, de geteste aanroepen en de valkuilen. Ik bouw een app met Rijksmonumentenregister, OpenStreetMap en Rijksmuseum collectie. 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
Wandelgids Deventerroute 1

Rond de Brink

10 van de 503 rijksmonumenten binnen 600 m · 1,0 km

12345678910STARTN0100 m
  1. 1
    Brink 6618e eeuw79 m
  2. 2
    Kleine Overstraat 5018e–19e eeuw67 m
  3. 3
    Brink 7818e eeuw4 m
  4. 4
    Brink 37gevel ca. 1860–7074 m
  5. 5
    Menstraat 918e eeuw67 m
  6. 6
    Spijkerboorsteeg 12162717 m
  7. 7
    Assenstraat 618e eeuw · poortje12 m
  8. 8
    Assenstraat 50161790 m
  9. 9
    Polstraat 53niet gedateerd117 m
  10. 10
    Polstraat 66 A17e/18e eeuw77 m
monumentpandander rijksmonumentcafé het dichtstbij
Mockup

Dit is een mockup, geen werkende versie, met de route uit onze proefdraai rond de Brink in Deventer van 16 oktober 2026 (RCE, OpenStreetMap-cafés stand 27 juli 2026) en de kaart uit de RCE-monumentpunten en de BAG-panden van PDOK, opgehaald op 17 oktober 2026. De MCP-server zet je aan met het adres op Voor AI.

Voor wie

Wandelaars, gidsen, VVV's en gemeenten, scholen die een excursie plannen, en iedereen die wil weten wat dat oude pand om de hoek is.

Wat je krijgt

Een kaart met een genummerde route langs tien rijksmonumenten, en per stop het adres, de soort monument, de beschrijving uit het monumentenregister, een foto van de RCE en het dichtstbijzijnde café. Bovenaan een oude foto van de plek uit het Rijksmuseum. In de proefdraai op 16 oktober 2026 rond de Brink in Deventer stonden binnen 600 meter 503 rijksmonumenten; alle 503 hadden een omschrijving en 329 een foto. Het script koos tien monumenten met foto, steeds minstens 75 meter uit elkaar, samen 1,0 km hemelsbreed: van Brink 66 via de Kleine Overstraat, de Menstraat, de Spijkerboorsteeg (een topgevel uit 1627) en de Assenstraat naar de Polstraat. OpenStreetMap gaf in hetzelfde vak 26 cafés, 75 bankjes en 6 watertappunten (stand 27 juli 2026), maar maar 21 objecten met een monumentnummer (ref:rce): voor de monumenten zelf is de RCE de bron. Het Rijksmuseum had 9 objecten met 'Brink Deventer' in de titel en een afbeelding, zoals een foto 'De Brink te Deventer' uit 1873.

Rijksmonumenten per gemeente: het meest Amsterdam (7.679 rijksmonumenten), dan Maastricht en Utrecht

Rijksmonumenten per gemeente, oktober 2026, in rijksmonumenten. Totaal: 63.098; de grootste 12 van 342 categorieën staan in de grafiek. Amsterdam is 12% van het totaal. Geteld in de linked data van de RCE, alleen objecten met de status rijksmonument.

Bron: Rijksdienst voor het Cultureel Erfgoed, linked data (SPARQL, dataset rce/cho) · opgehaald 25 oktober 2026 · selectie: juridische status: rijksmonumentOpen de tabel Los blok

Zo zou je kunnen starten6 stappen

  1. 1

    Vind de monumenten rond je startpunt (WFS)

    De kaartdienst van de RCE geeft de monumentpunten als GeoJSON met nummer, status, hoofd- en subcategorie en een link naar het register, maar zonder naam of adres. Vraag een vak rond het startpunt en reken zelf de afstand uit. Let op de volgorde in bbox: met urn:ogc:def:crs:EPSG::4326 is het breedte,lengte (289 punten in het vak), met de korte vorm EPSG:4326 lengte,breedte; de verkeerde volgorde geeft 0 punten en geen foutmelding. Zonder count krijg je de hele laag (63.083 punten).

    https://services.rce.geovoorziening.nl/rce/wfs?request=GetFeature&service=WFS&version=2.0.0&typeNames=rce:NationalListedMonumentPoints&outputFormat=application/json&count=2&srsName=EPSG:4326&bbox=52.2490,6.1550,52.2535,6.1625,urn:ogc:def:crs:EPSG::4326
    {"type":"FeatureCollection","features":[
      {"type":"Feature","id":"NationalListedMonumentPoints.10018","geometry":{"type":"Point","coordinates":[6.1572,52.2533]},
       "properties":{"id":10018,"rijksmonument_nummer":12660,"complex_nummer":null,"juridische_status":"rijksmonument",
         "aard_monument":"onroerend gebouwd","hoofdcategorie":"Woningen en woningbouwcomplexen","subcategorie":"Werk-woonhuis",
         "rijksmonumenturl":"https://monumentenregister.cultureelerfgoed.nl/monumenten/12660"}},
      {"type":"Feature","id":"NationalListedMonumentPoints.10184", … "rijksmonument_nummer":12860, … "subcategorie":"Omwalling", …}],
     "totalFeatures":289,"numberMatched":289,"numberReturned":2,"timeStamp":"2026-10-16T21:36:29.360Z", …}
  2. 2

    Haal adres, beschrijving en foto op (SPARQL)

    De linked data van de RCE hebben wat de kaartdienst mist. Zoek op ceo:rijksmonumentnummer (als tekst, "12660") en vraag met VALUES alle nummers in één keer. De omschrijving zit in ceo:heeftOmschrijving/ceo:omschrijving, het adres in ceo:heeftBasisregistratieRelatie/ceo:heeftBAGRelatie/ceo:volledigAdres, een foto uit de beeldbank van de RCE in foaf:depiction (images.memorix.nl, 640 bij 480). Gegevens staan er dubbel in: gebruik SAMPLE of DISTINCT. Met Accept application/json krijg je een platte lijst. Een zoekvraag mag 58 seconden duren.

    curl -X POST "https://api.linkeddata.cultureelerfgoed.nl/datasets/rce/cho/services/cho/sparql" \
      -d 'query=PREFIX ceo: <https://linkeddata.cultureelerfgoed.nl/def/ceo#>
    PREFIX foaf: <http://xmlns.com/foaf/0.1/>
    SELECT ?nummer (SAMPLE(?adres) AS ?adres) (SAMPLE(?tekst) AS ?omschrijving) (SAMPLE(?foto) AS ?foto) WHERE {
      VALUES ?nummer { "12660" "12860" "12500" }
      ?m ceo:rijksmonumentnummer ?nummer .
      OPTIONAL { ?m ceo:heeftOmschrijving/ceo:omschrijving ?tekst }
      OPTIONAL { ?m ceo:heeftBasisregistratieRelatie/ceo:heeftBAGRelatie/ceo:volledigAdres ?adres }
      OPTIONAL { ?m foaf:depiction ?foto }
    } GROUP BY ?nummer
    '
    [
    { "nummer": "12660", "adres": "Pontsteeg 5",
      "omschrijving": "Onderkelderd pand met lijstgevel, XIX A. XIX B winkelpui.",
      "foto": "https://images.memorix.nl/rce/thumb/640x480/71add71a-892f-74a1-6e36-c4e8784bf62f.jpg" },
    { "nummer": "12860", "adres": "Bokkingshang 13",
      "omschrijving": "Pand, waarin wellicht een deel van de laat-middeleeuwse stadsmuur is bewaard gebleven.",
      "foto": null },
    { "nummer": "12500", "adres": "Brink 37",
      "omschrijving": "Onderkelderd hoekpand met omstreeks 1860/1870 gepleisterde lijstgevel; …",
      "foto": "https://images.memorix.nl/rce/thumb/640x480/d2b33ec7-c792-ee56-afb4-c933b4235045.jpg" }
    ]
  3. 3

    Zoek cafés en bankjes in OpenStreetMap (ohsome)

    Overpass en Nominatim zijn in hun robots.txt uitgesloten voor scripts; de ohsome-API van HeiGIT (zonder robots.txt) kan tellen en, via /elements/bbox, objecten met hun tags en omhullend vak teruggeven. /elements/centroid en /elements/geometry gaven op 16 en 17 oktober 2026 HTTP 403. Let op: ohsome wil het vak als lengte,breedte (andersom dan de WFS), de data lopen ongeveer drie maanden achter (stand 27 juli 2026), en een vraag duurt 15 tot 25 seconden. Op de avond van 16 oktober sloot de server elke vraag na 60 seconden af; bouw een herhaalpoging in.

    https://api.ohsome.org/v1/elements/count/groupBy/tag?bboxes=6.1513,52.2459,6.1669,52.2567&filter=amenity in (bench,cafe,toilets,drinking_water)&groupByKey=amenity
    {"attribution":{"url":"https://ohsome.org/copyrights","text":"© OpenStreetMap contributors"},"apiVersion":"1.10.4",
     "groupByResult":[
      {"groupByObject":"amenity=bench","result":[{"timestamp":"2026-07-27T09:00:00Z","value":71.0}]},
      {"groupByObject":"amenity=cafe","result":[{"timestamp":"2026-07-27T09:00:00Z","value":26.0}]},
      {"groupByObject":"amenity=drinking_water","result":[{"timestamp":"2026-07-27T09:00:00Z","value":6.0}]}]}
  4. 4

    Controleer wat OSM over de monumenten zelf weet

    Vrijwilligers zetten het monumentnummer in de tag ref:rce, soms met name, wikidata en start_date. In het kleine vak van stap 1 waren dat 13 objecten tegen 289 RCE-punten. Gebruik OSM dus voor wat er omheen is (cafés, bankjes, toiletten) en de RCE voor de monumenten. Met /elements/bbox en properties=tags krijg je de tags erbij.

    https://api.ohsome.org/v1/elements/bbox?bboxes=6.1550,52.2490,6.1625,52.2535&filter=ref:rce%3D*&properties=tags
    {"type":"FeatureCollection","features":[
      {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[6.1561289,52.2508369],[6.1564293,52.2508369],[6.1564293,52.2510218],[6.1561289,52.2510218],[6.1561289,52.2508369]]]},
       "properties":{"@osmId":"way/262225591","@snapshotTimestamp":"2026-07-27T09:00:00Z","building":"house","heritage":"2","heritage:operator":"rce",
         "historic":"building","ref:bag":"0150100000001090","ref:rce":"12758","start_date":"1870","wikidata":"Q17346593"}},
      {"type":"Feature", … "properties":{"@osmId":"way/262225677", … "name":"Kronenburg","note":"Gotische gevel Boterstraat 4","ref:rce":"12503", …}},
      …]}
  5. 5

    Zoek een oud beeld van de plek in het Rijksmuseum

    De zoek-API van het Rijksmuseum (data.rijksmuseum.nl, geen sleutel) zoekt in titels met title=, en imageAvailable=true geeft alleen objecten met een beeld. Het antwoord bevat alleen identifiers; de gegevens per object haal je op met _profile=la-framed (Linked Art). Zoek op plaats én straat ('Brink Deventer', 9 objecten): op alleen 'Deventer' kreeg je 321 objecten met een beeld, van de hele stad. Controleer per object de rechten; de meeste oude foto's zijn publiek domein.

    https://data.rijksmuseum.nl/search/collection?title=Brink Deventer&imageAvailable=true
    {"@context":"https://linked.art/ns/v1/search.json","id":"https://data.rijksmuseum.nl/search/collection?title=Brink%20Deventer&imageAvailable=true",
     "type":"OrderedCollectionPage","partOf":{…,"type":"OrderedCollection","totalItems":9, …},
     "orderedItems":[{"id":"https://id.rijksmuseum.nl/200142146","type":"HumanMadeObject"},
                     {"id":"https://id.rijksmuseum.nl/200325745","type":"HumanMadeObject"}, …]}
  6. 6

    Van object naar IIIF-beeld

    Het beeld zit drie stappen diep: object, dan shows (een VisualItem), dan digitally_shown_by (een DigitalObject) met access_point, een IIIF-adres op iiif.micr.io. Soms staat het IIIF-adres ook in subject_of van het object, maar niet altijd (bij RP-F-F17927 niet): volg de lange weg. Vervang full/max door full/800, voor een beeld van 800 pixels breed (50 kB).

    https://id.rijksmuseum.nl/50089861211057449110105?_profile=la-framed
    {
      "@context": "https://linked.art/ns/v1/linked-art.json",
      "id": "https://id.rijksmuseum.nl/50089861211057449110105",
      "type": "DigitalObject",
      "access_point": [ { "id": "https://iiif.micr.io/ZHeyA/full/max/0/default.jpg", "type": "DigitalObject" } ],
      "digitally_shows": [ { "id": "https://id.rijksmuseum.nl/202325745", "type": "VisualItem" } ],
      "referred_to_by": [ { …, "content": "downloadbaar" }, { …, "content": "zichtbaar" } ]
    }

Hoe de bronnen samenkomen

  • RijksmonumentenregisterOpenStreetMapvia monumentnummer (RCE rijksmonument_nummer = OSM-tag ref:rce) en coördinaten

    Waar een OSM-object ref:rce heeft, krijg je extra gegevens zoals naam, bouwjaar (start_date) en een Wikidata-id. Voor de rest koppel je op afstand: het café of bankje het dichtst bij elke stop.

  • RijksmonumentenregisterRijksmuseum collectievia plaats- en straatnaam in de titel (adres uit de linked data)

    Er is geen gedeelde sleutel tussen monumentenregister en museumcollectie. Zoek in het Rijksmuseum op de plaats en de straat van de stop, en laat de gebruiker zien dat de koppeling op woorden gebeurt.

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 mobiele web-app (één HTML-bestand met JavaScript en Leaflet, of Next.js) die rond mijn locatie of een adres een wandeling langs tien rijksmonumenten maakt. Per stop: adres, soort monument, beschrijving, foto en het dichtstbijzijnde café. Bovenaan een oude foto van de plek uit het Rijksmuseum.

Data, alle zonder sleutel:
1. Monumentpunten (RCE, WFS, GeoJSON): https://services.rce.geovoorziening.nl/rce/wfs?request=GetFeature&service=WFS&version=2.0.0&typeNames=rce:NationalListedMonumentPoints&outputFormat=application/json&srsName=EPSG:4326&count=1000&bbox=<minbreedte>,<minlengte>,<maxbreedte>,<maxlengte>,urn:ogc:def:crs:EPSG::4326
2. Adres, omschrijving en foto (RCE linked data, SPARQL, POST met query=…, Accept: application/json): https://api.linkeddata.cultureelerfgoed.nl/datasets/rce/cho/services/cho/sparql
   SELECT ?nummer (SAMPLE(?adres) AS ?adres) (SAMPLE(?tekst) AS ?omschrijving) (SAMPLE(?foto) AS ?foto) WHERE { VALUES ?nummer { "12660" … } ?m ceo:rijksmonumentnummer ?nummer . OPTIONAL { ?m ceo:heeftOmschrijving/ceo:omschrijving ?tekst } OPTIONAL { ?m ceo:heeftBasisregistratieRelatie/ceo:heeftBAGRelatie/ceo:volledigAdres ?adres } OPTIONAL { ?m foaf:depiction ?foto } } GROUP BY ?nummer
   (PREFIX ceo: <https://linkeddata.cultureelerfgoed.nl/def/ceo#>, foaf: <http://xmlns.com/foaf/0.1/>)
3. Cafés en bankjes (OpenStreetMap via ohsome): https://api.ohsome.org/v1/elements/bbox?bboxes=<minlengte>,<minbreedte>,<maxlengte>,<maxbreedte>&filter=amenity in (cafe, bench, drinking_water)&properties=tags
4. Oude beelden (Rijksmuseum): https://data.rijksmuseum.nl/search/collection?title=<straat> <plaats>&imageAvailable=true, daarna per identifier ?_profile=la-framed.

Wat je moet weten:
- WFS: met urn:ogc:def:crs:EPSG::4326 is de bbox breedte,lengte; met EPSG:4326 lengte,breedte. Fout = 0 resultaten zonder foutmelding. Zonder count komt de hele laag (63.083 punten). De punten hebben geen naam of adres; filter op juridische_status 'rijksmonument'.
- SPARQL: rijksmonumentnummer is tekst ("12660"). Gegevens staan dubbel: gebruik SAMPLE/DISTINCT. Tijdslimiet 58 seconden: vraag hooguit een paar honderd nummers per keer. Niet alle monumenten hebben een foto (Deventer-centrum: 329 van 503). Roep geen begrip-URI's op data.cultureelerfgoed.nl aan: robots.txt verbiedt dat.
- ohsome: bbox als lengte,breedte. /elements/centroid en /elements/geometry gaven HTTP 403; /elements/bbox en /elements/count werken. Een vraag duurt 15 tot 25 seconden en de data lopen ongeveer drie maanden achter. Haal OSM-data op de server op, cache ze per gebied en bouw een herhaalpoging in. Gebruik geen Overpass of Nominatim vanuit een script (robots.txt). Bronvermelding: © OpenStreetMap contributors (ODbL).
- Rijksmuseum: het beeld zit in object → shows (VisualItem) → digitally_shown_by (DigitalObject) → access_point (IIIF op iiif.micr.io). Vervang full/max door full/800, voor 800 pixels. Een paar honderd milliseconden tussen aanroepen. Zoek op straat en plaats, niet alleen de plaats.
- Kies stops die minstens 75 meter uit elkaar liggen, anders staan in een oude binnenstad alle tien stops aan één plein. Orden ze met 'dichtstbijzijnde volgende' en zeg dat de afstand hemelsbreed is.
- Licenties: RCE-gegevens CC BY 4.0 (noem 'Rijksdienst voor het Cultureel Erfgoed'); foto's uit de RCE-beeldbank met hun eigen vermelding; Rijksmuseum per object (meestal publiek domein).
- Stuur een eigen User-Agent mee bij server-aanroepen ('mijn-project/1.0 (+jij@voorbeeld.nl)').

Uitkomst: een kaart met genummerde stops en een lijn ertussen, een uitklapbare kaart per stop met foto, adres, beschrijving en link naar het monumentenregister, het café het dichtstbij met afstand, en bovenaan een carrousel met oude beelden van de plek. Onderaan de bronnen met datum.

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.

# Monumentenwandeling: tien rijksmonumenten rond een startpunt, met adres, beschrijving, foto en een looproute.
# Bronnen: RCE-kaartdienst (WFS) en RCE linked data (SPARQL), OpenStreetMap (ohsome), Rijksmuseum. Geen sleutel nodig.
import math, time, requests

UA = {"User-Agent": "mijn-project/1.0 (+jij@voorbeeld.nl)"}
START = (52.2513, 6.1591)    # breedte, lengte: de Brink in Deventer
STRAAL = 600                 # meter
AFSTAND = 75                 # minstens zoveel meter tussen twee stops
AANTAL = 10

def meter(a, b):             # afstand tussen twee punten (breedte, lengte) in meter
    dy = (a[0] - b[0]) * 111_320
    dx = (a[1] - b[1]) * 111_320 * math.cos(math.radians(a[0]))
    return math.hypot(dx, dy)

# 1. Alle monumentpunten in een vak rond het startpunt. Let op: in WFS 2.0 met EPSG:4326 is de volgorde breedte,lengte.
db = STRAAL / 111_320; dl = db / math.cos(math.radians(START[0]))
vak = f"{START[0]-db},{START[1]-dl},{START[0]+db},{START[1]+dl},urn:ogc:def:crs:EPSG::4326"
wfs = requests.get("https://services.rce.geovoorziening.nl/rce/wfs", headers=UA, timeout=60, params={
    "service": "WFS", "version": "2.0.0", "request": "GetFeature", "typeNames": "rce:NationalListedMonumentPoints",
    "outputFormat": "application/json", "srsName": "EPSG:4326", "bbox": vak, "count": 1000}).json()
punten = []
for f in wfs["features"]:
    p = f["properties"]; lon, lat = f["geometry"]["coordinates"]
    if p["juridische_status"] == "rijksmonument" and meter(START, (lat, lon)) <= STRAAL:
        punten.append({"nr": str(p["rijksmonument_nummer"]), "pos": (lat, lon), "cat": p["hoofdcategorie"], "sub": p["subcategorie"]})
print(f"{wfs['numberMatched']} monumentpunten in het vak, {len(punten)} rijksmonumenten binnen {STRAAL} m")

# 2. Adres, omschrijving en foto uit de linked data. Tel en kies met DISTINCT/SAMPLE: gegevens staan er dubbel in.
nummers = " ".join(f'"{p["nr"]}"' for p in punten)
vraag = f"""PREFIX ceo: <https://linkeddata.cultureelerfgoed.nl/def/ceo#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?nummer (SAMPLE(?adres) AS ?adres) (SAMPLE(?tekst) AS ?omschrijving) (SAMPLE(?foto) AS ?foto) WHERE {{
  VALUES ?nummer {{ {nummers} }}
  ?m ceo:rijksmonumentnummer ?nummer .
  OPTIONAL {{ ?m ceo:heeftOmschrijving/ceo:omschrijving ?tekst }}
  OPTIONAL {{ ?m ceo:heeftBasisregistratieRelatie/ceo:heeftBAGRelatie/ceo:volledigAdres ?adres }}
  OPTIONAL {{ ?m foaf:depiction ?foto }}
}} GROUP BY ?nummer"""
info = {r["nummer"]: r for r in requests.post(
    "https://api.linkeddata.cultureelerfgoed.nl/datasets/rce/cho/services/cho/sparql",
    data={"query": vraag}, headers={**UA, "Accept": "application/json"}, timeout=60).json()}
print(f"linked data: {len(info)} monumenten, {sum(1 for r in info.values() if r.get('foto'))} met foto, "
      f"{sum(1 for r in info.values() if r.get('omschrijving'))} met omschrijving")

# 3. Kies tien monumenten met foto en omschrijving, dichtbij maar niet naast elkaar, en loop van dichtbij naar dichtbij.
kandidaten = []
for p in sorted((p for p in punten if info.get(p["nr"], {}).get("foto") and info[p["nr"]].get("omschrijving")),
                key=lambda p: meter(START, p["pos"])):
    if len(kandidaten) < AANTAL and all(meter(p["pos"], k["pos"]) >= AFSTAND for k in kandidaten):
        kandidaten.append(p)
route, hier, totaal = [], START, 0
while kandidaten:
    volgende = min(kandidaten, key=lambda p: meter(hier, p["pos"]))
    totaal += meter(hier, volgende["pos"]); hier = volgende["pos"]
    route.append(volgende); kandidaten.remove(volgende)
totaal += meter(hier, START)
# 4. OpenStreetMap via ohsome (Overpass is in robots.txt uitgesloten): cafés, bankjes en water in hetzelfde vak.
#    Alleen de aggregatie- en bbox-ingangen werken anoniem; /elements/centroid en /elements/geometry gaven HTTP 403.
osm_vak = f"{START[1]-dl},{START[0]-db},{START[1]+dl},{START[0]+db}"          # ohsome: lengte,breedte (andersom dan WFS)
osm = {"features": []}
for poging in range(3):                    # ohsome is soms traag of sluit na 60 s de verbinding: probeer opnieuw
    try:
        osm = requests.get("https://api.ohsome.org/v1/elements/bbox", headers=UA, timeout=120, params={
            "bboxes": osm_vak, "filter": "amenity in (cafe, bench, drinking_water) or ref:rce=*", "properties": "tags"}).json()
        break
    except (requests.RequestException, ValueError):
        time.sleep(10 * (poging + 1))
plekken = []
for f in osm["features"]:
    (x0, y0), _, (x1, y1) = f["geometry"]["coordinates"][0][:3]
    plekken.append({**f["properties"], "pos": ((y0 + y1) / 2, (x0 + x1) / 2)})
soort = lambda t: [p for p in plekken if p.get("amenity") == t]
met_rce = {p["ref:rce"] for p in plekken if "ref:rce" in p}
print(f"OSM (stand {osm['features'][0]['properties']['@snapshotTimestamp'][:10] if plekken else '?'}): {len(soort('cafe'))} cafés, "
      f"{len(soort('bench'))} bankjes, {len(soort('drinking_water'))} watertappunten; "
      f"{len(met_rce)} objecten met ref:rce tegen {len(punten)} rijksmonumenten bij de RCE")

print(f"\nRoute langs {len(route)} monumenten, {totaal/1000:.1f} km hemelsbreed (terug naar de Brink)\n")
for i, p in enumerate(route, 1):
    r = info[p["nr"]]
    print(f"{i:2}. {r.get('adres') or '(geen adres)'} · monument {p['nr']} · {p['sub']}")
    print(f"    {r['omschrijving'][:100]}")
    if soort("cafe"):
        cafe = min(soort("cafe"), key=lambda c: meter(p["pos"], c["pos"]))
        print(f"    café het dichtstbij: {cafe.get('name', '(zonder naam)')}, {meter(p['pos'], cafe['pos']):.0f} m")
print(f"\nFoto bij stop 1: {info[route[0]['nr']]['foto']}")

# 5. Historische beelden van de plek uit het Rijksmuseum (zoek-API en Linked Art, geen sleutel).
def la(uri):   # Linked Art-gegevens van een Rijksmuseum-identifier; rustig aan, er volgen veel kleine aanroepen
    time.sleep(0.3)
    return requests.get(uri, params={"_profile": "la-framed"}, headers=UA, timeout=60).json()

zoek = requests.get("https://data.rijksmuseum.nl/search/collection", headers=UA, timeout=60,
                    params={"title": "Brink Deventer", "imageAvailable": "true"}).json()
print(f"\nRijksmuseum: {zoek['partOf']['totalItems']} objecten met 'Brink Deventer' in de titel en een afbeelding")
for item in zoek["orderedItems"][:3]:
    obj = la(item["id"])
    titel = next(x["content"] for x in obj["identified_by"] if x["type"] == "Name")
    nummer = next(x["content"] for x in obj["identified_by"] if x["type"] == "Identifier")
    jaar = obj.get("produced_by", {}).get("timespan", {}).get("identified_by", [{}])[0].get("content", "?")
    # Het beeld: object -> shows (VisualItem) -> digitally_shown_by (DigitalObject) -> access_point (IIIF).
    vis = la(obj["shows"][0]["id"])
    dig = la(vis["digitally_shown_by"][0]["id"])
    beeld = dig["access_point"][0]["id"].replace("/full/max/", "/full/800,/")   # 800 pixels breed
    print(f"  {nummer} · {titel} · {jaar} · {beeld}")
Uitvoer
519 monumentpunten in het vak, 503 rijksmonumenten binnen 600 m
linked data: 503 monumenten, 329 met foto, 503 met omschrijving
OSM (stand 2026-07-27): 26 cafés, 75 bankjes, 6 watertappunten; 21 objecten met ref:rce tegen 503 rijksmonumenten bij de RCE

Route langs 10 monumenten, 1.0 km hemelsbreed (terug naar de Brink)

 1. Brink 66 · monument 12515 · Werk-woonhuis
    Onderkelderd pand met lijstgevel. Getoogde dakkapel; strekken; oorspronkelijk hoog voorhuis; gesnede
    café het dichtstbij: Zuiderlicht, 79 m
 2. Kleine Overstraat 50 · monument 12628 · Woonhuis(K)
    Onderkelderd huis met gepleisterde lijstgevel. Nok van het dak evenwijdig aan rooilijn. Voordeuromli
    café het dichtstbij: Hans en Grietje, 67 m
 3. Brink 78 · monument 12524 · Woonhuis(K)
    Onderkelderd huis met klokgevel met natuursteen afgedekt en natuurstenen kuifstuk in rococotrant als
    café het dichtstbij: De Waagschaal, 4 m
 4. Brink 37 · monument 12500 · Woonhuis(K)
    Onderkelderd hoekpand met omstreeks 1860/1870 gepleisterde lijstgevel; de schuifvensters van de verd
    café het dichtstbij: Hans en Grietje, 74 m
 5. Menstraat 9 · monument 12666 · Woonhuis(K)
    Onderkelderd huis met klokgevel, waarvan de top aanzetvoluten heeft en met natuursteen is gedekt. Hi
    café het dichtstbij: de Buren, 67 m
 6. Spijkerboorsteeg 12 · monument 12808 · Woonhuis(K)
    Huis met in- en uitgezwenkte topgevel, in jaarankers gedateerd 1627, bekroond door vijf pinakels, di
    café het dichtstbij: Stefano's Panninibar, 17 m
 7. Assenstraat 6 · monument 12400 · Onderdeel woningen e.d.
    Poortje met geprofileerd kalf, waarop gebeeldhouwde zandstenen vaas staat. Tweede/derde kwart achtti
    café het dichtstbij: Toast, 12 m
 8. Assenstraat 50 · monument 12409 · Woonhuis(K)
    Onderkelderd huis met hoge gepleisterde lijstgevel, in jaarankers gedateerd 1617. Waterlijst. Zevent
    café het dichtstbij: Toast, 90 m
 9. Polstraat 53 · monument 12751 · Woonhuis(K)
    Onderkelderd hoekhuis onder kap met wolfschild en twee dakkapellen in de Assenstraat en eindigend te
    café het dichtstbij: Rio, 117 m
10. Polstraat 66 A · monument 12769 · Woonhuis(K)
    Onderkelderd pand met gepleisterde rechte gevel; dakkapel. Hoog voorhuis, schuifvensters, XVII/XVIII
    café het dichtstbij: Zuiderlicht, 77 m

Foto bij stop 1: https://images.memorix.nl/rce/thumb/640x480/0bb573f0-9ee6-4087-b82f-21669cc2347b.jpg

Rijksmuseum: 9 objecten met 'Brink Deventer' in de titel en een afbeelding
  RP-F-00-66 · De Brink te Deventer · 1873 · https://iiif.micr.io/etNFF/full/800,/0/default.jpg
  RP-F-F17927 · De Brink in Deventer · 1850 - 1880 · https://iiif.micr.io/ZHeyA/full/800,/0/default.jpg
  RP-F-F17929 · Gezicht op de Brink in Deventer · ca. 1850 - ca. 1900 · https://iiif.micr.io/yzEsD/full/800,/0/default.jpg

Waar het misgaat

  • Asvolgorde in de WFS: met urn:ogc:def:crs:EPSG::4326 is bbox breedte,lengte; met EPSG:4326 lengte,breedte. Hetzelfde vak gaf 289 of 0 punten. ohsome wil het altijd als lengte,breedte. Een lege kaart zonder foutmelding betekent meestal dat de volgorde om is.
  • In een oude binnenstad staan honderden monumenten dicht op elkaar (Deventer: 503 binnen 600 meter). De tien dichtstbijzijnde stonden allemaal aan de Brink, een route van 200 meter. Kies stops met een minimale onderlinge afstand.
  • De kaartdienst heeft geen naam en geen adres, de linked data wel, maar daar staan gegevens dubbel (meerdere grafen). Zonder SAMPLE of DISTINCT krijg je per monument meerdere rijen. Niet elk monument heeft een foto: in Deventer 329 van de 503.
  • OpenStreetMap is geen monumentenregister: in het centrum van Deventer hadden 21 OSM-objecten een monumentnummer (ref:rce) tegen 503 rijksmonumenten bij de RCE. Gebruik OSM voor de voorzieningen eromheen.
  • ohsome is traag en niet altijd bereikbaar: op 16 oktober 2026 sloot de server een uur lang elke vraag na 60 seconden, de volgende dag duurde een vraag 17 tot 25 seconden. /elements/centroid en /elements/geometry gaven HTTP 403. Cache per gebied en laat de app werken zonder OSM-laag.
  • Het IIIF-beeld van het Rijksmuseum staat niet altijd op dezelfde plek. Bij RP-F-00-66 zat het in subject_of van het object, bij RP-F-F17927 niet. De weg via shows en digitally_shown_by werkte bij alle drie.

Verder bouwen

  • Maak er een echte looproute van met een routeplanner over het wegennet, bijvoorbeeld een eigen OSRM of GraphHopper op het Geofabrik-uittreksel van Nederland, in plaats van afstanden hemelsbreed.
  • Maak thematische wandelingen: filter op hoofdcategorie (kerken, molens, verdedigingswerken) of op het jaar van inschrijving (ceo:datumInschrijvingInMonumentenregister).
  • Voeg bouwjaar en oppervlakte toe uit de BAG via de verblijfsobject-id's in de linked data (ceo:heeftBAGRelatie), en laat zien welke monumenten de oudste panden van de straat zijn.
  • Laat een 'toen en nu' zien: het oude beeld uit het Rijksmuseum naast de RCE-foto van vandaag, met een schuif ertussen.

Meer met deze data

Rijksmonumenten: het hoogst in Noord-Holland (14.052 rijksmonumenten), het laagst in Flevoland (110 rijksmonumenten)

Rijksmonumenten per provincie, oktober 2026, in rijksmonumenten. Heel Nederland: 63.098. 12 provincies met een cijfer.

Bron: Rijksdienst voor het Cultureel Erfgoed, linked data (SPARQL, dataset rce/cho) · opgehaald 25 oktober 2026 · selectie: juridische status: rijksmonumentOpen de tabel Los blok

Objecten van het Rijksmuseum met en zonder digitale afbeelding (cijfers van de Rijksmuseum-API): met afbeelding is het grootste deel, 87% in oktober 2026

Verdeling in oktober 2026: met afbeelding 87%, zonder afbeelding 13%. Totaal: 841.378 objecten.

Bron: Rijksmuseum, Search API (data.rijksmuseum.nl, Linked Art Search) · opgehaald 25 oktober 2026 · selectie: imageAvailable=true en imageAvailable=falseOpen de tabel Los blok

De bronnen3

Rijksmonumentenregister

Rijksdienst voor het Cultureel Erfgoed (ministerie van OCW)Nederland, monument

Het register van de Rijksdienst voor het Cultureel Erfgoed: 63.098 rijksmonumenten op 15 oktober 2026, waarvan 61.637 gebouwd en 1.461 archeologisch. Met nummer, categorie, datum van inschrijving, BAG-adres en kaartpunt of contour. Ook de beschermde stads- en dorpsgezichten en het werelderfgoed. Als kaartdienst (WFS), download en linked data met SPARQL.

OpenAPIDownloadKaartlaagErfgoed en cultuurWonen en ruimte
Actueel
bijgewerkt 11 uur geleden

OpenStreetMap

OpenStreetMap FoundationWereld, object

Wegen, gebouwen, winkels, bankjes en fietspaden, ingetekend door vrijwilligers. In Nederland erg volledig, mede doordat de BAG erin is geïmporteerd.

OpenAPIDownloadKaartlaagWonen en ruimteVerkeer en vervoer
Actueel
bijgewerkt minder dan een uur geleden

Rijksmuseum collectie

Rijksmuseum, AmsterdamNederland, object

Het Rijksmuseum deelt de gegevens van zijn collectie via zes diensten zonder sleutel (plus het verouderde SRU): een zoek-API, een resolver voor de vaste identifiers (Linked Art), OAI-PMH, een wijzigingsstroom (LDES), IIIF voor beelden en datadumps. Op 16 oktober 2026 telde de zoek-API 841.378 objecten, waarvan 735.784 met een digitale afbeelding, 425.961 onder prenten en 5.337 schilderijen.

OpenAPIDownloadErfgoed en cultuur
Actueel
bijgewerkt minder dan een uur geleden

Meer om te bouwen