Comment anonymiser un fichier gps?

11

Imaginez que vous ayez une trace GPS que vous souhaitez rendre anonyme, au sens juridique. Comment ferais-tu ceci? L'accrochage à la distance x la plus proche et la suppression du temps sont-ils suffisants? Existe-t-il des normes internationalement acceptées à ce sujet? Quelqu'un a-t-il déjà écrit un algorithme pour ce faire? Sinon, je prévois de faire une fonction dans mon package stplanr en évolution pour ce faire.

Exemple reproductible (en utilisant la fonction de rotation impressionnante de @geospacedman) à partir de mes propres données « identifiables »:

library(rgdal)
library(tmap)
downloader::download("https://www.openstreetmap.org/trace/1619756/data", "test.gpx")

r <-readOGR(dsn = "test.gpx", layer = "tracks")
r <- spTransform(r, CRS("+init=epsg:27700"))
rproj <- rotateProj(rs, 90) # rotate projection for plotting
r <- spTransform(r, rproj)
rs <- rgeos::gSimplify(r, 1000) # snap to nearest km
qtm(r) + qtm(rs, line.col = "red") + tm_layout(draw.frame = F) + tm_scale_bar()

route rouge

Le résultat est illustré ci-dessus. En résumé: l'itinéraire rouge est-il «identifiable» et existe-t-il une meilleure solution?

RobinLovelace
la source
5
Je pense que vous pourriez avoir besoin d'une bonne définition et d'une portée pour ce qui est "anonyme" ici. Cela dépendra énormément du contexte des données, par exemple si c'est dans une ville, n'importe qui aurait pu suivre même un itinéraire très précis, dans une zone éloignée / restreinte, cela donne beaucoup plus d'informations s'il commence / se termine à ou passe par un endroit particulièrement informatif (par exemple la maison de quelqu'un). Et quelles informations doivent être conservées? distance parcourue? temps relatifs ou vitesse? le chemin pour tracer un sentier? Ceux-ci détermineront si vous pouvez simplement supprimer (certaines) données, ou ajouter du bruit constant / aléatoire par exemple.
drfrogsplat
qu'est-ce que vous prévoyez de l'utiliser pour les questions aussi, vous pouvez simplement définir le point de départ à 0,0 pour tous vos itinéraires
Ian Turton
Question intéressante et je suis confronté à des problèmes similaires avec les données de cyclisme partagées. Imaginez-vous «anonymiser» un fichier GPX et le conserver au format GPX? Pourriez-vous enregistrer en tant que ligne (en supprimant les informations de trackpoint)? Que voulez-vous vraiment obscurcir?
Simbamangu
La discussion avec des collègues a conduit à l'idée de couper simplement les premier et dernier x mètres à une distance qui est considérée comme «k anonyme» en.wikipedia.org/wiki/K-anonymity . En réponse à @drfrogsplat, je veux dire la définition de l'anonymat de l'OIC, qui est vague: "Il n'y a pas de règle simple pour gérer les informations spatiales - telles que les codes postaux, les données GPS ou les références cartographiques - en vertu du Data Protection Act 1998 (DPA). circonstances, cela constituera des données personnelles "(mais lesquelles?): ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace
1
Qu'est-ce que l'anonymat K pour une séquence de points GPS? Que voulez-vous dire par «couper» les premiers / derniers mètres - vous voulez dire couper l'ensemble de points (plus court) ou réduire la précision des points de suivi?
Simbamangu

Réponses:

5

Je travaille avec notre groupe cycliste local pour anonymiser les fichiers GPX sur deux critères (principalement pour la sécurité). Je n'ai jamais rencontré de méthode standard d'anonymisation des données mais cela répond à deux préoccupations de nos membres, tout en préservant la précision le long des routes et les informations de vitesse:

  • Emplacements personnels, suppression des zones «privées» pour les particuliers;
  • Obscurcir les horodatages afin que les données de voyage ne puissent pas être utilisées pour identifier les mouvements individuels.

GPSBabel peut effectuer ces deux opérations à partir de la ligne de commande - par exemple, pour décaler les heures dans un fichier GPX de +123450 secondes et supprimer tous les points de suivi à 0,5 km d'un point de repère dans le nord de la Tanzanie:

gpsbabel -t -i gpx -f infile.gpx \
  -x transform,wpt=trk,del -x track,move=123450s \
  -x radius,distance=0.5K,lat=-3.368,lon=36.624,nosort,exclude \
  -x transform,trk=wpt,del \
  -o gpx -F infile_rand.gpx
  • -t: traiter uniquement les pistes;
  • -i, -f: type de fichier d'entrée (gpx) et nom de fichier;
  • -x: deux arguments de filtre séquentiels (-x) pour le décalage temporel (déplacement) et la suppression (rayon, exclusion) autour d'un point;
  • -o, -F: type et nom du fichier de sortie.

Cette commande enchaîne plusieurs filtres - transformant d'abord les points de cheminement en points de cheminement, puis filtrant, puis reconvertissant en points de cheminement.

Notez que la réduction des décimales autour du point de repère / de la zone de confidentialité est TRÈS importante car elle masque le centre exact de la zone de confidentialité. 3 décimales = précision de ~ 110 m dans ce cas.

J'appelle généralement GPSBabel à partir de R, en écrivant un nouveau fichier GPX avec des filtres appliqués, y compris un décalage temporel aléatoire de +/- 2 semaines. Ce serait mieux en tant que script bash ou python mais beaucoup d'autres travaux que je fais sont en R et je suis paresseux ...

# Get the correct location for GPSBabel:
GB <- Sys.which("gpsbabel")

# Set up the filters
shift <- round((runif(1, 0, 2600000) - 1300000), 0) # +/- 2 weeks in secs
filter <- " -x transform,wpt=trk,del"
filter <- paste(" -x track,move=", shift, "s", sep = "")
filter <- paste(filter, " -x radius,distance=", dist, "K,", "lat=", lat, ",long=", lon, sep = "")
filter <- paste(filter, " -x transform,wpt=trk,del", sep="")

# Pass the complete command to the system
system(paste(GB, " -t -i gpx -f ", gpx_file, filter, " -o gpx -F ", 
           gsub(".gpx", replacement = "_rand.gpx", x = gpx_file, fixed = T),
           sep = ""), intern = TRUE)
Simbamangu
la source
1

Vous n'avez pas de chance, c'est extrêmement difficile à faire! Si vous êtes sérieux à ce sujet, vous devriez lire sur la confidentialité différentielle, car c'est probablement ce que vous recherchez.

Lorsque vous pensez à ce problème, vous devriez considérer le cas d'une personne recluse vivant au bout d'une longue route isolée. Pensez-vous vraiment que vous pouvez faire quelque chose au sujet de leurs coordonnées GPS et ne rien révéler sur cette personne en particulier. L'information secondaire ici est qu'il peut être facilement découvert qu'une seule personne y vit.

Supprimer l'ID utilisateur, l'heure et ajouter du bruit aux points de données est un bon point de départ. Mais le problème est que tous les points de données sont fortement corrélés, donc si vous ajoutez du bruit aléatoire à chaque point, le bruit sera annulé et quelqu'un pourra déduire les trajectoires probables. Il faudrait donc que le bruit résiste à cette attaque, par exemple en le rendant constant sur une trajectoire. Mais alors, les trajectoires peuvent probablement être facilement mises en correspondance avec les itinéraires probables basés sur les routes, etc.

Je ne sais pas si les données avec lesquelles vous vous retrouverez seront toujours utilisables pour tout ce que vous voulez en faire, mais au moins c'est un domaine passionnant.

PS: Je ne sais pas ce qui est légalement acceptable, je m'attendrais à ce qu'il s'agisse d'une cible mobile et d'un pays spécifique tandis que la définition mathématique de la confidentialité différentielle est la plus robuste que vous puissiez obtenir.

Mad Echet
la source
0

effectuer un ajustement des coordonnées X et Y de chaque point par une distance aléatoire entre un certain décalage minimum et maximum. faire également de la direction du décalage (plus ou moins) une sélection aléatoire. Inclure dans la randomisation que certains points peuvent ne pas avoir d'ajustement sur l'une ou les deux parties d'une paire de coordonnées.

Adam
la source