コード例 #1
0
ファイル: class.ParserKMLSingle.php プロジェクト: 9x/Runalyze
 /**
  * Parse coordinates
  */
 protected function parseCoordinates()
 {
     foreach ($this->XML->xpath('//coordinates') as $coordinates) {
         $lines = preg_split('/\\r\\n|\\r|\\n/', (string) $coordinates);
         foreach ($lines as $line) {
             $parts = explode(',', $line);
             if (count($parts) == 3) {
                 if (empty($this->gps['km'])) {
                     $this->gps['km'][] = 0;
                 } else {
                     $this->gps['km'][] = end($this->gps['km']) + round(Runalyze\Model\Route\Object::gpsDistance($parts[1], $parts[0], end($this->gps['latitude']), end($this->gps['longitude'])), ParserAbstract::DISTANCE_PRECISION);
                 }
                 $this->gps['latitude'][] = $parts[1];
                 $this->gps['longitude'][] = $parts[0];
                 $this->gps['altitude'][] = $parts[2];
             }
         }
     }
 }
コード例 #2
0
 /**
  * Calculate distance
  */
 private function setDistanceFromGPSdata()
 {
     if (!empty($this->gps['latitude']) && !empty($this->gps['longitude']) && empty($this->gps['km'])) {
         $num = count($this->gps['latitude']);
         $this->gps['km'] = array(0);
         $lastDistance = 0;
         for ($i = 1; $i < $num; ++$i) {
             $step = round(Runalyze\Model\Route\Object::gpsDistance($this->gps['latitude'][$i - 1], $this->gps['longitude'][$i - 1], $this->gps['latitude'][$i], $this->gps['longitude'][$i]), ParserAbstract::DISTANCE_PRECISION);
             $this->gps['km'][] = $lastDistance + $step;
             $lastDistance += $step;
         }
         $this->TrainingObject->setArrayDistance($this->gps['km']);
         $this->TrainingObject->setDistance(end($this->gps['km']));
     }
 }
コード例 #3
0
ファイル: class.ParserPWXSingle.php プロジェクト: 9x/Runalyze
 /**
  * Parse log entry
  * @param SimpleXMLElement $Log 
  */
 protected function parseLogEntry($Log)
 {
     if ((int) $Log->timeoffset == 0) {
         return;
     }
     if (empty($Log->dist) && (empty($Log->lat) || empty($Log->lon))) {
         return;
     }
     if (!empty($Log->dist)) {
         $dist = (double) $Log->dist / 1000;
     } elseif (empty($this->gps['latitude'])) {
         $dist = 0;
     } else {
         $dist = end($this->gps['km']) + Runalyze\Model\Route\Object::gpsDistance(end($this->gps['latitude']), end($this->gps['longitude']), (double) $Log->lat, (double) $Log->lon);
     }
     $this->gps['time_in_s'][] = (int) $Log->timeoffset;
     $this->gps['latitude'][] = !empty($Log->lat) ? (double) $Log->lat : 0;
     $this->gps['longitude'][] = !empty($Log->lon) ? (double) $Log->lon : 0;
     $this->gps['altitude'][] = !empty($Log->alt) ? round((int) $Log->alt) : 0;
     $this->gps['heartrate'][] = !empty($Log->hr) ? round((int) $Log->hr) : 0;
     $this->gps['km'][] = round($dist, ParserAbstract::DISTANCE_PRECISION);
     $this->gps['rpm'][] = !empty($Log->cad) ? (int) $Log->cad : 0;
     $this->gps['temp'][] = !empty($Log->temp) ? round((int) $Log->temp) : 0;
     $this->gps['power'][] = !empty($Log->pwr) ? round((int) $Log->pwr) : 0;
 }
コード例 #4
0
ファイル: class.ParserTRKSingle.php プロジェクト: 9x/Runalyze
 /**
  * Read trackpoint
  * @param string $line
  */
 private function readTrackpoint($line)
 {
     $values = preg_split('/[\\s]+/', $line);
     $num = count($values);
     if ($num < 7) {
         return;
     }
     $latitude = floatval($values[2]);
     $longitude = floatval($values[3]);
     $time = strtotime($values[4] . ' ' . $values[5]) - $this->starttime - $this->pauseInSeconds;
     if (!$this->isStarted) {
         $this->isStarted = true;
         $this->starttime = $time;
         $time = 0;
     }
     if ($values[6] == 'N' && $time > 0) {
         $this->isPaused = true;
         if ($time == end($this->gps['time_in_s'])) {
             return;
         }
     } elseif ($this->isPaused) {
         $this->isPaused = false;
         $pause = $time > 0 ? $time - end($this->gps['time_in_s']) : 0;
         $time -= $pause;
         $this->pauseInSeconds += $pause;
         $this->latitude = $latitude;
         $this->longitude = $longitude;
         return;
     }
     $this->gps['time_in_s'][] = $time;
     $this->gps['km'][] = $this->latitude === false ? 0 : end($this->gps['km']) + round(Runalyze\Model\Route\Object::gpsDistance($latitude, $longitude, $this->latitude, $this->longitude), ParserAbstract::DISTANCE_PRECISION);
     $this->gps['latitude'][] = $latitude;
     $this->gps['longitude'][] = $longitude;
     $this->gps['altitude'][] = $num > 7 && $values[7] != '-1' ? round($values[7]) : 0;
     $this->gps['temp'][] = $num > 14 && $values[14] != '-1' ? round($values[14]) : 0;
     $this->gps['heartrate'][] = $num > 17 && $values[17] != '-1' ? round($values[17]) : 0;
     $this->latitude = $latitude;
     $this->longitude = $longitude;
 }
コード例 #5
0
ファイル: class.ParserGPXSingle.php プロジェクト: 9x/Runalyze
 /**
  * Parse trackpoint
  * @param SimpleXMLElement $Point 
  */
 protected function parseTrackpoint($Point)
 {
     if ($this->lastTimestamp == 0) {
         $this->lastTimestamp = strtotime((string) $Point->time);
     }
     if (!empty($Point['lat'])) {
         $lat = round((double) $Point['lat'], 7);
         $lon = round((double) $Point['lon'], 7);
         $dist = empty($this->gps['latitude']) ? 0 : round(Runalyze\Model\Route\Object::gpsDistance($lat, $lon, end($this->gps['latitude']), end($this->gps['longitude'])), ParserAbstract::DISTANCE_PRECISION);
     } elseif (count($this->gps['latitude'])) {
         $lat = end($this->gps['latitude']);
         $lon = end($this->gps['longitude']);
         $dist = 0;
     } else {
         return;
     }
     $newTime = $this->getTimeOfPoint($Point);
     if ($this->lookForPauses && $this->limitForPauses > 0 && $newTime - end($this->gps['time_in_s']) > $this->limitForPauses) {
         $this->wasPaused = true;
         $this->pauseDuration += $newTime - end($this->gps['time_in_s']);
         return;
     }
     $this->gps['time_in_s'][] = $newTime;
     $this->gps['km'][] = empty($this->gps['km']) ? $dist : $dist + end($this->gps['km']);
     $this->gps['latitude'][] = $lat;
     $this->gps['longitude'][] = $lon;
     $this->gps['altitude'][] = isset($Point->ele) ? (int) $Point->ele : 0;
     $this->parseExtensionValues($Point);
     if ($this->wasPaused) {
         $num = count($this->gps['heartrate']);
         $this->TrainingObject->Pauses()->add(new \Runalyze\Model\Trackdata\Pause($this->gps['time_in_s'][$num - 2], $this->pauseDuration, $this->gps['heartrate'][$num - 2], $this->gps['heartrate'][$num - 1]));
         $this->wasPaused = false;
         $this->pauseDuration = 0;
     }
 }
コード例 #6
0
ファイル: class.ParserTCXSingle.php プロジェクト: 9x/Runalyze
 /**
  * Calculate distance to trackpoint
  * @param SimpleXMLElement $TP
  * @return int
  */
 protected function distanceToTrackpoint(SimpleXMLElement &$TP)
 {
     if (empty($this->gps['km'])) {
         return empty($TP->Position) ? 0 : 0.001;
     }
     if (empty($TP->Position)) {
         return end($this->gps['km']);
     }
     return end($this->gps['km']) + Runalyze\Model\Route\Object::gpsDistance(end($this->gps['latitude']), end($this->gps['longitude']), (double) $TP->Position->LatitudeDegrees, (double) $TP->Position->LongitudeDegrees);
 }