$xml = new XMLWriter();
$xml->openURI('php://output');
$this->write($gpx, $xml);
+ $xml->flush();
}
/**
public function save(GPX $gpx, string $filename)
{
$xml = new XMLWriter();
- if (!$xml->openURI('php://output'))
+ if (!$xml->openURI($filename))
throw RuntimeException(sprintf('Unable to write to "%s"', $filename));
$this->write($gpx, $xml);
+ $xml->flush();
}
/**
}
$xml->endElement();
$xml->endDocument();
- $xml->flush();
}
/**
}
/**
- * Write out the common attributes for all data types.
+ * Generate XML for GPX wpt type.
*
- * @param DataType $type The data type to write.
- * @param XMLWriter $xml Where to write.
+ * @param Point $point The point to write.
+ * @param string $element The XML element name (e.g. <wpt>)
+ * @param XMLWriter $xml Where to write the point.
* @return void
*/
- protected function writeDataType(DataType $type, XMLWriter $xml)
+ protected function writePoint(Point $point, string $element, XMLWriter $xml)
{
- $var = $type->getName();
+ $xml->startElement($element);
+ $xml->writeAttribute('lat', $point->getLatitude());
+ $xml->writeAttribute('lon', $point->getLongitude());
+ $var = $point->getEle();
+ if ($var !== null)
+ $xml->writeElement('ele', $var);
+ $var = $point->getTime();
+ if ($var !== null)
+ $xml->writeElement('time', $this->createTimestamp($var));
+ $var = $point->getMagvar();
+ if ($var !== null)
+ $xml->writeElement('magvar', $var);
+ $var = $point->getGeoidHeight();
+ if ($var !== null)
+ $xml->writeElement('geoidheight', $var);
+ $var = $point->getName();
if ($var !== null)
$xml->writeElement('name', $var);
- $var = $type->getComment();
+ $var = $point->getComment();
if ($var !== null)
$xml->writeElement('cmt', $var);
- $var = $type->getDescription();
+ $var = $point->getDescription();
if ($var !== null)
$xml->writeElement('desc', $var);
- $var = $type->getSource();
+ $var = $point->getSource();
if ($var !== null)
$xml->writeElement('src', $var);
- $var = $type->getLinks(false);
+ $var = $point->getLinks(false);
if ($var !== null) {
foreach($var as $link) {
$this->writeLink($link, $xml);
break;
}
}
- if ($this->format == '1.1' || $type instanceof Point) {
- $var = $type->getType();
- if ($var !== null)
- $xml->writeElement('type', $var);
- }
- $var = $type->getExtensions(false);
- if ($var !== null && !$var->isEmpty()) {
- if ($this->format == '1.1')
- $xml->startElement('extensions');
- foreach ($var as $extension) {
- $xml->writeRaw($extension);
- }
- if ($this->format == '1.1')
- $xml->endElement();
- }
- }
-
- /**
- * Generate XML for GPX wpt type.
- *
- * @param Point $point The point to write.
- * @param string $element The XML element name (e.g. <wpt>)
- * @param XMLWriter $xml Where to write the point.
- * @return void
- */
- protected function writePoint(Point $point, string $element, XMLWriter $xml)
- {
- $xml->startElement($element);
- $xml->writeAttribute('lat', $point->getLatitude());
- $xml->writeAttribute('lon', $point->getLongitude());
- $val = $point->getEle();
- if ($val !== null)
- $xml->writeElement('ele', $val);
- $val = $point->getTime();
- if ($val !== null)
- $xml->writeElement('time', $this->createTimestamp($val));
- $val = $point->getMagvar();
- if ($val !== null)
- $xml->writeElement('magvar', $val);
- $val = $point->getGeoidHeight();
- if ($val !== null)
- $xml->writeElement('geoidheight', $val);
$var = $point->getSymbol();
if ($var !== null)
$xml->writeElement('sym', $var);
+ $var = $point->getType();
+ if ($var !== null)
+ $xml->writeElement('type', $var);
$var = $point->getFix();
if ($var !== null)
$xml->writeElement('fix', $var);
$var = $point->getDGPSId();
if ($var !== null)
$xml->writeElement('dgpsid', $var);
- $this->writeDataType($point, $xml);
+ $var = $point->getExtensions(false);
+ if ($var !== null && !$var->isEmpty()) {
+ if ($this->format == '1.1')
+ $xml->startElement('extensions');
+ foreach ($var as $extension) {
+ $xml->writeRaw($extension);
+ }
+ if ($this->format == '1.1')
+ $xml->endElement();
+ }
$xml->endElement();
}
protected function writeRoute(Route $route, XMLWriter $xml)
{
$xml->startElement('rte');
+ $var = $route->getName();
+ if ($var !== null)
+ $xml->writeElement('name', $var);
+ $var = $route->getComment();
+ if ($var !== null)
+ $xml->writeElement('cmt', $var);
+ $var = $route->getDescription();
+ if ($var !== null)
+ $xml->writeElement('desc', $var);
+ $var = $route->getSource();
+ if ($var !== null)
+ $xml->writeElement('src', $var);
+ $var = $route->getLinks(false);
+ if ($var !== null) {
+ foreach($var as $link) {
+ $this->writeLink($link, $xml);
+ if ($this->format == '1.0')
+ break;
+ }
+ }
$var = $route->getNumber();
if ($var !== null)
$xml->writeElement('number', $var);
- $this->writeDataType($route, $xml);
+ if ($this->format == '1.1') {
+ $var = $route->getType();
+ if ($var !== null)
+ $xml->writeElement('type', $var);
+ }
+ $var = $route->getExtensions(false);
+ if ($var !== null && !$var->isEmpty()) {
+ if ($this->format == '1.1')
+ $xml->startElement('extensions');
+ foreach ($var as $extension) {
+ $xml->writeRaw($extension);
+ }
+ if ($this->format == '1.1')
+ $xml->endElement();
+ }
$var = $route->getPoints(false);
if ($var !== null) {
foreach ($var as $point) {
protected function writeTrack(Track $track, XMLWriter $xml)
{
$xml->startElement('trk');
+ $var = $track->getName();
+ if ($var !== null)
+ $xml->writeElement('name', $var);
+ $var = $track->getComment();
+ if ($var !== null)
+ $xml->writeElement('cmt', $var);
+ $var = $track->getDescription();
+ if ($var !== null)
+ $xml->writeElement('desc', $var);
+ $var = $track->getSource();
+ if ($var !== null)
+ $xml->writeElement('src', $var);
+ $var = $track->getLinks(false);
+ if ($var !== null) {
+ foreach($var as $link) {
+ $this->writeLink($link, $xml);
+ if ($this->format == '1.0')
+ break;
+ }
+ }
$var = $track->getNumber();
if ($var !== null)
$xml->writeElement('number', $var);
- $this->writeDataType($track, $xml);
+ if ($this->format == '1.1') {
+ $var = $track->getType();
+ if ($var !== null)
+ $xml->writeElement('type', $var);
+ }
+ $var = $track->getExtensions(false);
+ if ($var !== null && !$var->isEmpty()) {
+ if ($this->format == '1.1')
+ $xml->startElement('extensions');
+ foreach ($var as $extension) {
+ $xml->writeRaw($extension);
+ }
+ if ($this->format == '1.1')
+ $xml->endElement();
+ }
$var = $track->getSegments(false);
if ($var !== null) {
foreach ($var as $segment) {
}
if ($this->format == '1.1') {
$var = $segment->getExtensions(false);
- if ($var !== null) {
+ if ($var !== null && !$var->isEmpty()) {
$xml->startElement('extensions');
foreach ($var as $extension) {
$xml->writeRaw($extension);