如何匿名化gps文件?


11

想象一下,从法律的角度来看,您有一个要匿名的GPS轨迹。你会怎么做?捕捉到最近的x距离并剥离时间是否足够?是否有国际认可的标准?有没有人已经写过算法来做到这一点?如果没有,我计划在不断发展的stplanr程序包中创建一个函数来执行此操作。

可重现的示例(使用来自@geospacedman的出色旋转功能)来自我自己的' Identifiable '数据:

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

红色路线

结果如上所示。总结:红色路线是否“可识别”,还有更好的方法吗?


5
我认为您可能需要为这里的“匿名”定义一个良好的定义和范围。这将在很大程度上取决于数据的上下文,例如,如果它在城市中,任何人都可以遵循甚至非常精确的路线,那么在偏远/限制区域中,如果它开始/结束于或经过,它会提供很多信息一个特别有用的位置(例如某人的房子)。哪些信息需要保留?行驶距离?相对时间还是速度?绘制路径的路径?这些将决定您是否可以简单地删除(某些)数据,或者添加恒定/随机噪声。
drfrogsplat

您还打算将其用于什么事项,您可以将所有路线的起点都设置为0,0
伊恩·特顿

有趣的问题,正在处理共享自行车数据中的一些类似问题。您是否想“匿名化” GPX文件并将其保持为GPX格式?您可以另存为一条线(丢弃跟踪点信息)吗?您真正想掩盖的是什么?
Simbamangu

与同事的讨论产生了将第一个和最后一个x米切成一定距离的想法,该距离被认为是“ k匿名”,en.wikipedia.org / wiki / K- anonymity。在回答@drfrogsplat时,我的意思是ICO对匿名性的定义,它含糊不清:“根据1998年数据保护法(DPA),没有简单的规则来处理空间信息,例如邮政编码,GPS数据或地图参考。情况下,这将构成个人数据”(但是呢?):ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace

1
什么是K匿名对一系列 GPS点?您说“斩波”第一个/最后一个仪表是什么意思?您是要修剪(缩短)点集或降低跟踪点的精度?
Simbamangu 2015年

Answers:


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位= 准确度约为110m

我通常从R调用GPSBabel,编写一个应用了过滤器的新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)

1

您不走运,这很难做到!如果您对此很认真,则应该阅读有关差异性隐私的信息,因为这可能正是您所追求的。

当您想到这个问题时,您应该考虑一个隐居者生活在漫长的隔离道路尽头的情况。您是否真的认为您可以对他们的GPS坐标做些什么,却不透露有关该特定人的任何信息?这里的附带信息是可以很容易地发现只有一个人住在那儿。

删除用户ID,时间并向数据点添加噪声是一个很好的起点。但是问题在于,所有数据点都具有高度相关性,因此,如果在每个点上添加随机噪声,则噪声将被抵消,并且有人将能够得出可能的轨迹。因此,噪声必须要抵抗这种攻击,例如通过使其在轨迹上恒定不变。但是,轨迹可能可以轻松地与基于道路等的路线相匹配。

我不确定您最终将获得的数据是否仍然可以用于您想使用的数据,但至少它是一个充满热情的领域。

PS:我不知道法律上可接受的内容,我希望它将成为一个移动的目标并针对特定国家/地区,而差异隐私的数学定义是您可以获得的最可靠的方法。


0

对每个点的X和Y坐标进行一定的最小和最大偏移之间的随机距离调整。还可以使偏移量的方向(正负)成为随机选择。包括在随机化中,某些点可能无法调整坐标对的一个或两个部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.