
Meldingen openbare ruimte op een kaart: software, data en koppelingen
Een meldingenkaart toont waar inwoners iets melden en wat er mee gebeurt. Open software bestaat: Signalen, onder de MPL-2.0-licentie. Open meldingendata publiceren gemeenten zoals Delft, zonder gegevens van melders. De koppeling aan BAG en BGT maakt van een punt een adres en een object. Hieronder staat een getest voorbeeld op echte data.

Wat moet een kaart voor meldingen openbare ruimte kunnen?
Een melding openbare ruimte is een korte klacht of een signaal over de buitenruimte, zoals een kapotte lantaarnpaal, zwerfafval of een losliggende stoeptegel. Een kaart ondersteunt drie taken: de inwoner kiest een plek bij het melden, de behandelaar ziet waar meldingen zich concentreren, en de beheerder toetst of de melding bij een bekend object hoort.
De bekendste open oplossing is Signalen. De documentatie omschrijft het zo:
Signalen is a web application that allows citizens and interested parties to report problems in public spaces, such as noise complaints or broken streetlights, to the municipality.
Bron: README van de repository Amsterdam/signals op GitHub, geraadpleegd op 11 oktober 2026. Dezelfde README zegt dat Signalen is gebaseerd op een proof of concept en de eerdere meldingenomgeving van die stad heeft vervangen. De gemeente Amsterdam is hier de uitgever van de software en geen opdrachtgever van TechinFlow.
Een eigen kaart voor meldingen komt dus zelden in de plaats van zo'n systeem. Hij komt er naast te staan, als analyse- of publicatielaag. Hoe dat past in een viewer, leest u bij GIS-viewer voor gemeenten.
Is Signalen echt open source en wie onderhoudt het?
Ja, de broncode staat publiek op GitHub onder de Mozilla Public License 2.0, met één onderdeel onder de EUPL. Op 11 oktober 2026 zagen de repository's er zo uit.
| Repository | Onderdeel | Licentie | Laatste push |
|---|---|---|---|
| Amsterdam/signals | Backend-API | MPL-2.0 | 8 oktober 2026 |
| Signalen/backend | Backend (Signalen-organisatie) | MPL-2.0 | 2 september 2025 |
| Signalen/frontend | Webformulier en backoffice | MPL-2.0 | 2 september 2025 |
| Signalen/helm-charts | Installatie op Kubernetes | EUPL-1.2 | 23 september 2026 |
| Signalen/documentation | Documentatie | Niet vermeld | 22 juli 2026 |
Let op de verschillende laatste-pushdata. De repository Amsterdam/signals is op 11 oktober 2026 het actiefst; de kopieën in de organisatie Signalen lopen daarachter. Kies bij een inventarisatie dus welke repository de bron van waarheid is en vraag de leverancier welke versie draait. Open source in een overheidscontext, inclusief de keuze voor een licentie, werkt open source bij de overheid en de EUPL uit.
De frontend heeft een configuratiebestand (app.base.json) waarin een gemeente de kaartinstellingen zet. Daarin staat een PDOK-achtergrondkaart (BRT, WMTS) en een laag containers die naar een WFS wijst. Dat laatste raakt direct aan de kaart van afvalinzameling: een inwoner kan bij een melding over een volle container die container op de kaart aanwijzen.
Welke open data over meldingen bestaat er?
Meldingendata is open bij een aantal gemeenten, als geaggregeerde of geanonimiseerde lijst. Een zoekopdracht naar "meldingen openbare ruimte" in data.overheid.nl gaf op 11 oktober 2026 21 datasets. Niet elke gemeente publiceert.
| Uitgever | Dataset | Formaten | Licentie |
|---|---|---|---|
| Gemeente Delft | Meldingen Openbare Ruimte Delft | ArcGIS-service, CSV, KML, SHP | CC BY 4.0 |
| Gemeente Nijmegen | Meldingen openbare ruimte | JSON, CSV | Publiek domein |
| Gemeente Eindhoven | Meldingen openbare ruimte | JSON, CSV, SHP | Publiek domein |
Het voorbeeld hieronder gebruikt de Delftse dataset, omdat die als service met server-side statistiek werkt. De laag bevatte op 11 oktober 2026 91.652 meldingen met aanmaakdatums van 4 januari 2023 tot 10 oktober 2026. Daarvan hadden 89.659 de status "Afgehandeld", en de rest stond in een van vier tussenstatussen (ontvangen, doorgestuurd, extra informatie gevraagd, in behandeling).
De velden zijn: meldingsnummer, aanmaakdatum, formuliernaam, status, wijk, buurt, drie categorieniveaus en straat. Er staat geen naam, telefoonnummer of e-mailadres in, en ook geen vrije tekst. Zo hoort een open dataset eruit te zien; geodata en de AVG legt uit waarom.
Hoe ziet de architectuur eruit en welke koppelingen zijn nodig?
De kern is een locatiebepaling die elke melding aan basisregistraties hangt. De keten bestaat uit vier schakels die u per melding doorloopt.
| Schakel | Vraag | Bron | Resultaat |
|---|---|---|---|
| 1. Locatie | Waar staat de melder op de kaart? | Punt op kaart of adres, via de PDOK Locatieserver | Coördinaat in WGS84 of RD |
| 2. Adres | Welk adres ligt het dichtst bij? | BAG via reverse geocoderen | Nummeraanduiding-id en afstand |
| 3. Object | Welk beheerobject staat in de buurt? | BGT (bak, put, wegdeel, straatmeubilair) | Lokaal-id en type |
| 4. Behandeling | Wie handelt af? | Meldingensysteem of zaaksysteem | Status en categorie |
Schakels 1 tot en met 3 gebruiken alleen open registraties en passen dus in elke omgeving. Schakel 4 hangt af van het systeem dat de gemeente gebruikt; de API-koppeling daarvoor is maatwerk, zie API-koppelingen. De aanpak past bij de gedachte van Common Ground: bronnen blijven bij de bronhouder en de kaart combineert ze.
Werkend voorbeeld: statistiek, adres en BGT-objecten bij een melding
Het script doet drie dingen. Het telt de in 2025 aangemaakte meldingen per hoofdcategorie en status met server-side statistiek, zodat u niet alle 91.652 records ophaalt. Het haalt één melding over afval als GeoJSON op. En het koppelt dat punt aan het dichtstbijzijnde BAG-adres en aan de afvalbakken in de BGT binnen ongeveer 25 meter. Het draait op Node 18 of nieuwer en is gedraaid op 11 oktober 2026.
// Node 18+ (of een browser). Meldingen openbare ruimte van de gemeente Delft: statistiek en koppeling aan BAG en BGT.
const FS = 'https://services3.arcgis.com/j07voPd56xoB4c87/arcgis/rest/services/meldingen/FeatureServer/0/query';
async function query(params) {
const u = new URL(FS);
u.search = new URLSearchParams({ f: 'json', ...params });
const res = await fetch(u);
const json = await res.json();
if (!res.ok || json.error) throw new Error('ArcGIS: ' + (json.error?.message ?? res.status));
return json;
}
// Aantal meldingen per hoofdcategorie en afhandelstatus (statistiek op de server)
const stats = await query({
where: "AANMAAKDATUM >= timestamp '2025-01-01 00:00:00' AND AANMAAKDATUM < timestamp '2026-01-01 00:00:00'",
groupByFieldsForStatistics: 'CAT1,AFGEHANDELD',
outStatistics: JSON.stringify([
{ statisticType: 'count', onStatisticField: 'OBJECTID', outStatisticFieldName: 'aantal' },
]),
orderByFields: 'aantal DESC',
resultRecordCount: '5',
});
console.table(stats.features.map((f) => f.attributes));
// Eerste 3 meldingen als GeoJSON (WGS84), voor op de kaart
const geo = await query({ where: "CAT1 LIKE 'Afval%'", outFields: 'AANVRAAGOFMELDINGID,AANMAAKDATUM,CAT2,STRAAT,AFGEHANDELD', outSR: '4326', resultRecordCount: '3', f: 'geojson' });
const melding = geo.features[0];
console.log(JSON.stringify(melding, null, 1));
// BAG: dichtstbijzijnde adres bij het meldingspunt (PDOK Locatieserver, reverse)
const [lon, lat] = melding.geometry.coordinates;
const rev = new URL('https://api.pdok.nl/bzk/locatieserver/search/v3_1/reverse');
rev.search = new URLSearchParams({ lon, lat, type: 'adres', rows: '1', fl: 'weergavenaam,nummeraanduiding_id,afstand' });
console.log((await (await fetch(rev)).json()).response.docs[0]);
// BGT: afvalbakken binnen ongeveer 25 meter van het meldingspunt
const d = 0.00025;
const bak = new URL('https://api.pdok.nl/kadaster/bgt/ogc/v1/collections/bak/items');
bak.search = new URLSearchParams({ f: 'json', limit: '50', bbox: [lon - d, lat - d, lon + d, lat + d].join(',') });
const bakken = (await (await fetch(bak)).json()).features.filter((f) => !f.properties.eind_registratie);
console.log(bakken.length, 'BGT-bakken binnen 25 m:', bakken.map((b) => b.properties.plus_type));
Uitvoer van die run:
aantal CAT1 AFGEHANDELD
13840 Afval, afvalbakken, grofvuil en containers Afgehandeld
3716 Fietsen en voertuigen Afgehandeld
2993 Bruggen, wegen, straten en pleinen Afgehandeld
1957 Groenvoorziening, bomen en struiken Afgehandeld
1305 Overlast personen en dieren Afgehandeld
{ weergavenaam: 'Achterom 34, 2611PP Delft', nummeraanduiding_id: '0503200000040664', afstand: 12.25 }
2 BGT-bakken binnen 25 m: [ 'afvalbak', 'afvalbak' ]
De eerste tabel is ingekort tot vijf rijen en toont alleen groepen met de status "Afgehandeld". Afval is met 13.840 afgehandelde meldingen die in 2025 zijn aangemaakt verreweg de grootste categorie. Het adres werd op 12,25 meter gevonden en er stonden twee afvalbakken in de BGT binnen 25 meter. Dat is precies het soort feit dat een behandelaar wil zien: de melding hoort bij een plek met bekende bakken.
Hoe vind ik bij een melding het juiste BAG-adres en BGT-object?
Gebruik reverse geocoderen voor het adres en een kleine bbox voor het object, en bewaar altijd de afstand. De afstand is uw kwaliteitsmaat. Een melding op 12 meter van een adres is waarschijnlijk correct. Een melding op 80 meter kan duiden op een melding in een park of bij water, waar een adres weinig betekent.
Voor de BGT geldt dat de objecten per type in een eigen collectie staan. Voor afval is dat bak, voor putten put, voor wegen wegdeel. De BGT-API laat geen attribuutfilter toe, dus u filtert zelf op plus_type en op eind_registratie (leeg betekent: bestaat nog). Dat laatste is belangrijk: een groot deel van de objecten in een gebied kan historisch zijn.
Een BGT-object geeft geen eigenaar of beheerder. Wie in welk beheersysteem staat, regelt de gemeente zelf. Wilt u een melding terugkoppelen aan de basisregistratie, bijvoorbeeld omdat een bak ontbreekt in de BGT, dan geldt de procedure van terugmelden bij basisregistraties.
Welke valkuilen zijn er bij meldingendata?
- Persoonsgegevens. In het meldingensysteem staan melders, vaak met telefoonnummer en e-mail. Publiceer alleen een aparte, ontdane extractie, zoals de Delftse velden, en neem geen vrije tekst op, want die bevat vaak namen en adressen.
- Paginering. De ArcGIS-service geeft maximaal 2.000 records per aanroep. Gebruik
resultOffsetenresultRecordCount, of liever server-side statistiek zoals in het voorbeeld. - Coördinatenstelsel. Met
f=jsonkomt de geometrie in Web Mercator (EPSG:3857) terug;f=geojsongeeft WGS84. Kaartbibliotheken verwachten WGS84 en tonen anders niets of een punt in zee. - Datums. ArcGIS geeft datums terug als milliseconden sinds 1970. Zet ze om met
new Date(waarde). - Categorieën verschillen per gemeente. Een vergelijking tussen gemeenten vraagt om een eigen mapping, omdat de indeling van hoofdcategorieën niet landelijk gelijk is.
- Zichtbare plek en toegankelijkheid. Een kaart waarop een melder een locatie moet aanklikken, is voor niet-muisgebruikers onbruikbaar zonder adresveld als alternatief; zie toegankelijke kaarten.
Wanneer is een eigen meldingenkaart niet nodig?
Als de gemeente al een meldingensysteem heeft dat een kaart meelevert, bouwt u er niets naast. Een eigen kaart heeft pas waarde als hij iets doet dat het systeem niet doet: meldingen combineren met beheerdata (bomen, verlichting, containers), publiceren als open data, of een dashboard voor de buitendienst. Voor dat laatste past een dashboard beter dan een kaart.
Een tweede reden om niet te bouwen: een eigen invoerformulier voor meldingen. Het meldingsproces raakt het zaaksysteem en de privacy van melders; dat vervangt u niet door een kaartje. Gebruik de open software of een leverancier, en lever de kaartlaag. Hoe u de open data daarna publiceert, staat bij open data-platform.
Veelgestelde vragen
Is Signalen gratis te gebruiken door een gemeente?
De broncode is vrij beschikbaar onder de Mozilla Public License 2.0, dus de licentie kost niets. Installeren, beheren, koppelen aan uw zaaksysteem en beveiligen kost wel werk. Een kostenraming per gemeente is niet publiek gevonden en wordt hier niet genoemd.
Wat is het verschil tussen MOR en Signalen?
MOR staat voor meldingen openbare ruimte en is de naam van het type melding en de werkwijze. Signalen is één concrete softwareoplossing voor het afhandelen ervan. Er bestaan ook commerciële pakketten voor hetzelfde doel. De README van Signalen vermeldt dat het de eerdere meldingenomgeving van Amsterdam heeft vervangen.
Mag een gemeente meldingen als open data publiceren?
Ja, mits er geen persoonsgegevens in zitten. Delft publiceert een lijst met datum, categorie, status, wijk, buurt, straat en locatie, zonder melder en zonder vrije tekst. Laat uw functionaris gegevensbescherming de velden beoordelen en pas zo nodig de locatie aan, zodat een melding niet naar één woning herleidbaar is.
Hoe koppel ik een melding aan een BAG-adres?
Gebruik reverse geocoderen op het meldingspunt in de PDOK Locatieserver en bewaar het nummeraanduiding-id en de afstand. Een afstand van enkele meters is betrouwbaar. Bij een grote afstand hoort de melding bij een object zonder adres, zoals een park, en is een BGT-object een betere koppeling.
Waarom geeft mijn ArcGIS-aanroep geen resultaten of een punt in zee?
Meestal komt dat door het coördinatenstelsel. Een ArcGIS FeatureServer levert met f=json coördinaten in Web Mercator (EPSG:3857). Vraag f=geojson op, of voeg outSR=4326 toe. Controleer ook of de where-voorwaarde klopt; 1=1 geeft alles terug, tot de limiet van 2.000 records.
Bronnen
- GitHub — Amsterdam/signals (README, licentie MPL-2.0) (gelezen op )
- GitHub — Signalen/frontend (app.base.json, MPL-2.0) (gelezen op )
- GitHub — Signalen/frontend, configuratiebestand app.base.json (gelezen op )
- Signalen — documentatie (gelezen op )
- data.overheid.nl — Meldingen Openbare Ruimte Delft (gelezen op )
- data.overheid.nl — zoekopdracht meldingen openbare ruimte (gelezen op )
- PDOK — BGT OGC API Features (gelezen op )
- PDOK — Locatieserver (v3_1) (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