Last active
January 15, 2023 05:25
-
-
Save chappy84/8d23f9c3235796dec46ea0749c15d83f to your computer and use it in GitHub Desktop.
Quick and dirty PHP script to convert .stravactivity file to basic gpx xml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env php | |
<?php | |
function dateInFormat($timestamp) | |
{ | |
return date('Y-m-d\TH:i:s\Z', $timestamp); | |
} | |
function latLongInFormat($reference) | |
{ | |
return round((float) $reference, 6); | |
} | |
if ($argc <= 1) { | |
die("Please provide a file\n"); | |
} | |
$filename = $argv[1]; | |
if (!preg_match('/\.stravactivity$/', $filename)) { | |
die("Please provide a stravactivity file\n"); | |
} | |
$filePath = realpath($filename); | |
if (empty($filePath)) { | |
die('Couldn\'t find file: ' . $filename . "\n"); | |
} | |
if (false === ($fh = @fopen($filePath, 'r'))) { | |
die('Couldn\'t open ' . $filePath . " , Please check the file permissions\n"); | |
} | |
date_default_timezone_set('UTC'); | |
$start = null; | |
$points = array(); | |
while (false !== ($line = fgets($fh))) { | |
if (0 === strpos($line, 'wp: ') | |
&& preg_match_all('/(?P<name>[a-z]+)\:(?P<value>[0-9.-]+)(;\s+)??/', $line, $matches) | |
) { | |
$point = []; | |
foreach ($matches['name'] as $key => $name) { | |
$point[$name] = $matches['value'][$key]; | |
} | |
if ($start === null && !empty($point['t'])) { | |
$start = $point['t']; | |
} | |
$points[] = $point; | |
} | |
} | |
if (empty($points)) { | |
die("No points found\n"); | |
} | |
echo <<<'NOWDOC' | |
<?xml version="1.0" encoding="UTF-8"?> | |
<gpx creator="GenericScript" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"> | |
<metadata> | |
<time> | |
NOWDOC; | |
echo dateInFormat($start); | |
echo <<<'NOWDOC' | |
</time> | |
</metadata> | |
<trk> | |
<name>Generated GPX</name> | |
<trkseg> | |
NOWDOC; | |
foreach ($points as $point) { | |
echo ' <trkpt lat="', latLongInFormat($point['lat']), '" lon="', latLongInFormat($point['long']), '"> | |
<ele>', round((float) $point['alt'], 1), '</ele> | |
<time>', dateInFormat($point['t']), '</time> | |
</trkpt> | |
'; | |
} | |
echo <<<'NOWDOC' | |
</trkseg> | |
</trk> | |
</gpx> | |
NOWDOC; | |
echo "\n"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@Williamdb5 it's not an issue with Big Sur thankfully.
It can't find a file in your Downloads folder called
convert_stravactivity_to_gpx
, which means you've either not downloaded the above script, or not downloaded it to yourDownloads
foldertry this:
The URL with the
curl
command is the what you get from the "Raw" link at the top of the page, and is from the last edit I made before todayThat
curl -O
command will download the URL to your downloads folder (as long as you run it after the cd command) in a file calledconvert_stravactivity_to_gpx
Hopefully that helps