로컬 사이클링 그룹과 협력하여 GPX 파일을 두 가지 기준 (주로 보안을 위해)으로 익명화하고 있습니다. 나는 익명의 데이터에 대한 표준적인 방법을 본 적이 없지만 이것은 도로와 속도 정보를 따라 정확성을 유지하면서 회원의 두 가지 관심사를 충족시킵니다.
- 개인의 '개인'영역을 제거하는 개인 위치
- 이동 데이터를 사용하여 개별 움직임을 식별 할 수 없도록 타임 스탬프를 숨기십시오.
GPSBabel은 명령 행에서 두 가지를 모두 수행 할 수 있습니다. 예를 들어 GPX 파일의 시간을 +123450 초만큼 이동하고 탄자니아 북부의 랜드 마크에서 0.5km 떨어진 모든 트랙 포인트를 제거합니다.
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을 호출하여 임의의 타임 시프트 +/- 2 주를 포함하여 필터가 적용된 새로운 GPX 파일을 작성합니다. 이것은 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)