You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web/Sources/vendor/adriangibbons/php-fit-file-analysis/demo/swim.php

185 lines
6.7 KiB

<?php
/**
* Demonstration of the phpFITFileAnalysis class using Twitter Bootstrap framework
* https://github.com/adriangibbons/phpFITFileAnalysis
*
* If you find this useful, feel free to drop me a line at Adrian.GitHub@gmail.com
*/
require __DIR__ . '/../src/phpFITFileAnalysis.php';
try {
$file = '/fit_files/swim.fit';
$options = [
// 'fix_data' => [],
'units' => 'raw',
// 'pace' => false
];
$pFFA = new adriangibbons\phpFITFileAnalysis(__DIR__ . $file, $options);
} catch (Exception $e) {
echo 'caught exception: '.$e->getMessage();
die();
}
$units = 'm';
$pool_length = $pFFA->data_mesgs['session']['pool_length'];
$total_distance = number_format($pFFA->data_mesgs['record']['distance']);
if ($pFFA->enumData('display_measure', $pFFA->data_mesgs['session']['pool_length_unit']) == 'statute') {
$pool_length = round($pFFA->data_mesgs['session']['pool_length'] * 1.0936133);
$total_distance = number_format($pFFA->data_mesgs['record']['distance'] * 1.0936133);
$units = 'yd';
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>phpFITFileAnalysis demo</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
</head>
<body>
<div class="jumbotron">
<div class="container">
<h2><strong>phpFITFileAnalysis </strong><small>A PHP class for analysing FIT files created by Garmin GPS devices.</small></h2>
<p>This is a demonstration of the phpFITFileAnalysis class available on <a class="btn btn-default btn-lg" href="https://github.com/adriangibbons/phpFITFileAnalysis" target="_blank" role="button"><i class="fa fa-github"></i> GitHub</a></p>
</div>
</div>
<div class="container">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-file-code-o"></i> FIT File info</h3>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt>File: </dt>
<dd><?php echo $file; ?></dd>
<dt>Device: </dt>
<dd><?php echo $pFFA->manufacturer() . ' ' . $pFFA->product(); ?></dd>
<dt>Sport: </dt>
<dd><?php echo $pFFA->sport(); ?></dd>
<dt>Pool length: </dt>
<dd><?php echo $pool_length.' '.$units; ?></dd>
<dt>Duration: </dt>
<dd><?php echo gmdate('H:i:s', $pFFA->data_mesgs['session']['total_elapsed_time']); ?></dd>
<dt>Total distance: </dt>
<dd><?php echo $total_distance.' '.$units; ?></dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-bar-chart"></i> Lap Time vs. Number of Strokes</h3>
</div>
<div class="panel-body">
<div id="lap_times" style="width:100%; height:200px; margin-bottom:8px"></div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-tags"></i> Length Message fields</h3>
</div>
<div class="panel-body">
<table class="table table-condensed table-striped">
<thead>
<th>Length</th>
<th>Time (min:sec)</th>
<th># Strokes</th>
<th>Stroke</th>
</thead>
<tbody>
<?php
$lengths = count($pFFA->data_mesgs['length']['total_timer_time']);
$active_length = 0;
for ($i=0; $i<$lengths; $i++) {
$min = floor($pFFA->data_mesgs['length']['total_timer_time'][$i] / 60);
$sec = number_format($pFFA->data_mesgs['length']['total_timer_time'][$i] - ($min*60), 1);
$dur = $min.':'.$sec;
if ($pFFA->enumData('length_type', $pFFA->data_mesgs['length']['length_type'][$i]) == 'active') {
echo '<tr>';
echo '<td>'.($i+1).'</td>';
echo '<td>'.$dur.'</td>';
echo '<td>'.$pFFA->data_mesgs['length']['total_strokes'][$i].'</td>';
echo '<td>'.$pFFA->enumData('swim_stroke', $pFFA->data_mesgs['length']['swim_stroke'][$active_length]).'</td>';
echo '<td></td>';
echo '</tr>';
$active_length++;
} else {
echo '<tr class="danger">';
echo '<td>'.($i+1).'</td>';
echo '<td>'.$dur.'</td>';
echo '<td>-</td>';
echo '<td>Rest</td>';
echo '</tr>';
}
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script language="javascript" type="text/javascript" src="js/jquery.flot.min.js"></script>
<script type="text/javascript">
$(document).ready( function() {
var chart_options = {
xaxis: {
show: false
},
yaxes: [ { transform: function (v) { return -v; }, inverseTransform: function (v) { return -v; }, tickFormatter: function(label, series) { return label + ' s'; } },
{ alignTicksWithAxis: 1, position: "right", } ],
grid: {
borderWidth: {
top: 0,
right: 0,
bottom: 0,
left: 0
}
}
};
var lap_times = {
'color': 'rgba(255, 0, 0, 1)',
'label': 'Lap Time',
'data': [
<?php
$tmp = [];
for ($i=0; $i<$lengths; $i++) {
if ($pFFA->enumData('length_type', $pFFA->data_mesgs['length']['length_type'][$i]) == 'active') {
$tmp[] = '['.$i.', '.$pFFA->data_mesgs['length']['total_timer_time'][$i].']';
}
}
echo implode(', ', $tmp);
?>
],
lines: { show: true, fill: false, lineWidth: 2 },
points: { show: false }
};
var num_strokes = {
'color': 'rgba(11, 98, 164, 0.5)',
'label': 'Number of Strokes',
'data': [
<?php
$tmp = [];
for ($i=0; $i<$lengths; $i++) {
if ($pFFA->enumData('length_type', $pFFA->data_mesgs['length']['length_type'][$i]) == 'active') {
$tmp[] = '['.$i.', '.$pFFA->data_mesgs['length']['total_strokes'][$i].']';
}
}
echo implode(', ', $tmp);
?>
],
bars: { show: true, fill: true, fillColor: "rgba(11, 98, 164, 0.3)", lineWidth: 1 },
points: { show: false },
yaxis: 2
};
$.plot('#lap_times', [lap_times, num_strokes], chart_options);
});
</script>
</body>
</html>