Как анонимизировать GPS-файл?

11

Представьте, что у вас есть GPS-трассировка, которую вы хотите сделать анонимной в юридическом смысле. Как бы вы это сделали? Достаточно ли привязки к ближайшему x расстоянию и выбрасывания времени? Существуют ли международно согласованные стандарты по этому вопросу? Кто-нибудь уже написал алгоритм для этого? Если нет, я планирую сделать функцию в моем развивающемся пакете stplanr, чтобы сделать это.

Воспроизводимый пример (с использованием потрясающей функции вращения от @geospacedman) из моих собственных « опознаваемых » данных:

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

красный маршрут

Результат показан выше. Таким образом, красный маршрут «опознаваем» и есть ли лучший способ?

RobinLovelace
источник
5
Я думаю, что вам может понадобиться хорошее определение и область для того, что здесь является «анонимным». Это будет в значительной степени зависеть от контекста данных, например, если он находится в городе, любой мог бы пойти даже по очень точному маршруту, в отдаленной / ограниченной зоне он выдает гораздо больше информации, если он начинается / заканчивается или проходит через особенно информативное место (например, чей-то дом). И какую информацию нужно сохранить? пройденное расстояние? относительное время или скорость? путь для наметки следа? Они будут определять, можете ли вы просто удалить (некоторые) данные или добавить, например, постоянный / случайный шум.
drfrogsplat
что вы планируете использовать для вопросов тоже, вы можете просто установить начальную точку 0,0 для всех ваших маршрутов
Ян Тертон
Интересный вопрос, и я имею дело с некоторыми подобными проблемами с общими данными о велосипеде. Вы представляете себе «анонимный» файл GPX и сохраняете его в формате GPX? Не могли бы вы сохранить как строку (без информации о трекпоинт)? Что вы действительно хотите скрыть?
Симбамангу
Обсуждение с коллегами привело к идее простого отрезания первого и последнего метра на расстоянии, которое считается «анонимным» en.wikipedia.org/wiki/K-anonymity . В ответе на @drfrogsplat я имею в виду определение анонимности ICO, которое является расплывчатым: «Не существует простого правила для обработки пространственной информации - такой как почтовые индексы, данные GPS или ссылки на карты - в соответствии с Законом о защите данных 1998 года (DPA). В некоторых обстоятельства, которые будут представлять собой личные данные "(но какие?): ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace
1
Что такое анонимность для последовательности точек GPS? Что вы имеете в виду под «рубкой» первого / последнего метра - вы имеете в виду обрезку набора точек (короче) или снижение точности точек трека?
Симбамангу

Ответы:

5

Я работаю с нашей местной велосипедной группой, чтобы анонимизировать файлы GPX по двум критериям (в первую очередь для обеспечения безопасности). Я никогда не сталкивался со стандартным способом анонимизации данных, но это удовлетворяет две проблемы наших участников, сохраняя при этом точность вдоль дорог и информацию о скорости:

  • Личные локации, удаление «приватных» зон для частных лиц;
  • Затемнение временных меток, чтобы данные о путешествии не могли использоваться для идентификации отдельных движений.

GPSBabel может выполнить оба этих действия из командной строки - например, чтобы сдвинуть время в файле GPX на +123450 секунд и удалить все точки отслеживания на расстоянии 0,5 км от ориентира в северной Танзании:

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: только дорожки процесса;
  • -i, -f: тип входного файла (gpx) и имя файла;
  • -x: два последовательных (-x) аргумента фильтра для сдвига по времени (перемещение) и удаления (радиус, исключение) вокруг точки;
  • -o, -F: тип выходного файла и имя файла.

Эта команда связывает воедино несколько фильтров - сначала преобразует трекпоинты в путевые точки, затем фильтрует, затем преобразует обратно в трекпоинты.

Обратите внимание, что сокращение десятичных разрядов вокруг ориентира / области конфиденциальности ОЧЕНЬ важно, поскольку оно затеняет точный центр области конфиденциальности. 3 знака после запятой = точность ~ 110 м в этом случае.

Обычно я звоню в GPSBabel из R и пишу новый файл GPX с примененными фильтрами, включая случайный сдвиг +/- 2 недели. Это было бы лучше, как сценарий bash или python, но большая часть другой работы, которую я делаю, связана с R, и я ленивый ...

# 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
источник
1

Вам не повезло, это невероятно сложно сделать! Если вы серьезно относитесь к этому, вы должны прочитать о дифференциальной конфиденциальности, потому что это, вероятно, то, что вы ищете.

Когда вы думаете об этой проблеме, вам следует рассмотреть случай с отшельником, живущим в конце длинной изолированной дороги. Вы действительно думаете, что можете что-то сделать с их GPS-координатой и ничего не рассказать об этом конкретном человеке? Дополнительная информация здесь заключается в том, что легко обнаружить, что там живет только один человек.

Удаление идентификатора пользователя, время и добавление шума к точкам данных - это хорошее место для начала. Но проблема в том, что все точки данных сильно коррелированы, поэтому, если вы добавите случайный шум в каждую точку, шум будет устранен, и кто-то сможет получить вероятные траектории. Таким образом, шум должен быть устойчивым к этой атаке, например, делая его постоянным по траектории. Но тогда траектории, вероятно, можно легко сопоставить с вероятными маршрутами, основанными на дорогах и т. Д.

Я не уверен, что данные, которые у вас получатся, будут работать для того, что вы хотите с ними делать, но, по крайней мере, это увлекательная область.

PS: я не знаю о юридически приемлемом, я бы ожидал, что это будет движущейся целью и конкретной страной, в то время как математическое определение дифференциальной конфиденциальности является наиболее надежным, что вы можете получить.

Безумный Эчет
источник
0

выполнить корректировку координат X и Y каждой точки на случайное расстояние между определенным минимальным и максимальным смещением. также сделайте направление смещения (плюс или минус) случайным выбором. Включите в рандомизацию, что некоторые точки могут не иметь регулировки для одной или обеих частей пары координат.

Адам
источник