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