ฉันทำงานกับกลุ่มการขี่จักรยานในพื้นที่ของเราเพื่อไม่เปิดเผยชื่อไฟล์ GPX ในสองเกณฑ์ (โดยหลัก ๆ เพื่อความปลอดภัย) ฉันไม่เคยเจอวิธีการเปิดเผยข้อมูลแบบมาตรฐาน แต่สิ่งนี้ตอบสนองความกังวลสองประการของสมาชิกของเราในขณะที่รักษาความถูกต้องตามถนนและข้อมูลความเร็ว:
- สถานที่ส่วนบุคคลการลบพื้นที่ "ส่วนตัว" สำหรับบุคคล
- การปิดบังเวลาประทับดังนั้นข้อมูลการเดินทางไม่สามารถใช้ระบุการเคลื่อนไหวของแต่ละบุคคลได้
GPSBabel สามารถทำทั้งสองอย่างนี้จากบรรทัดคำสั่ง - ตัวอย่างเช่นเมื่อต้องการเลื่อนเวลาในไฟล์ GPX ภายใน +123450 วินาทีและลบ trackpoint ทั้งหมดออกไป 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
: ประเภทไฟล์ที่ส่งออกและชื่อไฟล์
คำสั่งนี้เชื่อมโยงตัวกรองหลายตัวเข้าด้วยกัน - ก่อนจะเปลี่ยน trackpoints เป็น waypoints จากนั้นทำการกรองจากนั้นเปลี่ยนกลับเป็น trackpoint
โปรดทราบว่าการลดตำแหน่งทศนิยมรอบ ๆ สถานที่สำคัญ / ความเป็นส่วนตัวนั้นสำคัญมากเนื่องจากจะปิดบังศูนย์กลางที่แน่นอนของพื้นที่ความเป็นส่วนตัว ทศนิยม 3 ตำแหน่ง = ความแม่นยำ 110 มม.ในกรณีนี้
ฉันมักจะเรียก GPSBabel จาก R เขียนไฟล์ GPX ใหม่โดยใช้ตัวกรองรวมถึงการเปลี่ยนเวลาแบบสุ่ม +/- 2 สัปดาห์ นี่จะดีกว่าเป็นสคริปต์ทุบตีหรืองูหลาม แต่งานอื่นอีกมากที่ฉันทำคือใน 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)