| Code Coverage | ||||||||||
| Classes and Traits | Functions and Methods | Lines | ||||||||
| Total |  | 0.00% | 0 / 1 |  | 75.00% | 3 / 4 | CRAP |  | 98.00% | 49 / 50 | 
| GPXParser |  | 0.00% | 0 / 1 |  | 75.00% | 3 / 4 | 17 |  | 98.00% | 49 / 50 | 
| parseFile($dir) |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 3 / 3 | |||
| parseString($inputString) |  | 0.00% | 0 / 1 | 4.00 |  | 93.33% | 14 / 15 | |||
| _parseTrkseg($xmlTrack, $track) |  | 100.00% | 1 / 1 | 4 |  | 100.00% | 10 / 10 | |||
| _parsePoint($xmlTrackPoints, $track) |  | 100.00% | 1 / 1 | 8 |  | 100.00% | 22 / 22 | |||
| <?php | |
| /** | |
| * | |
| */ | |
| namespace aae\geo\parsers { | |
| /** | |
| * @author Axel Ancona Esselmann | |
| * @package aae\geo\parsers | |
| */ | |
| class GPXParser { | |
| public static function parseFile($dir) { | |
| $contents = file_get_contents($dir); | |
| $track = self::parseString($contents); | |
| return $track; | |
| } | |
| /** | |
| * Takes a string that contains valid GPX and returns a Geo object. | |
| * @param string GPX string | |
| */ | |
| public static function parseString($inputString) { | |
| $xml = simplexml_load_string($inputString); | |
| if ($xml === false) { | |
| throw new \Exception("Error parsing XML", 404141238); | |
| } | |
| $elements = $xml->children(); | |
| foreach ($elements as $element) { | |
| if ($element->getName() == "trk") { | |
| $xmlTrack = $element->children(); | |
| $track = new \aae\math\geospatial\Sequence(); | |
| $track->name = $xmlTrack->name->__toString(); | |
| self::_parseTrkseg($xmlTrack, $track); | |
| } | |
| } | |
| #return $track; | |
| $tree = new \aae\adt\Tree("composite"); | |
| $tree->append($track); | |
| return $tree; | |
| } | |
| protected static function _parseTrkseg($xmlTrack, $track) { | |
| foreach ($xmlTrack as $key => $xmlTrackSegment) { | |
| if ($key == "trkseg") { | |
| if (count($track) > 0) { | |
| $track->segmentStarts[] = count($track); | |
| } | |
| $xmlTrackPoints = $xmlTrackSegment->trkpt; | |
| self::_parsePoint($xmlTrackPoints, $track); | |
| } | |
| } | |
| } | |
| protected static function _parsePoint($xmlTrackPoints, $track) { | |
| foreach ($xmlTrackPoints as $xmlTrackPoint) { | |
| $attributes = $xmlTrackPoint->attributes; | |
| $point = new \aae\math\geospatial\Point(); | |
| foreach ($xmlTrackPoint->children() as $key => $value) { | |
| if ($key == "ele") { | |
| $point->ele = floatval($value); | |
| } | |
| if ($key == "time") { | |
| $point->time = $value; | |
| } | |
| } | |
| foreach ($xmlTrackPoint->attributes() as $key => $value) { | |
| if ($key == "lat") { | |
| $point->lat = floatval($value); | |
| } | |
| if ($key == "lon") { | |
| $point->lon = floatval($value); | |
| } | |
| } | |
| $track[] = $point; | |
| } | |
| } | |
| } | |
| } |