Como anonimizar um arquivo gps?

11

Imagine que você tem um rastreamento GPS que deseja tornar anônimo, no sentido legal. Como você faria isso? Está encaixando na distância x mais próxima e diminuindo o tempo suficiente? Existem padrões acordados internacionalmente sobre isso? Alguém já escreveu um algoritmo para fazer isso? Caso contrário, planejo fazer uma função no meu pacote stplanr em evolução para fazer isso.

Exemplo reproduzível (usando a incrível função de rotação de @geospacedman) dos meus próprios dados ' Identificáveis ':

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

rota vermelha

O resultado é mostrado acima. Em resumo: a rota vermelha é 'identificável' e existe uma maneira melhor?

RobinLovelace
fonte
5
Eu acho que você pode precisar de uma boa definição e escopo para o que é "anônimo" aqui. Isso dependerá enormemente do contexto dos dados, por exemplo, se estiver em uma cidade, qualquer um poderia ter seguido uma rota muito precisa, em uma área remota / restrita, fornecerá muito mais informações se iniciar / terminar ou passar por um local particularmente informativo (por exemplo, a casa de alguém). E que informações precisam ser mantidas? Distância viajada? tempos relativos ou velocidade? o caminho para mapear uma trilha? Isso determinará se você pode simplesmente remover (alguns) dados ou adicionar ruído constante / aleatório, por exemplo.
precisa saber é o seguinte
Para o que você planeja usá-lo também, basta definir o ponto de partida para 0,0 para todas as suas rotas
Ian Turton
Pergunta interessante e estou lidando com alguns problemas semelhantes com dados de ciclismo compartilhados. Você está imaginando 'anonimizando' um arquivo GPX e mantendo-o no formato GPX? Você poderia salvar como uma linha (descartando informações do trackpoint)? O que você realmente quer obscurecer?
Simbamangu
A discussão com colegas levou à idéia de simplesmente cortar o primeiro e o último x metros a uma distância que é considerada 'k anônimo' en.wikipedia.org/wiki/K-anonymity . Em resposta a @drfrogsplat, quero dizer a definição de anonimato da OIC, que é vaga: "Não existe uma regra simples para lidar com informações espaciais - como códigos postais, dados de GPS ou referências de mapas - sob a Data Protection Act 1998 (DPA). circunstâncias, isso constituirá dados pessoais "(mas quais?): ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace
1
O que é o anonimato K para uma sequência de pontos GPS? O que você quer dizer com 'cortar' o primeiro / último metro - você quer aparar o conjunto de pontos (mais curto) ou reduzir a precisão dos pontos de trilha?
Simbamangu

Respostas:

5

Estou trabalhando com nosso grupo de ciclismo local para anonimizar arquivos GPX com dois critérios (principalmente por segurança). Nunca encontrei uma maneira padrão de anonimizar dados, mas isso satisfaz duas preocupações de nossos membros, preservando a precisão ao longo das estradas e agilizando as informações:

  • Locais pessoais, removendo áreas 'particulares' para indivíduos;
  • Carimbos de data e hora obscuros para que os dados de viagem não pudessem ser usados ​​para identificar movimentos individuais.

O GPSBabel pode fazer ambos na linha de comando - por exemplo, para alterar os tempos em um arquivo GPX em +123450 segundos e remover todos os pontos de trilha a 0,5 km de um ponto de referência no norte da Tanzânia:

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: processa apenas faixas;
  • -i, -f: tipo de arquivo de entrada (gpx) e nome do arquivo;
  • -x: dois argumentos de filtro seqüenciais (-x) para mudança de horário (movimentação) e remoção (raio, exclusão) em torno de um ponto;
  • -o, -F: tipo de arquivo de saída e nome do arquivo.

Esse comando une vários filtros - primeiro, transformando os pontos de controle em pontos de controle , depois filtrando e depois voltando aos pontos de controle.

Observe que reduzir as casas decimais ao redor da área de referência / privacidade é MUITO importante, pois obscurece o centro exato da área de privacidade. 3 casas decimais = ~ 110m de precisão neste caso.

Eu costumo ligar para GPSBabel da R, escrevendo um novo arquivo GPX com os filtros aplicados, incluindo um desvio de tempo aleatório +/- 2 semanas. Isso seria melhor como um script bash ou python, mas muitos dos outros trabalhos que faço são em R e sou preguiçoso ...

# 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
fonte
0

faça um ajuste nas coordenadas X e Y de cada ponto por uma distância aleatória entre um determinado deslocamento mínimo e máximo. Também faça a direção do deslocamento (mais ou menos) uma seleção aleatória. Inclua na randomização que alguns pontos podem não ter ajuste para uma ou ambas as partes de um par de coordenadas.

Adão
fonte
0

Você está sem sorte, isso é tremendamente difícil de fazer! Se você é sério, deve ler sobre privacidade diferencial, porque provavelmente é isso que você procura.

Ao pensar nesse problema, considere o caso de uma pessoa reclusa que vive no final de uma longa estrada isolada. Você realmente acha que pode fazer algo sobre a coordenada GPS deles e não revelar nada sobre essa pessoa em particular. A informação secundária aqui é que é fácil descobrir que apenas uma pessoa mora lá.

Despir o ID do usuário, o tempo e adicionar ruído aos pontos de dados é um bom ponto de partida. Mas o problema é que todos os pontos de dados estão fortemente correlacionados; portanto, se você adicionar ruído aleatório a cada ponto, o ruído será cancelado e alguém poderá derivar as trajetórias prováveis. Portanto, o ruído teria que ser resistente a esse ataque, por exemplo, tornando-o constante ao longo de uma trajetória. Mas então, as trajetórias provavelmente podem ser facilmente combinadas com rotas prováveis ​​baseadas em estradas, etc.

Não tenho certeza se os dados com os quais você terminará ainda serão viáveis ​​para o que você quiser fazer com eles, mas pelo menos é um campo apaixonante.

PS: Eu não conheço legalmente aceitável, espero que seja um alvo em movimento e específico de país, enquanto a definição matemática de privacidade diferencial é a mais robusta possível.

Mad Echet
fonte