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; | |
} | |
} | |
} | |
} |