Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
52 / 52
GPX
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
6
100.00% covered (success)
100.00%
52 / 52
 __construct($trackInstance = null)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 __toString()
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
50 / 50
<?php
/**
 *
 */
namespace aae\geo\formats {
    /**
     * @author Axel Ancona Esselmann
     * @package aae\geo\formats
     */
    class GPX {
        protected $track;
        public $timeZone = 'UTC';
        public function __construct($trackInstance = null) {
            $this->track = $trackInstance;
        }
        
    
        /**
         * __functionDescription__
         */
        public function __toString() {
            $latFormat = "%01.9f";
            $lonFormat = "%01.9f";
            $eleFormat = "%01.1f";
            $timeFormat = "Y-m-d\TH:i:s\Z";
            $dom = new \DOMDocument(1.0, "UTF-8");
            $gpx = $dom->createElement("gpx");
            $gpx->setAttribute("version", "1.1");
            $gpx->setAttribute("creator", "Axel Ancona Esselmann - http://www.anconaesselmann.com");
            $gpx->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            $gpx->setAttribute("xmlns", "http://www.topografix.com/GPX/1/1");
            $gpx->setAttribute("xsi:schemaLocation", "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd");
            $gpx->setAttribute("xmlns:gpxtpx", "http://www.garmin.com/xmlschemas/TrackPointExtension/v1");
            $dom->appendChild($gpx);
            $gpxTrack = $dom->createElement("trk");
            $gpx->appendChild($gpxTrack);
            $trackName = $dom->createElement("name", $this->track->name);
            $gpxTrack->appendChild($trackName);
            if (count($this->track) > 0) {
                $time = new \DateTime();
                date_default_timezone_set($this->timeZone);
                $time->setTimezone(new \DateTimeZone($this->timeZone));
                $time->setTimestamp($this->track[0]->time);
                $trackTime = $dom->createElement("time", $time->format($timeFormat));
                $gpxTrack->appendChild($trackTime);
                $trackSegment = $dom->createElement("trkseg");
                $currentSegmentNumber = 1;
                foreach ($this->track as $key=>$trackPoint) {
                    if (count($this->track->segmentStarts) > 1) {
                        if ($key === $this->track->segmentStarts[$currentSegmentNumber]) {
                            $gpxTrack->appendChild($trackSegment);
                            $trackSegment = $dom->createElement("trkseg");
                            $currentSegmentNumber++;
                        }
                    }
                    $gpxPoint = $dom->createElement("trkpt");
                    $gpxPoint->setAttribute("lat", sprintf($latFormat, $trackPoint->lat));
                    $gpxPoint->setAttribute("lon", sprintf($lonFormat, $trackPoint->lon));
                    $gpxPointElevation = $dom->createElement('ele', sprintf($eleFormat, $trackPoint->ele));
                    $gpxPoint->appendChild($gpxPointElevation);
                    $pointTime = new \DateTime();
                    $pointTime->setTimestamp($trackPoint->time);
                    $gpxPointTime = $dom->createElement('time', $pointTime->format($timeFormat));
                    $gpxPoint->appendChild($gpxPointTime);
                    $trackSegment->appendChild($gpxPoint);
                }
                $gpxTrack->appendChild($trackSegment);
            }
            $dom->formatOutput = TRUE;
            $formatted = $dom->saveXML();
            return $formatted;
        }
    }
}