Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions gpxtools/gpxsplitter.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,25 @@ def need_split_by_days(t1: datetime.datetime, t2: datetime.datetime, seconds: in
def need_split_by_time_interval(t1: datetime.datetime, t2: datetime.datetime, seconds: int) -> bool:
return abs((t2 - t1).total_seconds()) > seconds

def split_file_by_tracks(gpx_filename: str, gpx_data: gpxpy.GPX) -> None:
gpx_template = gpx_data.clone()
gpx_template.tracks.clear()
for track_index in range(len(gpx_data.tracks)):
track = gpx_data.tracks[track_index]
gpx_clone = gpx_template.clone()
gpx_clone.tracks.append(track)
file_prefix = str(track_index)
if track.name:
file_prefix = track.name
fn = common.prefix_filename(gpx_filename, file_prefix)
with open(fn, "w") as f:
f.write(gpx_clone.to_xml())
print(f"Saved {fn}")

def save_gpx(gpg: gpxpy.GPX) -> None:
pass

def process(gpx_file: str, split_by_days: bool, time_interval: str) -> None:
def process(gpx_file: str, split_by_days: bool, time_interval: str, split_tracks: bool) -> None:
print(f"Opening {gpx_file}")
with open(gpx_file) as f:
gpx = gpx_parser.parse(f)
Expand All @@ -33,6 +48,9 @@ def process(gpx_file: str, split_by_days: bool, time_interval: str) -> None:
elif time_interval:
split_func = need_split_by_time_interval
interval = common.parse_duration(time_interval)
elif split_tracks:
split_file_by_tracks(gpx_file, gpx)
return
else:
print("Specify way to split GPX file")
sys.exit(1)
Expand Down Expand Up @@ -84,12 +102,14 @@ def main() -> None:
parser = argparse.ArgumentParser(description='Split GPX file')
parser.add_argument('-d', '--days', action='store_true', default=False, help='Split multi-day track into single day tracks')
parser.add_argument('-t', '--time', type=str, default="", help='Split by time intervals (for exampe 1m, 2s, 3h)')
parser.add_argument('-r', '--tracks', action='store_true', default=False, help='Split tracks into individual files')
parser.add_argument('gpx_files', metavar='gpx', type=str, default='', nargs='*', help='GPX file')
args = parser.parse_args()

gpx_files = args.gpx_files
split_by_days = args.days
time_interval = args.time
split_tracks = args.tracks

for gpx_file in gpx_files:
process(gpx_file, split_by_days = split_by_days, time_interval=time_interval)
process(gpx_file, split_by_days = split_by_days, time_interval=time_interval, split_tracks=split_tracks)