
Kaart van afvalinzameling bouwen met open data
Containerlocaties staan als open data bij gemeenten, meestal als WFS, GeoJSON of CSV. Afvalbedrijven publiceren er in het open-dataregister geen. U bouwt de kaart door de locaties op te halen, aan de BAG te koppelen en tegen de standplaatsen in de BGT te leggen. Hieronder staat een getest WFS-voorbeeld op de actieve containers van Amsterdam.

Welk probleem lost een kaart van afvalinzameling op?
Een inwoner wil weten waar de dichtstbijzijnde glascontainer staat, en een gemeente wil zien waar een melding over een volle container hoort. Beide vragen zijn locatievragen. De taak zelf ligt bij de gemeente, zoals de Wet milieubeheer bepaalt:
De gemeenteraad en burgemeester en wethouders dragen, al dan niet in samenwerking met de gemeenteraad en burgemeester en wethouders van andere gemeenten, ervoor zorg dat ten minste eenmaal per week de huishoudelijke afvalstoffen met uitzondering van grove huishoudelijke afvalstoffen worden ingezameld bij elk binnen haar grondgebied gelegen perceel waar zodanige afvalstoffen geregeld kunnen ontstaan.
Bron: Wet milieubeheer, artikel 10.21, lid 1, geraadpleegd op 11 oktober 2026. Die wettelijke plicht gaat over inzameling bij percelen. Een kaart van bijplaatscontainers, glasbakken en textielcontainers is een dienst bovenop de plicht, geen verplichting, en wordt in de praktijk ingevuld met de eigen containerdata van de gemeente.
De kaart helpt drie groepen: inwoners (waar kan ik mijn glas kwijt), de buitendienst (welke container ontbreekt in het register) en de meldingenafhandeling (hoort deze melding bij een bekende container). Dat laatste staat verder uitgewerkt bij meldingen openbare ruimte.
Wie publiceert containerlocaties: gemeenten of afvalbedrijven?
Op 11 oktober 2026 publiceren gemeenten containerlocaties als open data en publiceren afvalbedrijven dat niet in het open-dataregister. Zoekopdrachten op de namen Avalex, Renewi, Meerlanden, Circulus en ROVA gaven in data.overheid.nl nul datasets, en HVC gaf één treffer die over warmtenetten ging. Dat bewijst niet dat zulke data nergens bestaat, wel dat u er niet op kunt rekenen als bron voor een kaart.
Een zoekopdracht naar "afvalcontainers" gaf vijf datasets. Vier ervan hebben een open licentie en drie bieden direct bruikbare bestanden of diensten:
| Uitgever | Dataset | Formaten | Licentie |
|---|---|---|---|
| Gemeente Amsterdam | Onder- en bovengrondse afvalcontainers en putten | WFS, WMS, GeoJSON, CSV | CC BY 4.0 |
| Gemeente Arnhem | Afvalcontainer Arnhem | WFS, WMS, ArcGIS-service, CSV, KML, SHP | CC BY 4.0 |
| Gemeente Den Haag | Bakken: ondergrondse en bovengrondse afval apart plaatsen en zoutafhaalkisten | CSV, JSON, RDF, XLSX | CC0 1.0 |
| Gemeente Heemstede (via NGR) | Afvalcontainers gemeente Heemstede | Alleen een HTML-verwijzing | CC0 1.0 |
De vijfde treffer, de dataset van Groningen over containers en afvalkalender, vermeldt geen open licentie en valt daarom af. Het zijn weer uitgevers van data en geen opdrachtgevers van TechinFlow. Voor het verschil tussen licenties, zie open data-licenties.
Hoe ziet de architectuur van een containerkaart eruit?
De architectuur is een keten van vier stappen. Elke stap heeft een eigen bron en een eigen verversingsritme, en dat bepaalt wat u kunt cachen.
| Stap | Bron | Vorm | Ritme |
|---|---|---|---|
| 1. Containers ophalen | WFS of GeoJSON van de gemeente | Punten met fractie, status, BAG-sleutels | Dagelijks, voor Amsterdam volgens de datasetbeschrijving |
| 2. Adres toevoegen | PDOK Locatieserver op BAG-id | Weergavenaam per nummeraanduiding | Bij ophalen; cache per id |
| 3. Standplaats controleren | PDOK BGT, collectie bak | Punten met plus_type en eind_registratie | Wekelijks is genoeg |
| 4. Tonen | Eigen GeoJSON of vector tiles | Kaartlaag met filter op fractie | Na elke ophaalronde |
Bij een paar duizend punten past alles in één GeoJSON-bestand. Bij grotere aantallen zet u de punten in PostGIS en serveert u vector tiles; de keuze tussen bibliotheken staat bij MapLibre. Wilt u het ophalen als vaste koppeling inrichten, kijk dan bij API-koppelingen.
Werkend voorbeeld: actieve containers in een kaartvak
Het script vraagt de WFS van Amsterdam om de containers binnen een rechthoek, houdt de actieve over (status 1), telt per fractie, zoekt het adres bij een BAG-nummeraanduiding en vergelijkt het aantal met de standplaatsen in de BGT. Het draait op Node 18 of nieuwer en is gedraaid op 11 oktober 2026.
// Node 18+ (of een browser). Actieve afvalcontainers van de gemeente Amsterdam, gekoppeld aan BAG en BGT.
const WFS = 'https://map.data.amsterdam.nl/maps/afval';
// Containers binnen een bounding box (lengte/breedte, WGS84), gefilterd op actieve containers
async function containers([w, s, e, n]) {
const u = new URL(WFS);
u.search = new URLSearchParams({
service: 'WFS', version: '1.1.0', request: 'GetFeature',
typename: 'container_coordinaten', outputformat: 'geojson',
bbox: `${w},${s},${e},${n}`,
});
const res = await fetch(u);
if (!res.ok) throw new Error('WFS gaf status ' + res.status);
return (await res.json()).features.filter((f) => f.properties.status === 1);
}
// Adres bij een BAG-nummeraanduiding via de PDOK Locatieserver
async function adres(nummeraanduidingId) {
const u = new URL('https://api.pdok.nl/bzk/locatieserver/search/v3_1/free');
u.searchParams.set('q', 'nummeraanduiding_id:' + nummeraanduidingId);
u.searchParams.set('fq', 'type:adres');
u.searchParams.set('fl', 'weergavenaam');
u.searchParams.set('rows', '1');
const { response } = await (await fetch(u)).json();
return response.docs[0]?.weergavenaam ?? null;
}
const fs = await containers([4.895, 52.370, 4.910, 52.380]);
const perFractie = {};
for (const f of fs) {
const k = f.properties.fractie_omschrijving || '(leeg)';
perFractie[k] = (perFractie[k] ?? 0) + 1;
}
console.log(fs.length, 'actieve containers', perFractie);
const metBag = fs.find((f) => f.properties.bag_nummeraanduiding_id);
console.log(metBag.properties.bag_nummeraanduiding_id, '->', await adres(metBag.properties.bag_nummeraanduiding_id));
// Ter vergelijking: de standplaatsen in de BGT (alleen objecten die nog bestaan)
const bgt = new URL('https://api.pdok.nl/kadaster/bgt/ogc/v1/collections/bak/items');
bgt.search = new URLSearchParams({ f: 'json', limit: '1000', bbox: '4.895,52.37,4.91,52.38' });
const plaatsen = (await (await fetch(bgt)).json()).features.filter(
(f) => f.properties.plus_type === 'afval apart plaats' && !f.properties.eind_registratie,
);
console.log(plaatsen.length, 'BGT-standplaatsen voor', fs.length, 'containers');
Uitvoer van die run, voor een vak van ongeveer 1 bij 1,1 kilometer rond het centrum:
38 actieve containers { Rest: 21, Glas: 7, Papier: 10 }
0363200012063844 -> Oosterdokskade 37, 1011DL Amsterdam
29 BGT-standplaatsen voor 38 containers
Het verschil tussen 38 en 29 is geen fout. Een standplaats in de BGT (afval apart plaats) kan meerdere containers bevatten, bijvoorbeeld rest, glas en papier naast elkaar, en een nieuwe plaats staat soms nog niet in de BGT. Het is juist de reden voor stap 3: een container zonder BGT-standplaats in de buurt is een kandidaat voor controle.
De WFS-parameters zijn bewust eenvoudig gehouden. Voor een volledige kopie van de dataset kunt u dezelfde aanroep zonder bbox doen. Dat leverde op 11 oktober 2026 15.738 containers op in een bestand van ongeveer 20 MB, en de aanroep duurde zonder filter rond een minuut. Doe dat dus als nachtelijke taak en nooit per bezoeker.
Hoe koppel ik containers aan de BAG en de BGT?
De koppeling aan de BAG staat bij Amsterdam al in de data. Elke container heeft de velden bag_nummeraanduiding_id, bag_hoofdadres_verblijfsobject_id en bag_openbareruimte_id. Van de 15.738 containers hadden er 13.924 een BAG-sleutel, dus zo'n 88 procent. De rest, vaak nieuwe of tijdelijke containers, heeft alleen een locatie.
Gebruik de BAG-sleutel voor drie dingen. Eerst voor het adres in de kaartpopup (zoals in het voorbeeld). Daarnaast voor het groeperen van containers per buurt of woonplaats. Tot slot voor het koppelen aan meldingen, zodat een melding op hetzelfde adres direct de juiste container toont.
De BGT werkt anders. De BGT legt vast waar een voorziening fysiek staat, niet welke container erin staat. De collectie bak heeft per object een plus_type, en voor afval zijn dat onder meer afval apart plaats en afvalbak. De BGT is open onder CC0. Gebruik de BGT daarom om de locatie te toetsen en de gemeentelijke lijst om te weten wat er staat. Een gedetailleerde toelichting op beide bronnen staat bij BGT en BAG, en de aanbevolen manier om fouten terug te melden bij terugmelden bij basisregistraties.
Welke valkuilen zijn er bij containerdata?
De valkuilen zitten in de randen van de data, niet in de techniek van het ophalen.
- Volgorde van coördinaten in de WFS. Met de suffix
,EPSG:4326achter debboxverwacht de Amsterdamse WFS (versie 1.1.0) breedtegraad voor lengtegraad en gaf een lengtegraad-eerst vak in de test nul resultaten. Zonder suffix werkt lengtegraad voor breedtegraad. Test altijd met een bekend adres. - Verwijderde of historische objecten. In de BGT hebben objecten die niet meer bestaan een
eind_registratie. In het genoemde vak waren 14 van de 43 BGT-bakken zo'n historisch object. Filter ze eruit. - Coördinatenstelsel. Den Haag levert de coördinaten in RD (EPSG:28992), met alleen de KML in WGS84, terwijl de Amsterdamse GeoJSON WGS84 is. Zet alles bij het ophalen om naar één stelsel; zie de RD-naar-WGS84-tool.
- Containers zonder fractie. In de Amsterdamse data hadden 274 containers geen fractie. Toon ze niet als "rest" maar als onbekend.
- Veldnamen die naar personen kunnen wijzen. De velden bevatten onder meer een chipnummer en een pasjeslezer-id. Publiceer of toon alleen wat u nodig hebt en controleer bij uw eigen data dat niets herleidbaar is; zie geodata en de AVG.
- Fair use. Haal de gemeentelijke data niet per bezoeker op. De regels voor PDOK staan bij PDOK fair use en caching.
Wanneer is een eigen containerkaart niet de goede keuze?
Een eigen kaart is overbodig als uw inwoners alleen een afvalkalender of de dichtstbijzijnde milieustraat zoeken. Daarvoor bestaan bestaande diensten van de inzamelaar. Bouw ook geen eigen kaart als de gemeente haar containerdata nog niet beheerd heeft: een kaart maakt fouten in het register juist zichtbaar, en dan is eerst het register aan de beurt.
Een kaart past wel wanneer containerdata onderdeel wordt van een groter geheel, bijvoorbeeld een GIS-viewer voor gemeenten of een dashboard met vullingsgraad en meldingen. Hoe u data publiceert zodat anderen dezelfde kaart kunnen bouwen, staat in open data-platform.
Veelgestelde vragen
Waar vind ik open data over afvalcontainers?
In het open-dataregister van de overheid, data.overheid.nl. Op 11 oktober 2026 gaf een zoekopdracht naar afvalcontainers vijf datasets, onder meer van Amsterdam, Arnhem en Den Haag. Niet elke gemeente publiceert. Vraag bij uw eigen gemeente of de lijst als open data beschikbaar is.
Publiceren afvalbedrijven zelf containerlocaties?
In het open-dataregister is dat op 11 oktober 2026 niet gevonden. Zoeken op Avalex, Renewi, Meerlanden, Circulus en ROVA gaf geen datasets. Containerlocaties komen dus van de gemeente. Wilt u data van een inzamelaar, dan is dat een afspraak in de contractrelatie, en niet iets dat u zomaar kunt downloaden.
Hoe koppel ik een container aan een adres?
Als de bron een BAG-sleutel meegeeft, zoals de Amsterdamse velden bag_nummeraanduiding_id en bag_hoofdadres_verblijfsobject_id, zoek dan het adres in de PDOK Locatieserver. Zonder sleutel gebruikt u reverse geocoderen op de coördinaat en bewaart u de afstand tot het gevonden adres als kwaliteitsmaat.
Mag ik de data in een commerciële app gebruiken?
Dat hangt af van de licentie. CC BY 4.0 vraagt bronvermelding en staat commercieel gebruik toe, CC0 vraagt niets. Lees per dataset de licentie in de metadata, en neem de vermelding van de uitgever op in de kaart. Datasets zonder open licentie, zoals die van Groningen over containers en afvalkalender, mogen niet zomaar gebruikt worden.
Hoe vaak moet ik de containerdata verversen?
Amsterdam vermeldt in de beschrijving een dagelijkse bijwerking. Een nachtelijke ophaalronde is dan genoeg. Bij andere gemeenten staat het ritme vaak niet in de metadata; kijk naar de wijzigingsdatum in de data zelf (bij Amsterdam het veld wijzigingsdatum_dp) en toon op de kaart wanneer u voor het laatst hebt opgehaald.
Bronnen
- data.overheid.nl — Onder- en bovengrondse Afvalcontainers en putten (Amsterdam) (gelezen op )
- Amsterdam — WFS afvalcontainers (GetCapabilities) (gelezen op )
- data.overheid.nl — Afvalcontainer Arnhem (gelezen op )
- data.overheid.nl — Bakken (Den Haag) (gelezen op )
- data.overheid.nl — zoekopdracht afvalcontainers (gelezen op )
- PDOK — BGT OGC API Features (gelezen op )
- PDOK — Locatieserver (v3_1) (gelezen op )
- Wet milieubeheer (BWBR0003245) (gelezen op )
Meer over TechinFlow
Een nieuw bureau in Haarlem voor maatwerk software, GIS en dataplatforms op open standaarden.
Een vraag of opdracht?
Vertel kort wat er speelt en voor welke organisatie. We reageren per e-mail.
Stuur een bericht