stravagpxmerger 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/usr/bin/env php -q
  2. <?php
  3. /*
  4. * StravaMerger © David Gouveia - http://www.davidgouveia.net
  5. * Simple script to merge tracking data from Strava's exported GPX files.
  6. * The backtrack_limit is there because some files could not be parsed due to their size.
  7. * Feel free to raise the limit but be carrefull not to cross the limit.
  8. * Instead of using regex, I could have used a XML cursor to overcome the backtrack limit
  9. * but either I would have to use the php_xml extension or build my own parser.
  10. */
  11. ini_set("pcre.backtrack_limit", "10000000");
  12. if ( !trim( $argv[1] ) || trim( !$argv[2] ) || sizeof($argv) < 4 )
  13. die("Usage:\n$argv[0] file1.gpx file2.gpx <fileN.gpx> output.gpx\n" );
  14. $segments ="";
  15. for($i = 1; $i < sizeof($argv) - 1; $i++)
  16. {
  17. echo "Processing $argv[$i] ...";
  18. if (!is_file( $argv[$i] ) ) die( "Invalid file: $argv[$i]\n" );
  19. $gpx = file_get_contents( $argv[$i] );
  20. if ( $i == 1 ) preg_match( "/^(.*?)<trkseg>.*?<\/trkseg>(.*?)$/is", $gpx, $metadata );
  21. preg_match("/<trkseg>(.*?)<\/trkseg>/ims", $gpx, $matches);
  22. if( trim( $matches[1] ) )
  23. {
  24. $segments .= $matches[1];
  25. echo "[OK]\n";
  26. }
  27. else
  28. echo "[FAIL]\n";
  29. }
  30. $output_file = $metadata[1] . "<trkseg>" . $segments . "</trkseg>" . $metadata[2];
  31. file_put_contents($argv[sizeof($argv) -1], $output_file) or die( "Unable to create destination GPX\n" );
  32. print "File " . $argv[sizeof($argv) -1] . " successfully created.\n";