ローカルサイクリンググループと協力して、2つの基準(主にセキュリティ)でGPXファイルを匿名化します。データを匿名化する標準的な方法に出くわしたことはありませんが、これは、道路と速度情報に沿った精度を維持しながら、メンバーの2つの懸念を満たします。
- 個人の場所、個人用の「プライベート」エリアの削除。
- 旅行データを使用して個々の動きを識別できないように、タイムスタンプを隠します。
GPSBabelは、コマンドラインからこれらの両方を実行できます。たとえば、GPXファイルの時刻を+123450秒シフトし、タンザニア北部のランドマークから0.5 km離れたすべてのトラックポイントを削除します。
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
:ポイントの周りのタイムシフト(移動)と削除(半径、除外)の2つの連続(-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)