/** * Get a workout from a string. * * @param string $string The data. * @return \SportTrackerConnector\Workout\Workout */ public function fromString($string) { $simpleXML = new SimpleXMLElement($string); $workout = new Workout(); foreach ($simpleXML->Activities[0] as $simpleXMLActivity) { $workoutTrack = new Track(); // Sport. $attributes = $simpleXMLActivity->attributes(); if (isset($attributes['Sport'])) { $workoutTrack->setSport(SportGuesser::getSportFromCode((string) $attributes['Sport'])); } // Track points. foreach ($simpleXMLActivity->Lap as $lap) { foreach ($lap->Track as $track) { foreach ($track->Trackpoint as $trackPoint) { $dateTime = new DateTime($trackPoint->Time); $latitude = (string) $trackPoint->Position->LatitudeDegrees; $longitude = (string) $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; }
/** * Get a workout from a string. * * @param string $string The data. * @return \SportTrackerConnector\Workout\Workout */ public function fromString($string) { $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) { $track = new Track(); // Sport. if (isset($simpleXMLTrack->type)) { $track->setSport(SportGuesser::getSportFromCode($simpleXMLTrack->type)); } // Track points. foreach ($simpleXMLTrack->trkseg->trkpt as $point) { $attributes = $point->attributes(); $dateTime = new DateTime($point->time); $trackPoint = new TrackPoint((string) $attributes['lat'], (string) $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; }
/** * Get a track point. * * @param string $lat The latitude. * @param string $lon The longitude. * @param string $time The time. * @param integer $ele The elevation. * @param integer $hr The heart rate. * @return TrackPoint */ private function getTrackPoint($lat, $lon, $time, $ele, $hr) { $trackPoint = new TrackPoint($lat, $lon, new DateTime($time)); $trackPoint->setElevation($ele); $extensions = array(new HR($hr)); $trackPoint->setExtensions($extensions); return $trackPoint; }
/** * Get a track point. * * @param string $latitude The latitude. * @param string $longitude The longitude. * @param string $time The time. * @param float $distance The distance from start to that point. * @param integer $elevation The elevation. * @param integer $heartRate The heart rate. * @return TrackPoint */ private function getTrackPoint($latitude, $longitude, $time, $elevation, $distance = null, $heartRate = null) { $trackPoint = new TrackPoint($latitude, $longitude, new DateTime($time)); $trackPoint->setElevation($elevation); $trackPoint->setDistance($distance); if ($heartRate !== null) { $trackPoint->setExtensions(array(new HR($heartRate))); } return $trackPoint; }
/** * Test setting extensions. */ public function testSetExtensions() { $trackPoint = new TrackPoint(null, null, new DateTime()); $em1 = $this->getExtensionMock('e1'); $em2 = $this->getExtensionMock('e2'); $em3 = $this->getExtensionMock('e3'); $extensions = array($em1, $em2, $em3); $trackPoint->setExtensions($extensions); $this->assertEquals($extensions, array_values($trackPoint->getExtensions())); $this->assertCount(3, $trackPoint->getExtensions()); $this->assertSame($em1, $trackPoint->getExtension('e1')); $this->assertSame($em2, $trackPoint->getExtension('e2')); $this->assertSame($em3, $trackPoint->getExtension('e3')); }