File indexing completed on 2024-05-19 03:53:14

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2016 Dennis Nienhüser <nienhueser@kde.org>
0004 //
0005 
0006 #ifndef MARBLE_O5MWRITER_H
0007 #define MARBLE_O5MWRITER_H
0008 
0009 #include "OsmConverter.h"
0010 #include "GeoWriterBackend.h"
0011 
0012 #include <QSet>
0013 
0014 namespace Marble
0015 {
0016 
0017 class GeoDataLineString;
0018 class GeoDataRelation;
0019 class OsmPlacemarkData;
0020 
0021 class O5mWriter: public GeoWriterBackend
0022 {
0023 public:
0024   bool write(QIODevice *device, const GeoDataDocument &document) override;
0025 
0026 private:
0027   typedef QPair<QString, QString> StringPair;
0028   typedef QHash<StringPair, qint32> StringTable;
0029 
0030   void writeHeader(QDataStream& stream) const;
0031   void writeNodes(const OsmConverter::Nodes &nodes, QDataStream& stream) const;
0032   void writeWays(const OsmConverter::Ways &ways, QDataStream& stream) const;
0033   void writeRelations(const OsmConverter::Relations &relations, QDataStream& stream) const;
0034   void writeTrailer(QDataStream& stream) const;
0035 
0036   void writeMultipolygonMembers(const GeoDataPolygon &polygon, qint64 (&lastId)[3], const OsmPlacemarkData &osmData, StringTable &stringTable, QDataStream &stream) const;
0037   void writeRelationMembers(const GeoDataRelation *relation, qint64 (&lastId)[3], const OsmPlacemarkData &osmData, StringTable &stringTable, QDataStream &stream) const;
0038   void writeReferences(const GeoDataLineString &lineString, qint64 &lastId, const OsmPlacemarkData &osmData, QDataStream &stream) const;
0039   void writeVersion(const OsmPlacemarkData &osmData, QDataStream &stream) const;
0040   void writeTags(const OsmPlacemarkData &osmData, StringTable &stringTable, QDataStream &stream) const;
0041   void writeStringPair(const StringPair &pair, StringTable &stringTable, QDataStream &stream) const;
0042   void writeSigned(qint64 value, QDataStream &stream) const;
0043   void writeUnsigned(quint32 value, QDataStream &stream) const;
0044   qint32 deltaTo(double value, double previous) const;
0045 
0046   static QSet<QString> m_blacklistedTags;
0047 
0048   mutable QByteArray m_stringPairBuffer;
0049 };
0050 
0051 }
0052 
0053 #endif