<trkpt lat="3.0" lon="3.0"/>
</trkseg>
</trk>
+ <custom:checkedBy>Jane Doe</custom:checkedBy>
</gpx>
<trkpt lat="3.0" lon="3.0"/>\r
</trkseg>\r
</trk>\r
+ <extensions>\r
+ <custom:checkedBy>Jane Doe</custom:checkedBy>\r
+ </extensions>\r
</gpx>\r
*/
protected $tracks;
+ /**
+ * A list of XML snippets describing unsupported elements.
+ *
+ * @var TypedDoublyLinkedList (string)
+ */
+ protected $extensions;
+
/**
* Fetch the name of the program that created the GPX file.
*
return $this->tracks;
}
+ /**
+ * Fetch a list of protocol extensions as raw XML.
+ *
+ * @param boolean $create Create the list if it does not already exist.
+ * @return TypedDoublyLinkedList A list of protocol extensions.
+ */
+ public function getExtensions(bool $create = true)
+ {
+ if ($create && $this->extensions === null)
+ $this->extensions = new TypedDoublyLinkedList('string');
+ return $this->extensions;
+ }
+
/**
* Fetch a bounding box that covers the feature.
*
$struct['elements']['metadata'] = function ($gpx) {
$this->readMetadata($gpx);
};
+ $struct['elements']['extensions'] = function ($gpx) {
+ $this->readExtension($gpx->getExtensions());
+ };
} else {
$struct['elements']['name'] = function ($gpx) {
$gpx->setName($this->readXSDString());
$keywords[] = trim($word);
};
$struct['elements']['bounds'] = false;
+ $struct['extensions'] = function ($gpx) {
+ $gpx->getExtensions()[] = $this->xml->readOuterXML();
+ $this->xml->next();
+ };
}
$this->readStruct($struct, $result);
$this->writeTrack($track, $xml);
}
}
+ $extensions = $gpx->getExtensions(false);
+ if ($extensions !== null && !$extensions->isEmpty()) {
+ if ($this->format == '1.1')
+ $xml->startElement('extensions');
+ foreach ($extensions as $extension) {
+ $xml->writeRaw($extension);
+ }
+ if ($this->format == '1.1')
+ $xml->endElement();
+ }
$xml->endElement();
$xml->endDocument();
$xml->flush();