protected function parseTrackpoint(\SimpleXMLElement $trackpointNode) { // Skip the point if lat/lng not found if (!isset($trackpointNode->Position->LatitudeDegrees) || !isset($trackpointNode->Position->LongitudeDegrees)) { return; } $point = new Point(); $point->setAltitude((double) $trackpointNode->AltitudeMeters); $point->setDistance((double) $trackpointNode->DistanceMeters); $point->setLatitude((double) $trackpointNode->Position->LatitudeDegrees); $point->setLongitude((double) $trackpointNode->Position->LongitudeDegrees); $point->setTime(new \DateTime($trackpointNode->Time)); if (isset($trackpointNode->HeartRateBpm->Value)) { $point->setHeartRate((int) $trackpointNode->HeartRateBpm->Value); } if (isset($trackpointNode->Extensions->TPX->Speed)) { $point->setSpeed($this->convertSpeed((double) $trackpointNode->Extensions->TPX->Speed)); } else { // TODO If no speed is set, we can calculate it from the point before. } return $point; }