Come rendere anonimo un file gps?


11

Immagina di avere una traccia GPS che vuoi rendere anonima, in senso legale. come lo faresti? Lo scatto è alla distanza x più vicina e si elimina il tempo sufficiente? Ci sono standard concordati a livello internazionale su questo? Qualcuno ha già scritto un algoritmo per farlo? Altrimenti ho intenzione di fare una funzione nel mio pacchetto stplanr in evoluzione per fare questo.

Esempio riproducibile (utilizzando la fantastica funzione di rotazione di @geospacedman) dai miei dati " identificabili ":

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()

red-route

Il risultato è mostrato sopra. In sintesi: la rotta rossa è "identificabile" ed esiste un modo migliore?


5
Penso che potresti aver bisogno di una buona definizione e portata per ciò che è "anonimo" qui. Ciò dipenderà enormemente dal contesto dei dati, ad esempio se si trova in una città, chiunque avrebbe potuto seguire anche un percorso molto preciso, in un'area remota / riservata fornisce molte più informazioni se inizia / termina o attraversa un luogo particolarmente informativo (ad esempio la casa di qualcuno). E quali informazioni devono essere conservate? Distanza percorsa? tempi o velocità relativi? il percorso per tracciare una traccia? Ciò determinerà se è possibile semplicemente rimuovere (alcuni) dati o aggiungere ad esempio rumore costante / casuale.
drfrogsplat,

cosa pensi di usarlo anche per questioni, potresti semplicemente impostare il punto di partenza su 0,0 per tutti i tuoi percorsi
Ian Turton

Domanda interessante e sto affrontando alcuni problemi simili con i dati di ciclismo condivisi. Stai immaginando di "anonimizzare" un file GPX e di mantenerlo in formato GPX? Potresti salvare come linea (scartando le informazioni sul trackpoint)? Cosa vuoi davvero oscurare?
Simbamangu,

La discussione con i colleghi ha portato all'idea di tagliare semplicemente il primo e l'ultimo x metro a una distanza che è considerata 'k anonymous' en.wikipedia.org/wiki/K-anonymity . In risposta a @drfrogsplat intendo la definizione di anonimato dell'ICO, che è vaga: "Non esiste una semplice regola per la gestione delle informazioni spaziali - come codici postali, dati GPS o riferimenti a mappe - ai sensi del Data Protection Act 1998 (DPA). circostanze ciò costituirà dati personali "(ma quale?): ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace,

1
Cos'è l'anonimato K per una sequenza di punti GPS? Che cosa intendi con "tagliare" il primo / ultimo metro: intendi tagliare l'insieme di punti (più corto) o ridurre l'accuratezza dei punti di tracciamento?
Simbamangu,

Risposte:


5

Sto lavorando con il nostro gruppo ciclistico locale per anonimizzare i file GPX su due criteri (principalmente per la sicurezza). Non ho mai trovato un modo standard di anonimizzare i dati, ma questo soddisfa due preoccupazioni dei nostri membri, preservando l'accuratezza lungo le strade e la velocità delle informazioni:

  • Posizioni personali, rimozione di aree "private" per gli individui;
  • Indicatori temporali oscuranti in modo che i dati di viaggio non possano essere utilizzati per identificare i singoli movimenti.

GPSBabel può eseguire entrambe queste operazioni dalla riga di comando, ad esempio per spostare i tempi in un file GPX di +123450 secondi e rimuovere tutti i punti di traccia a 0,5 km da un punto di riferimento nel nord della Tanzania:

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: process track only;
  • -i, -f: tipo di file di input (gpx) e nome file;
  • -x: due argomenti di filtro sequenziale (-x) per timeshift (sposta) e rimozione (raggio, escludi) attorno a un punto;
  • -o, -F: tipo di file di output e nome file.

Questo comando mette insieme diversi filtri , trasformando prima i trackpoint in waypoint, quindi filtrando, quindi trasformando nuovamente in trackpoint.

Si noti che ridurre le cifre decimali intorno all'area di riferimento / privacy è MOLTO importante in quanto oscura il centro esatto dell'area di privacy. 3 cifre decimali = ~ 110 m di precisione in questo caso.

Di solito chiamo GPSBabel da R, scrivendo un nuovo file GPX con i filtri applicati, incluso un timeshift casuale +/- 2 settimane. Sarebbe meglio come uno script bash o python, ma gran parte dell'altro lavoro che faccio è in R e sono pigro ...

# 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)

1

Sei sfortunato, questo è tremendamente difficile da fare! Se sei serio, dovresti leggere sulla privacy differenziale perché questo è probabilmente quello che stai cercando.

Quando pensi a questo problema, dovresti considerare il caso di una persona reclusa che vive alla fine di una lunga strada isolata. Pensi davvero di poter fare qualcosa per le loro coordinate GPS e non rivelare nulla di quella persona in particolare. Le informazioni collaterali qui sono che si può facilmente scoprire che solo una persona vive lì.

Eliminare l'ID utente, il tempo e aggiungere rumore ai punti dati è un buon punto di partenza. Ma il problema è che tutti i punti dati sono fortemente correlati, quindi se si aggiunge rumore casuale a ciascun punto, il rumore si annullerà e qualcuno sarà in grado di derivare le traiettorie probabili. Quindi il rumore dovrebbe essere resistente a questo attacco, ad esempio rendendolo costante su una traiettoria. Ma poi, le traiettorie possono probabilmente essere facilmente abbinate a percorsi probabili basati su strade, ecc.

Non sono sicuro che i dati con cui finirai saranno ancora fattibili per qualunque cosa tu voglia fare con esso, ma almeno è un campo appassionato.

PS: Non so legalmente accettabile, mi aspetto che sia un obiettivo mobile e specifico per paese mentre la definizione matematica della privacy differenziale è la più solida che puoi ottenere.


0

effettuare una regolazione delle coordinate X e Y di ciascun punto di una distanza casuale tra un determinato offset minimo e massimo. anche rendere la direzione dell'offset (più o meno) una selezione casuale. Includi nella randomizzazione che alcuni punti potrebbero non avere alcuna regolazione su una o entrambe le parti di una coppia di coordinate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.