示例#1
0
 /**
  * {@inheritdoc}
  */
 public function fromString($string) : Workout
 {
     $simpleXML = new \SimpleXMLElement($string);
     $workout = new Workout();
     foreach ($simpleXML->Activities[0] as $simpleXMLActivity) {
         // Sport.
         $attributes = $simpleXMLActivity->attributes();
         $sport = SportMapperInterface::class;
         if (isset($attributes['Sport'])) {
             $sport = SportGuesser::sportFromCode((string) $attributes['Sport']);
         }
         $workoutTrack = new Track(array(), $sport);
         // Track points.
         foreach ($simpleXMLActivity->Lap as $lap) {
             foreach ($lap->Track as $track) {
                 foreach ($track->Trackpoint as $trackPoint) {
                     $dateTime = new \DateTime((string) $trackPoint->Time);
                     $latitude = (double) $trackPoint->Position->LatitudeDegrees;
                     $longitude = (double) $trackPoint->Position->LongitudeDegrees;
                     $workoutTrackPoint = new TrackPoint($latitude, $longitude, $dateTime);
                     $workoutTrackPoint->setElevation(round((double) $trackPoint->AltitudeMeters, 2));
                     if ($trackPoint->DistanceMeters) {
                         $workoutTrackPoint->setDistance($trackPoint->DistanceMeters);
                     }
                     $extensions = $this->parseExtensions($trackPoint);
                     $workoutTrackPoint->setExtensions($extensions);
                     $workoutTrack->addTrackPoint($workoutTrackPoint);
                 }
             }
         }
         $workout->addTrack($workoutTrack);
     }
     return $workout;
 }
示例#2
0
 /**
  * {@inheritdoc}
  */
 public function fromString($string) : Workout
 {
     $simpleXML = new \SimpleXMLElement($string);
     $workout = new Workout();
     if (isset($simpleXML->metadata->author->name)) {
         $workout->setAuthor(new Author($simpleXML->metadata->author->name));
     }
     foreach ($simpleXML->trk as $simpleXMLTrack) {
         // Sport.
         $sport = SportMapperInterface::class;
         if (isset($simpleXMLTrack->type)) {
             $sport = SportGuesser::sportFromCode((string) $simpleXMLTrack->type);
         }
         $track = new Track(array(), $sport);
         // Track points.
         foreach ($simpleXMLTrack->trkseg->trkpt as $point) {
             $attributes = $point->attributes();
             $dateTime = new \DateTime((string) $point->time);
             $trackPoint = new TrackPoint((double) $attributes['lat'], (double) $attributes['lon'], $dateTime);
             $trackPoint->setElevation((int) $point->ele);
             if (isset($point->extensions)) {
                 $trackPoint->setExtensions($this->parseExtensions($point->extensions));
             }
             $track->addTrackPoint($trackPoint);
         }
         $workout->addTrack($track);
     }
     return $workout;
 }
示例#3
0
 /**
  * Write the heart rate data for a lap.
  *
  * @param \XMLWriter $xmlWriter The XML writer.
  * @param Track $track The track to write.
  */
 protected function writeLapHeartRateDate(\XMLWriter $xmlWriter, Track $track)
 {
     $averageHeartRate = array();
     $maxHearRate = null;
     foreach ($track->trackPoints() as $trackPoint) {
         if ($trackPoint->hasExtension(HR::ID()) === true) {
             $pointHearRate = $trackPoint->extension(HR::ID())->value();
             $maxHearRate = max($maxHearRate, $pointHearRate);
             $averageHeartRate[] = $pointHearRate;
         }
     }
     if ($averageHeartRate !== array()) {
         $xmlWriter->startElement('AverageHeartRateBpm');
         $xmlWriter->writeAttributeNs('xsi', 'type', null, 'HeartRateInBeatsPerMinute_t');
         $hearRateValue = array_sum($averageHeartRate) / count($averageHeartRate);
         $xmlWriter->writeElement('Value', (string) $hearRateValue);
         $xmlWriter->endElement();
     }
     if ($maxHearRate !== null) {
         $xmlWriter->startElement('MaximumHeartRateBpm');
         $xmlWriter->writeAttributeNs('xsi', 'type', null, 'HeartRateInBeatsPerMinute_t');
         $xmlWriter->writeElement('Value', (string) $maxHearRate);
         $xmlWriter->endElement();
     }
 }