Solución:
Sorprendentemente, parece que gpsbabel no puede hacerlo. Pero al menos puede ayudar si primero se convierte a csv. Luego dividí el resultado con Unix ‘ split
y vuelva a convertir a gpx con gpsbabel. Una estrategia similar podría funcionar con PowerShell, pero no sé si tiene un split
equivalente. Aquí está la función bash que utilicé:
splitTrack() {
# $1 shall be the gpx file to split
pfx="${1%.*}-"
gpsbabel -i gpx -f "$1" -t -o csv -F -
| split -d -l 500 --additional-suffix=.csv - "$pfx"
for f in "$pfx"*.csv; do
fout=${f%.*}.gpx
gpsbabel -i csv -f "$f" -x transform,trk=wpt -x nuketypes,waypoints
-o gpx -F "$fout"
rm "$f"
done
}
EDITAR: Se agregó una pista de los comentarios sobre cómo obtener puntos de seguimiento en lugar de puntos de paso.
¡Gracias por el guión! También es útil para mí porque mi navegador para bicicletas Garmin comienza a tirar puntos de seguimiento después de que se alcanza una cierta cantidad de puntos de seguimiento.
Agregué una separación de waypoints y tracks y un poco de “compresión” al script de Harald (que también funciona en zsh).
splitTrack() {
# $1 shall be the gpx file to split
pfx="${1%.*}-"
# Split tracks off and simplify track (reduce number of trackpoints but keep
# sufficient accuracy for bike navigation)
gpsbabel -i gpx -f "$1" -x nuketypes,waypoints,routes
-x simplify,crosstrack,error=0.003k -o gpx -F "${pfx}tracks.gpx"
# Split waypoints off (import as extra POI gpx to device)
gpsbabel -i gpx -f "$1" -x nuketypes,tracks,routes -o gpx
-F "${pfx}waypoints.gpx"
# 500 pack from tracks in CSV, start suffix with 01 instead of 00
gpsbabel -i gpx -f "${pfx}tracks.gpx" -t -o csv -F -
| split -d --numeric=1 -l 500 --additional-suffix=.csv - "$pfx"
rm "${pfx}tracks.gpx"
# CSV back to gpx
for f in "$pfx"*.csv; do
fout=${f%.*}.gpx
gpsbabel -i csv -f "$f" -x transform,trk=wpt -x nuketypes,waypoints
-o gpx -F "$fout"
rm "$f"
done
}
Si también desea conservar los datos de elevación, es posible que desee utilizar el formato UNICSV. Ajuste el comando de reimportación al conjunto de campos exportado de GPX a (Uni) CSV. Para obtener más información, consulte https://www.gpsbabel.org/htmldoc-development/fmt_unicsv.html. El siguiente fragmento requiere la instalación del conjunto de herramientas GNU habitual (sed / tail / split).
splitTrack() {
# ===
# abort if no file is passed as argument 1
if ! [[ -f "$1" ]]
then
echo File missing!
return
fi
# ===
# ===
# Set prefix for files according to source file name
pfx="${1%.*}-"
# ===
# ===
# save waypoints in another file
gpsbabel
-i gpx
-f "$1"
-x nuketypes,tracks,routes
-o gpx
-F "${pfx}waypoints.gpx"
# ===
# ===
# filter only track
# simplify track
# transform simplified track into waypoints
# print waypoints in UNICSV format
# pipe
# ignore UNICSV header
# pipe
# take 500 lines and duplicate each 500th line (overlap 1 line)
# in order to avoid gap in transition from one to next track part
# credit goes to https://stackoverflow.com/questions/21756040/extract-a-range-of-rows-with-overlap-using-sed/21757062#21757062
# pipe
# split/save each block of 500 lines into separated UNICSV files with prefix according to source file
gpsbabel
-i gpx
-f "$1"
-x nuketypes,waypoints,routes
-x simplify,crosstrack,error=0.003k
-x transform,wpt=trk
-o unicsv
-F -
| tail
-n +2
| sed
-nr ':a;$!{N;s/[^n]+/&/500;Ta};p;$q;s/.*((n[^n]*){1})$/1/;D'
| split
-d
-a 3
--numeric=1
-l 500
--additional-suffix=.csv
-
"$pfx"
# ===
# ===
# convert separated UNICSV files back to GPX track files
# by transforming UNICSV waypoints back to trackpoints
# also filter out superfluous name tag
for f in "$pfx"*.csv; do
gpsbabel
-i unicsv,fields=no+lat+lon+name+ele
-f "$f"
-x transform,trk=wpt
-x nuketypes,waypoints
-o gpx
-F -
| grep
-v '<name>.*</name>|<cmt>.*</cmt>|<desc>.*</desc>'
> "${f%.*}.gpx"
rm "$f"
done
# ===
return
}
Esto debería funcionar, por ejemplo, con las pistas GPX generadas por https://brouter.de/brouter-web