Laadpunten per buurt en per elektrische auto
Een kaart van je gemeente die per buurt laat zien hoeveel publieke laadpunten er zijn, per 1.000 inwoners en per 100 auto's, en hoeveel elektrische auto's er op één laadpunt aangewezen zijn.
geef_project("laadpalen-per-buurt")geef_bron("ndw-verkeer")geef_bron("pdok-wijkenbuurten")geef_bron("cbs-kwb")
Ik heb het project, de geteste aanroepen en de valkuilen. Ik bouw een kaart met NDW actuele verkeersgegevens, Wijk- en buurtkaart, Kerncijfers wijken en buurten en RDW gekentekende voertuigen. 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.
Meeste
Minste
Dit is een mockup, geen werkende versie, met de cijfers uit onze proefdraai van 16 oktober 2026, 23:45; de kaart toont de buurtgrenzen van 2025 en de 1.512 laadlocaties uit het NDW-bestand van 17 oktober 2026, 23:33. De MCP-server zet je aan met het adres op Voor AI.
Voor wie
Gemeenteraadsleden en beleidsmakers die de uitrol van laadpalen volgen, bewoners die willen weten of hun buurt achterblijft, en datajournalisten.
Wat je krijgt
Een kaart van één gemeente met per buurt de laadpunten per 100 particuliere auto's (kleurvlakken), de laadlocaties als stippen, en een tabel met per buurt laadlocaties, laadpunten, inwoners, auto's en de verhouding. Bovenaan het gemeentetotaal en het aantal elektrische auto's per laadpunt.
Proefdraai voor Utrecht op 16 oktober 2026: het NDW-bestand had 80.583 laadlocaties, waarvan 80.553 met bruikbare coördinaten in Nederland. In de 111 Utrechtse buurten (grenzen 2025) lagen 1.511 locaties met 5.001 laadpunten: 13,3 per 1.000 inwoners en 4,7 per 100 particuliere auto's (CBS-kerncijfers 2025). In de 47 Utrechtse postcodes stonden 12.581 volledig elektrische personenauto's geregistreerd (RDW): 2,5 per publiek laadpunt. Hoog Catharijne en Jaarbeurs kwam uit op 89,7 laadpunten per 100 auto's (parkeergarages), Neckardreef en omgeving op 0,5. Twee buurten hadden geen enkel laadpunt.
Openbare laadlocaties voor elektrische auto's per exploitant: het meest Vattenfall InCharge (22.217 laadlocaties), dan EQUANS en TotalEnergies
Openbare laadlocaties voor elektrische auto's per exploitant, oktober 2026, in laadlocaties. Totaal: 80.852; de grootste 12 van 123 categorieën staan in de grafiek. Vattenfall InCharge is 27% van het totaal. Elke laadlocatie telt één keer, ook als er meer laadpunten staan. Exploitant zoals NDW hem doorgeeft.
Zo zou je kunnen starten6 stappen
- 1
Haal alle publieke laadlocaties op
NDW verzamelt de laadpunten die exploitanten via OCPI melden. Het GeoJSON-bestand (4,9 MB gzip) wordt elke minuut ververst en heeft per locatie de exploitant en per connectortype het aantal (total), het aantal vrij (available) en het maximale vermogen in watt. Er is ook een volledig OCPI-bestand (17 MB) met adressen en postcodes. Let op: 30 locaties vallen af: 8 liggen in België of Oostenrijk en 22 Nederlandse hebben onmogelijke coördinaten, zoals (0, 0), (135, 90) of een punt in de Verenigde Staten. En een snellader met CCS én CHAdeMO staat er twee keer in, één keer per connectortype.
https://opendata.ndw.nu/charging_point_locations.geojson.gz
{"features":[{"id":"NL-GFX-3F847574-0E5F-49B5-9DC2-148ECF027E29","type":"Feature", "geometry":{"type":"Point","coordinates":[4.621773,52.386765]}, "properties":{"open":false,"cpo_id":"GFX","address":"2 Delfstraat","country":"NLD", "owner_name":"TotalEnergies","last_updated":"2026-10-16T18:15:15Z","operator_name":"TotalEnergies", "availabilities":[{"total":2,"available":0,"power_max":13000.0,"power_type":"AC3", "tariff_ids":[],"connector_type":"IEC_62196_T2","connector_format":"SOCKET"}],"suboperator_name":null}}, … - 2
Haal de buurtgrenzen van je gemeente op
De OGC API van PDOK geeft de wijk- en buurtkaart als GeoJSON in lengte en breedte (de standaard bij OGC API), dus geschikt voor een webkaart. Voor 2025 kun je filteren op gemeentecode; 111 Utrechtse buurten zijn 559 kB. De kaart 2026 (versie 0) heeft andere veldnamen (bu_code, wk_code) en geen filter op gemeente: gebruik voor grenzen en cijfers hetzelfde jaar.
https://api.pdok.nl/cbs/wijken-en-buurten-2025/ogc/v1/collections/buurten/items?f=json&gemeentecode=GM0344&limit=1000
{"type": "Feature", "properties": {"buurtcode": "BU03440111", "buurtnaam": "Welgelegen, Den Hommel", "gemeentecode": "GM0344", "aantal_inwoners": 1880, "meest_voorkomende_postcode": "3533", "jaar": 2025, …}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[5.095491321284598, 52.086681739377646], …]]]}, …} (numberReturned: 111) - 3
Leg elk laadpunt in een buurt
Met een punt-in-polygoon-test (straal-methode) bepaal je per laadlocatie de buurt. Werk met MultiPolygons en houd rekening met gaten. Tel per locatie het grootste 'total' over de connectortypes, niet de som, anders tel je snelladers dubbel. Landelijk scheelt dat 200.063 tegen 203.205 laadpunten. Voor heel Nederland (14.000 buurten, 80.000 punten) is een ruimtelijke index (rbush, Turf, of PostGIS) sneller.
- 4
Haal inwoners en auto's per buurt op
De kerncijfers wijken en buurten 2025 (CBS 86165NED) hebben per buurt het aantal inwoners, het aantal personenauto's van particulieren en de meest voorkomende postcode. Er is geen telling van elektrische auto's per buurt. Veldnamen eindigen op een volgnummer dat per jaargang verschuift (in 2026, tabel 86358NED, heet het PersonenautoSParticulieren_105). CBS gaf op 16 oktober een paar keer 500 of 503: probeer het na een minuut opnieuw.
https://opendata.cbs.nl/ODataApi/OData/86165NED/TypedDataSet?$format=json&$filter=substringof('BU0344',WijkenEnBuurten)&$select=WijkenEnBuurten,AantalInwoners_5,PersonenautoSParticulieren_104&$top=3
{ "odata.metadata":"https://opendata.cbs.nl/ODataApi/OData/86165NED/$metadata#Cbs.OData.WebAPI.TypedDataSet&$select=WijkenEnBuurten,AantalInwoners_5,PersonenautoSParticulieren_104","value":[ { "WijkenEnBuurten":"BU03440111","AantalInwoners_5":1880,"PersonenautoSParticulieren_104":452 },{ "WijkenEnBuurten":"BU03440112","AantalInwoners_5":4105,"PersonenautoSParticulieren_104":1214 }, … - 5
Tel de elektrische auto's per postcode
De RDW-tabel Brandstoffen_op_PC4 telt voertuigen per viercijferige postcode, voertuigsoort en brandstof (E = volledig elektrisch, BE = benzine-hybride). Het adres is dat van de houder, dus ook bedrijven: postcode 3511 (Utrecht-centrum) heeft 1.817 elektrische auto's, de buren 3512 en 3513 samen 217. Landelijk staan 223.943 van de 798.322 elektrische personenauto's op zeven postcodes met elk meer dan 20.000 auto's (vermoedelijk lease en verhuur). Per buurt rekenen kan dus niet eerlijk; per gemeente of postcode wel, met die kanttekening.
https://opendata.rdw.nl/resource/8wbe-pu7d.json?$select=postcode,sum(aantal)&$where=voertuigsoort='Personenauto' AND brandstof='E' AND postcode in(3511,3512,3513)&$group=postcode
[{"postcode":"3511","sum_aantal":"1817"} ,{"postcode":"3512","sum_aantal":"135"} ,{"postcode":"3513","sum_aantal":"82"}] - 6
Bereken de verhoudingen en maak de kaart
Per buurt: laadpunten per 1.000 inwoners en per 100 particuliere auto's. Laat buurten met minder dan 200 auto's grijs (te klein). Per gemeente: elektrische auto's per laadpunt. Zet de buurtvlakken op de kaart met een kleurschaal en de laadlocaties als stippen, met per stip exploitant, aantal punten en vermogen.
Hoe de bronnen samenkomen
- NDW actuele verkeersgegevensWijk- en buurtkaartvia
coördinaten van de laadlocatie in de buurtgrens (punt-in-polygoon)NDW heeft geen buurtcode; de positie bepaalt in welke buurt een laadlocatie ligt.
- Wijk- en buurtkaartKerncijfers wijken en buurtenvia
buurtcode (BU03440111), zelfde jaargangGrenzen en kerncijfers van hetzelfde jaar (2025) koppel je op buurtcode. Buurtcodes veranderen bij herindelingen.
- Kerncijfers wijken en buurtenRDW gekentekende voertuigenvia
meest voorkomende postcode per buurt (MeestVoorkomendePostcode_118) = postcode in Brandstoffen_op_PC4De RDW telt per postcode, CBS per buurt. Via de meest voorkomende postcode per buurt verzamel je de postcodes van een gemeente; een postcode kan over meer buurten lopen, dus een exacte verdeling per buurt is het niet.
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 kaart (één HTML-pagina met MapLibre GL of Leaflet, data voorbereid met een Node 20-script) die voor één gemeente per buurt laat zien hoeveel publieke laadpunten er zijn.
Data, allemaal open en zonder sleutel:
- Laadpunten (NDW, elke minuut): https://opendata.ndw.nu/charging_point_locations.geojson.gz (4,9 MB gzip, GeoJSON in WGS84).
- Buurtgrenzen 2025 (PDOK OGC API): https://api.pdok.nl/cbs/wijken-en-buurten-2025/ogc/v1/collections/buurten/items?f=json&gemeentecode=GM0344&limit=1000
- Inwoners en auto's per buurt (CBS 86165NED, OData v3): https://opendata.cbs.nl/ODataApi/OData/86165NED/TypedDataSet?$format=json&$filter=substringof('BU0344',WijkenEnBuurten)&$select=WijkenEnBuurten,AantalInwoners_5,PersonenautoSParticulieren_104,MeestVoorkomendePostcode_118
- Elektrische auto's per postcode (RDW, Socrata SoQL): https://opendata.rdw.nl/resource/8wbe-pu7d.json?$select=postcode,sum(aantal)&$where=voertuigsoort='Personenauto' AND brandstof='E' AND postcode in(…)&$group=postcode
Wat je moet weten:
- NDW: laadpunten per locatie = het grootste availabilities[].total, niet de som (een snellader met CCS en CHAdeMO staat er twee keer in). Gooi punten buiten Nederland weg (er staan er op (0, 0), (135, 90) en in de Verenigde Staten). country 'NLD'.
- PDOK 2025: geometrie is MultiPolygon in lengte/breedte. Gebruik een echte punt-in-polygoon-test (Turf booleanPointInPolygon of een eigen straal-methode) en houd gaten aan.
- PDOK 2026 heeft andere veldnamen en geen gemeentefilter: houd grenzen en cijfers in hetzelfde jaar.
- CBS: veldnamen eindigen op een volgnummer dat per jaargang verandert. Lees ze uit /DataProperties. Codes in WijkenEnBuurten zijn hier tien tekens zonder opvulling. -99997 en null = geheim of onbekend. CBS kan 500/503 geven: opnieuw proberen met wachttijd.
- RDW: postcode is het adres van de houder, ook van lease- en verhuurbedrijven (postcode 1114 heeft 59.943 elektrische auto's). Daarom geen elektrische auto's per buurt; geef per gemeente 'elektrische auto's per laadpunt' met een duidelijke kanttekening.
- Buurten met minder dan 200 particuliere auto's: grijs, 'te klein'.
Uitkomst: een choropleth van de buurten (laadpunten per 100 particuliere auto's, 5 klassen), stippen voor de laadlocaties met een popup (exploitant, punten, vermogen in kW), een zijpaneel met gemeentetotaal (laadpunten, per 1.000 inwoners, elektrische auto's per laadpunt) en een sorteerbare tabel per buurt. Een keuzemenu voor de gemeente (GM-code) en een regel met de peildata: NDW (Last-Modified), buurtgrenzen 2025, CBS-kerncijfers 2025, RDW (datum van vandaag).
Probeer het zelf
De kern van het project in een klein script. Nodig: Node 20+ (fetch en zlib ingebouwd), geen pakketten. Getest op 2026-10-16; hieronder de echte uitvoer van die proefdraai.
// Laadpunten per buurt en per elektrische auto, voor één gemeente. Node 20+, geen pakketten nodig.
// Bronnen: NDW (laadpunten), PDOK (buurtgrenzen 2025), CBS kerncijfers wijken en buurten 2025 (86165NED), RDW (auto's per postcode).
import zlib from "node:zlib";
const UA = { "User-Agent": "mijn-laadkaart/1.0 (+jij@voorbeeld.nl)" };
const GM = "0344"; // Utrecht; vul je eigen gemeentecode in (4 cijfers)
const haal = async (url) => { const r = await fetch(url, { headers: UA }); if (!r.ok) throw new Error(`${r.status} ${url}`); return r; };
// 1. Buurtgrenzen 2025 van PDOK (GeoJSON in lengte/breedte)
const buurten = (await (await haal(`https://api.pdok.nl/cbs/wijken-en-buurten-2025/ogc/v1/collections/buurten/items?f=json&gemeentecode=GM${GM}&limit=1000`)).json()).features;
// 2. Alle laadlocaties van NDW (4,9 MB gzip, elke minuut nieuw)
const ndw = JSON.parse(zlib.gunzipSync(Buffer.from(await (await haal("https://opendata.ndw.nu/charging_point_locations.geojson.gz")).arrayBuffer())));
const inNL = ([x, y]) => x > 3.2 && x < 7.3 && y > 50.7 && y < 53.6; // er staan punten op (0,0) en ver buiten Nederland in
const locaties = ndw.features.filter((f) => f.properties.country === "NLD" && inNL(f.geometry.coordinates));
// Laadpunten per locatie: het grootste 'total' over de connectortypes. Een snellader met CCS én CHAdeMO is één punt, geen twee.
const punten = (f) => Math.max(0, ...(f.properties.availabilities ?? []).map((a) => a.total));
// 3. Punt-in-polygoon (straal-methode), werkt voor Polygon en MultiPolygon
const inRing = ([x, y], r) => { let in_ = false; for (let i = 0, j = r.length - 1; i < r.length; j = i++) {
if ((r[i][1] > y) !== (r[j][1] > y) && x < ((r[j][0] - r[i][0]) * (y - r[i][1])) / (r[j][1] - r[i][1]) + r[i][0]) in_ = !in_; } return in_; };
const inVlak = (p, g) => (g.type === "Polygon" ? [g.coordinates] : g.coordinates).some((poly) => inRing(p, poly[0]) && !poly.slice(1).some((gat) => inRing(p, gat)));
const per = new Map(buurten.map((b) => [b.properties.buurtcode, { naam: b.properties.buurtnaam, locaties: 0, punten: 0 }]));
for (const f of locaties) { const b = buurten.find((b) => inVlak(f.geometry.coordinates, b.geometry));
if (b) { const t = per.get(b.properties.buurtcode); t.locaties++; t.punten += punten(f); } }
// 4. Inwoners en particuliere auto's per buurt (CBS, kerncijfers 2025)
const cbs = (await (await haal(`https://opendata.cbs.nl/ODataApi/OData/86165NED/TypedDataSet?$format=json&$filter=substringof('BU${GM}',WijkenEnBuurten)&$select=WijkenEnBuurten,AantalInwoners_5,PersonenautoSParticulieren_104,MeestVoorkomendePostcode_118`)).json()).value;
for (const r of cbs) { const t = per.get(r.WijkenEnBuurten.trim()); if (t) Object.assign(t, { inwoners: r.AantalInwoners_5, autos: r.PersonenautoSParticulieren_104, pc4: r.MeestVoorkomendePostcode_118?.trim() }); }
// 5. Elektrische personenauto's per postcode (RDW, adres van de houder). Postcodes = de meest voorkomende per buurt.
const pc4s = [...new Set([...per.values()].map((t) => t.pc4).filter(Boolean))];
const rdw = await (await haal(`https://opendata.rdw.nl/resource/8wbe-pu7d.json?$select=postcode,sum(aantal)&$where=voertuigsoort='Personenauto' AND brandstof='E' AND postcode in(${pc4s.join(",")})&$group=postcode&$limit=5000`)).json();
const ev = rdw.reduce((s, r) => s + Number(r.sum_aantal), 0);
const rijen = [...per.entries()].map(([code, t]) => ({ code, ...t }));
const tot = rijen.reduce((s, t) => ({ loc: s.loc + t.locaties, p: s.p + t.punten, inw: s.inw + (t.inwoners ?? 0), a: s.a + (t.autos ?? 0) }), { loc: 0, p: 0, inw: 0, a: 0 });
console.log(`NDW-bestand: ${ndw.features.length} locaties, ${locaties.length} bruikbaar in Nederland`);
console.log(`Gemeente GM${GM}: ${buurten.length} buurten, ${tot.loc} laadlocaties met ${tot.p} laadpunten`);
console.log(` ${(tot.p / tot.inw * 1000).toFixed(1)} laadpunten per 1.000 inwoners, ${(tot.p / tot.a * 100).toFixed(1)} per 100 particuliere auto's`);
console.log(` ${ev} elektrische personenauto's in ${pc4s.length} postcodes (RDW): ${(ev / tot.p).toFixed(1)} per laadpunt`);
const groot = rijen.filter((t) => t.autos >= 200).map((t) => ({ ...t, r: t.punten / t.autos * 100 })).sort((a, b) => b.r - a.r);
const regel = (t) => ` ${t.code} ${t.naam.slice(0, 30).padEnd(30)} ${String(t.punten).padStart(4)} punten, ${String(t.autos).padStart(5)} auto's: ${t.r.toFixed(1)} per 100`;
console.log("Meeste laadpunten per 100 particuliere auto's (buurten met 200+ auto's):"); groot.slice(0, 5).forEach((t) => console.log(regel(t)));
console.log("Minste:"); groot.slice(-5).forEach((t) => console.log(regel(t)));
console.log(`Buurten zonder enig laadpunt: ${rijen.filter((t) => t.punten === 0).length}`);
NDW-bestand: 80583 locaties, 80553 bruikbaar in Nederland Gemeente GM0344: 111 buurten, 1511 laadlocaties met 5001 laadpunten 13.3 laadpunten per 1.000 inwoners, 4.7 per 100 particuliere auto's 12581 elektrische personenauto's in 47 postcodes (RDW): 2.5 per laadpunt Meeste laadpunten per 100 particuliere auto's (buurten met 200+ auto's): BU03440613 Hoog-Catharijne NS en Jaarbeur 392 punten, 437 auto's: 89.7 per 100 BU03440621 Wijk C 65 punten, 214 auto's: 30.4 per 100 BU03440534 Rijnsweerd 197 punten, 811 auto's: 24.3 per 100 BU03440132 Schepenbuurt, Cartesiusweg e.o 66 punten, 502 auto's: 13.1 per 100 BU03440121 Lombok-Oost 50 punten, 381 auto's: 13.1 per 100 Minste: BU03440332 Vechtzoom-noord, Klopvaart 11 punten, 1162 auto's: 0.9 per 100 BU03440221 Nijenoord, Hoogstraat en omgev 4 punten, 561 auto's: 0.7 per 100 BU03441012 Haarzuilens en omgeving 2 punten, 312 auto's: 0.6 per 100 BU03440342 Tigrisdreef en omgeving 8 punten, 1380 auto's: 0.6 per 100 BU03440322 Neckardreef en omgeving 6 punten, 1217 auto's: 0.5 per 100 Buurten zonder enig laadpunt: 2
Waar het misgaat
- Dubbel tellen bij snelladers. availabilities heeft één regel per connectortype; een paal met CCS en CHAdeMO is één laadpunt. Neem per locatie het maximum: landelijk 200.063 laadpunten, tegen 203.205 als je optelt.
- Rare coördinaten. 22 Nederlandse locaties hadden coördinaten als (0, 0), (135, 90) of in de Verenigde Staten, Frankrijk en India; daarnaast stonden er 7 Belgische en 1 Oostenrijkse locatie in. Filter op country en op een vak rond Nederland.
- Parkeergarages trekken het gemiddelde scheef. Hoog Catharijne en Jaarbeurs heeft 392 laadpunten bij 437 particuliere auto's: dat zijn garages voor bezoekers. Toon daarom ook het aantal locaties en laat de lezer zien welke buurten garages hebben.
- Auto's van bedrijven staan op het bedrijfsadres. Het RDW-postcodebestand telt lease- en bedrijfsauto's op het adres van de houder. 'Elektrische auto's per laadpunt' is per gemeente dus een benadering; noem dat erbij.
- Alleen publieke laadpunten. Het NDW-bestand bevat wat exploitanten via OCPI melden: openbare palen en semi-publieke (garages, bedrijfsterreinen). Laadpalen op eigen oprit staan er niet in. Een buurt met veel eigen opritten lijkt dus slecht bediend.
- Jaargangen mengen. Grenzen van 2025 met cijfers van 2026 lijken te passen, maar buurtcodes en grenzen veranderen. Houd beide in hetzelfde jaar.
Verder bouwen
- Heel Nederland: draai het voor alle 342 gemeenten met een ruimtelijke index (of PostGIS) en maak een ranglijst van gemeenten op laadpunten per 100 auto's.
- Groei bijhouden: bewaar het NDW-bestand elke week (alleen id, positie en aantal punten) en laat per buurt zien hoeveel laadpunten er per maand bijkomen.
- Bezetting: available zegt hoeveel punten nu vrij zijn. Lees het bestand elk kwartier een week lang en bereken per buurt hoe vaak alle palen bezet zijn.
- Inkomen erbij: koppel de buurten aan het gemiddelde inkomen uit de kerncijfers en kijk of buurten met een lager inkomen minder laadpunten hebben.
Meer met deze data
Openbare laadlocaties naar hoogste laadvermogen: 11 kW of minder is het grootste deel, 63% in oktober 2026
Verdeling in oktober 2026: 11 kW of minder 63%, tussen 11 en 22 kW 35%, meer dan 150 kW 0,9%, tussen 50 en 150 kW 0,6%, tussen 22 en 50 kW 0,6%. Totaal: 80.851 laadlocaties.
De bronnen4

NDW actuele verkeersgegevens
Snelheden en intensiteiten van tienduizenden meetpunten op de weg, elke minuut ververst. Ook werkzaamheden en incidenten.

Wijk- en buurtkaart
De officiële grenzen van alle gemeenten, wijken en buurten, als kaartlaag (WFS) en als download. De geometrie die je nodig hebt om buurtcijfers op een kaart te zetten.

Kerncijfers wijken en buurten
Ruim honderd cijfers per buurt: inwoners naar leeftijd, huishoudens, WOZ-waarde, inkomen, uitkeringen, auto's en afstand tot voorzieningen. Elk jaar een nieuwe tabel.

RDW gekentekende voertuigen
Gegevens van alle Nederlandse kentekens: merk, type, brandstof, gewicht en de vervaldatum van de APK. Zonder persoonsgegevens.
Meer om te bouwen
Aardbevingentracker: elke beving op de kaart, met gemeente en woningenKaart
Buurtmonitor veiligheid: overlast en misdrijven per buurtDashboard
Dashboard met files, snelheden en wegwerkzaamhedenDashboard
Dashboard met treinvertragingen en storingenDashboard
Hoe snel rijdt jouw gemeente elektrisch?Analyse
Live kaart van bussen, trams en metro'sKaart