gpx_points

geocode/includes/modules/filefield/gpx.inc, line 26

Versions
6
gpx_points($items, $return_values = false)

▾ 4 functions call gpx_points()

gpx_speed in geocode/includes/modules/filefield/gpx.inc
gpx_speed in geocode/includes/modules/filefield/gpx.inc
gpx_trackpoints in geocode/includes/modules/filefield/gpx.inc
gpx_trackpoints in geocode/includes/modules/filefield/gpx.inc

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;
}
?>