#!/usr/bin/perl $|=1; use strict; use Geo::Gpx; use Storable 'dclone'; use Data::Dumper; use POSIX 'strftime'; my $fh = '/home/lsopov/gps/tracks.gpx'; my $gpx = Geo::Gpx->new( input => $fh ); my $waypoints = $gpx->waypoints(); my $tracks = $gpx->tracks(); printf "Points: %s/%s\n", scalar(@$waypoints),scalar @{$tracks->[0]->{segments}->[0]->{points}}; my (@tr, $s, $sid); foreach my $point (@{$tracks->[0]->{segments}->[0]->{points}}) { if ($s+10*60<$point->{time}) { push @tr, [$sid, $s] if $s; $sid = $point->{time}; } $s = $point->{time}; } push @tr, [$sid, $s]; foreach my $t (@tr) { my $g = Geo::Gpx->new(); $g->waypoints( [grep { $_->{time} >= $t->[0] && $_->{time} <= $t->[1] } @$waypoints] ); my $trk = dclone $tracks; $trk->[0]->{segments}->[0]->{points} = [ grep { $_->{time} >= $t->[0] && $_->{time} <= $t->[1] } @{$trk->[0]->{segments}->[0]->{points}} ]; $g->tracks($trk); my $ftime = strftime "%Y-%m-%d-%H%M", localtime( $t->[0] ); open F, ">./list/". $ftime . ".gpx"; print F $g->xml; close F; }