geocode/includes/modules/filefield/gpx.inc, line 26
- Versions
- 6
gpx_points($items, $return_values = false)
Code
<?php
function gpx_points($items, $return_values = false) {
$points = array();
for ($i = 0; $i < $items->length; $i++) {
$lat = $items->item($i)->getAttribute('lat');
$lon = $items->item($i)->getAttribute('lon');
if (!isset($points['min_lat']) || ($lat < $points['min_lat']))
$points['min_lat'] = $lat;
if (!isset($values['max_lat']) || ($lat > $points['max_lat']))
$points['max_lat'] = $lat;
if (!isset($points['min_lon']) || ($lon < $points['min_lon']))
$points['min_lon'] = $lon;
if (!isset($points['max_lon']) || ($lon > $points['max_lon']))
$points['max_lon'] = $lon;
if ($return_values) {
$p = array( 'lat' => $lat, 'lon' => $lon );
$children = $items->item($i)->getElementsByTagName('*');
for ($j = 0; $j < $children->length; $j++) {
$type = $children->item($j)->nodeName;
$p[$type] = gpx_callbacks($children->item($j), $children, $j);
}
// Calculate some extra values
if (isset($p['time'])) {
$points['end_time'] = $p['time'];
if (!isset($points['start_time'])) {
$points['start_time'] = $p['time'];
}
if (isset($prev)) {
// climb
if ($p['ele']) {
$p['climb'] = $p['ele'] - $prev['ele'];
if ($p['climb'] > 0) $points['climb'] += $p['climb'];
}
// distance
$distance = gpx_distance($prev['lat'], $prev['lon'], $p['lat'], $p['lon']);
// Add elevation change (in feet) to distance (in miles)
if ($p['ele']) {
$distance += abs($p['climb']) * 0.000189393939;
}
$points['distance'] += $distance;
$p['distance'] = $distance;
// mph
$mph = $distance / (($p['time'] - $prev['time']) / 3600 );
if (!isset($points['min_mph']) || ($mph < $points['min_mph']))
$points['min_mph'] = $mph;
if (!isset($points['max_mph']) || ($mph > $points['max_mph']))
$points['max_mph'] = $mph;
$p['mph'] = $mph;
}
}
$points['data'][] = $p;
$prev = $p;
}
}
if (isset($points['start_time'])) {
if($points['time'] = $points['end_time'] - $points['start_time']) {
$points['mph'] = $points['distance'] / ($points['time'] / 3600 );
}
}
return $points;
}
?> 