मैं दो मानदंडों (मुख्य रूप से सुरक्षा के लिए) पर 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 मी सटीकता इस मामले में।
मैं आमतौर पर R से GPSBabel कॉल करता हूं, एक नए GPX फ़ाइल को फ़िल्टर के साथ लागू करता है, जिसमें एक यादृच्छिक टाइमशिफ्ट +/- 2 सप्ताह शामिल है। यह बैश या पाइथॉन स्क्रिप्ट के रूप में बेहतर होगा लेकिन मेरे द्वारा किए जाने वाले बहुत सारे काम आर और मैं आलसी हैं ...
# 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)