Estoy trabajando con nuestro grupo de ciclistas para anonimizar los archivos GPX en dos criterios (sobre todo para la seguridad). Nunca he encontrado una manera estándar de anonymising de datos, pero esto cumple dos preocupaciones de nuestros miembros, mientras que la preservación de la precisión a lo largo de las carreteras y de la información de la velocidad:
- Personal ubicaciones, la eliminación de 'privado' áreas de personas;
- Ocultando las marcas de tiempo de modo que los datos de los viajes no podría ser utilizado para identificar los movimientos individuales.
GPSBabel puede hacer todo esto desde la línea de comandos - por ejemplo, a cambio de los tiempos en un archivo GPX por +123450 segundos, y remover todos los trackpoints 0.5 km de distancia de un punto de referencia en el norte de 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
: proceso de pistas;
-
-i
, -f
: de entrada el tipo de archivo (gpx) y el nombre de archivo;
-
-x
: dos secuencial (-x) filtro de argumentos para timeshift (mover) y de eliminación (radio,excluir) alrededor de un punto;
-
-o
, -F
: tipo de archivo de salida y el nombre de archivo.
Este comando cadenas de varios filtros - primera transformación de los trackpoints en puntos de referencia, entonces el filtrado, entonces la transformación de regreso a trackpoints.
Tenga en cuenta que la reducción de la cantidad de lugares decimales alrededor del punto / área privacidad es MUY importante, ya que oscurece el centro exacto de la privacidad de la zona. 3 decimales = ~ 110m exactitud en este caso.
Me suelen llamar GPSBabel de R, escribir un nuevo archivo GPX con los filtros que se aplican, incluyendo una al azar timeshift +/- 2 semanas. Esto sería mejor como bash o python script, pero muchos de los otros trabajos que yo hago es en R y soy un vago ...
# 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)