File indexing completed on 2025-02-02 05:02:41

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "gpxwriter.h"
0008 
0009 #include <QDateTime>
0010 
0011 Gpx::Writer::Writer(QIODevice* device)
0012     : m_writer(device)
0013 {
0014     m_writer.setAutoFormatting(true);
0015     m_writer.writeStartDocument(QStringLiteral("1.0"));
0016     m_writer.writeStartElement(QStringLiteral("gpx"));
0017     m_writer.writeAttribute(QStringLiteral("xmlns"), QStringLiteral("http://www.topografix.com/GPX/1/1"));
0018     m_writer.writeNamespace(QStringLiteral("http://www.w3.org/2001/XMLSchema-instance"), QStringLiteral("xsi"));
0019     m_writer.writeAttribute(QStringLiteral("xsi:schemaLocation"), QStringLiteral("http://www.topografix.com/GPX/1/1"));
0020 }
0021 
0022 Gpx::Writer::~Writer()
0023 {
0024     m_writer.writeEndElement();
0025     m_writer.writeEndDocument();
0026 }
0027 
0028 void Gpx::Writer::writeStartMetadata()
0029 {
0030     m_writer.writeStartElement(QStringLiteral("metadata"));
0031 }
0032 
0033 void Gpx::Writer::writeEndMetadata()
0034 {
0035     m_writer.writeEndElement();
0036 }
0037 
0038 void Gpx::Writer::writeStartRoute()
0039 {
0040     m_writer.writeStartElement(QStringLiteral("rte"));
0041 }
0042 
0043 void Gpx::Writer::writeEndRoute()
0044 {
0045     m_writer.writeEndElement();
0046 }
0047 
0048 void Gpx::Writer::writeStartWaypoint(float latitude, float longitude)
0049 {
0050     m_writer.writeStartElement(QStringLiteral("wpt"));
0051     m_writer.writeAttribute(QStringLiteral("lat"), QString::number(latitude));
0052     m_writer.writeAttribute(QStringLiteral("lon"), QString::number(longitude));
0053 }
0054 
0055 void Gpx::Writer::writeEndWaypoint()
0056 {
0057     m_writer.writeEndElement();
0058 }
0059 
0060 void Gpx::Writer::writeStartRoutePoint(float latitude, float longitude)
0061 {
0062     m_writer.writeStartElement(QStringLiteral("rtept"));
0063     m_writer.writeAttribute(QStringLiteral("lat"), QString::number(latitude));
0064     m_writer.writeAttribute(QStringLiteral("lon"), QString::number(longitude));
0065 }
0066 
0067 void Gpx::Writer::writeEndRoutePoint()
0068 {
0069     m_writer.writeEndElement();
0070 }
0071 
0072 void Gpx::Writer::writeName(const QString& name)
0073 {
0074     m_writer.writeTextElement(QStringLiteral("name"), name);
0075 }
0076 
0077 void Gpx::Writer::writeLink(const QString &href, const QString &text)
0078 {
0079     m_writer.writeStartElement(QStringLiteral("link"));
0080     m_writer.writeAttribute(QStringLiteral("href"), href);
0081     if (!text.isEmpty()) {
0082         m_writer.writeTextElement(QStringLiteral("text"), text);
0083     }
0084     m_writer.writeEndElement();
0085 }
0086 
0087 void Gpx::Writer::writeTime(const QDateTime &time)
0088 {
0089     if (time.isValid()) {
0090         m_writer.writeTextElement(QStringLiteral("time"), time.toString(Qt::ISODate));
0091     }
0092 }