/** * @param SimpleXMLElement $xml * @return Point * @throws InvalidGPXException */ public static function fromXML(SimpleXMLElement $xml) { $attributes = $xml->attributes(); if (!($latitude = $attributes['lat'])) { throw new InvalidGPXException("No latitude specified on point node."); } if (!($longitude = $attributes['lon'])) { throw new InvalidGPXException("No longitude specified on point node."); } $point = new Point((double) $latitude, (double) $longitude); if (!empty($xml->ele)) { $point->setElevation((double) $xml->ele[0]); } if (!empty($xml->time)) { $point->setTime(strtotime((string) $xml->time[0])); } return $point; }
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; }