Privacy gevoelige gegevens vervagen met PostGIS

Als je privacy gevoelige gegevens wil weergeven in je GIS of internetkaart, kan je best de gegevens vervagen om problemen met de privacy te vermijden. Met PostGIS is dit eenvoudig te doen door een aangepaste kopie van de tabel te maken.

Voorbeeld data

Als voorbeeld privacy gevoelige gegevens heb ik een PostGIS tabel gemaakt met punten in een 100m x 100m rooster verband. Dit maakt het duidelijker hoe de data vervaagd wordt. Uiteraard zullen jou eigen brongegevens adressen of zoiets zijn die niet zo gelijkmatig verdeeld zijn. Als je je gegevens wil vervagen, zorg er dan ook altijd voor dat er in de tabel van je kaartlaag geen privacy gevoelige gegevens staan.

De voorbeeld tabel (public.example) heeft 2 velden: gid als serial en geom als geometry. De gekopieerde tabel zal ook diezelfde velden bevatten.


De groene stippen zijn de originele voorbeeld data. Om het effect van het vervagen duidelijk weer te geven, zijn ze gelijkmatig over de kaart verdeeld.

Het plan

Om de geometry gegevens te vervagen, zullen we de originele punten willekeurig verplaatsen naar een plaats binnenin een rechthoek van 100m x 100m rondom het originele punt. Het resultaat zullen we als tabel opslaan.


Het is het plan om punten te creëren binnenin 100m x 100m rechthoeken rond de originele punten.

De code

We zullen een nieuwe tabel public.example_obscured aanmaken waarvan het enige dat verschilt van de originele tabel, de locatie van het punt is. Elk punt wordt willekeurig ergens tussen 0 en 50 meter naar links of naar rechts en willekeurig ergens tussen 0 en 50 meter naar boven of onder verplaatst. De eenheid van het verplaatsen is meter, omdat de eenheid van de projectie van de brondata meter is. Als de projectie van jou brondata bijvoorbeeld in feet is, zal ook de verplaatsing in meter uitgedrukt worden.

De code om tot dat resultaat te komen, is:

CREATE TABLE example_obscured AS
    SELECT 
      gid, 
      st_point(st_x(geom)-50+random()*100, st_y(geom)-50+random()*100) geom
    FROM example; 


De groene stippen zijn de originele gegevens en de rode stippen zijn de vervaagde punten.

Het resultaat

De query zorgt ervoor dat de gevoelige gegevens niet langer gelinkt zijn aan een exacte locatie, maar in de plaats daarvan ergens in de omgeving van het originele punt staan.

De rode stippen zijn de vervaagde punten en ze geven waarschijnlijk nog wel het algemene beeld van de gegevens weer, maar ze kunnen niet meer gelinkt worden aan een exacte locatie (adres, persoon,…)

Andere opties

De data biet kopiëren

In plaats van een nieuwe tabel te maken, kan je in plaats daarvan ook een view of een materialized view maken. Dit is een interessante optie als jou originele data dikwijls veranderd.

De hoeveelheid vervaging aanpassen

Afhankelijk van het soort gegevens, kan het nuttig zijn om meer of minder te vervagen.

In dit voorbeeld gebruikten we 100m x 100m rechthoeken en daarvoor gebruikten we de volgende vervagingscode:

st_point(st_x(geom)-50+random()*100, st_y(geom)-50+random()*100) geom 

Als je de punten willen verplaatsen binnen een rechthoek van 500m x 500m dan moet je de volgende vervagingscode gebruiken:

st_point(st_x(geom)-250+random()*500, st_y(geom)-250+random()*500) geom 

Punten op een rooster plaatsen

Als je originele gegevens geen raster zijn (in tegenstelling tot het voorbeeld hierboven dus), is het ook een mogelijkheid om de coördinaten van de punten af te ronden, zodat de punten verplaatst worden naar een vast rooster. Het nadeel van deze aanpak is dat als je originele data punten bevat die vlak bij elkaar liggen, deze in de vervaagde data bovenop elkaar terecht komen en niet meer individueel zichtbaar zijn.

De vervagingscode voor een 100m x 100m rooster zou dan zijn:

st_point(round(st_x(geom)/100)*100, round(st_y(geom)/100)*100) geom

Dezelfde techniek in QGIS

Je kan dezelfde techniek ook in QGIS toepassen met behulp van een Geometry Generator Stijl. Een voorbeeld hiervan kan je vinden in mijn “QGIS Geometry Generator examples” repository op Gitlab.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.