/** * {@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; }
/** * {@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; }
/** * 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(); } }