File indexing completed on 2025-04-27 13:02:22
0001 // SPDX-License-Identifier: GPL-3.0-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2011 Dennis Nienhüser <nienhueser@kde.org> 0004 // 0005 // This file originates from the MoNav project where it was named pbfreader.h and 0006 // SPDX-FileCopyrightText: 2010 Christian Vetter veaac.fdirct @gmail.com 0007 // 0008 0009 #ifndef PBFPARSER_H 0010 #define PBFPARSER_H 0011 0012 #include "fileformat.pb.h" 0013 #include "osmformat.pb.h" 0014 #include "../OsmParser.h" 0015 0016 #include <QString> 0017 #include <QSet> 0018 #include <QFile> 0019 #include <QDataStream> 0020 0021 class PbfParser : public Marble::OsmParser 0022 { 0023 public: 0024 PbfParser(); 0025 0026 bool parse( const QFileInfo &file, int pass, bool &needAnotherPass ) override; 0027 0028 private: 0029 enum Mode { 0030 ModeNode, 0031 ModeWay, 0032 ModeRelation, 0033 ModeDense 0034 }; 0035 0036 bool parseBlobHeader(); 0037 0038 bool parseBlob(); 0039 0040 bool parseData(); 0041 0042 bool readNext(); 0043 0044 void loadBlock(); 0045 0046 void loadGroup(); 0047 0048 void parseNode(); 0049 0050 void parseWay(); 0051 0052 void parseRelation(); 0053 0054 void parseDense(); 0055 0056 QByteArray m_buffer; 0057 0058 QDataStream m_stream; 0059 0060 OSMPBF::BlobHeader m_blobHeader; 0061 0062 OSMPBF::Blob m_blob; 0063 0064 OSMPBF::HeaderBlock m_headerBlock; 0065 0066 OSMPBF::PrimitiveBlock m_primitiveBlock; 0067 0068 Mode m_mode; 0069 0070 int m_currentGroup; 0071 0072 int m_currentEntity; 0073 0074 bool m_loadBlock; 0075 0076 long long m_lastDenseID; 0077 long long m_lastDenseLatitude; 0078 long long m_lastDenseLongitude; 0079 int m_lastDenseTag; 0080 int m_pass; 0081 0082 QSet<int> m_referencedWays; 0083 QSet<int> m_referencedNodes; 0084 }; 0085 0086 #endif // PBFPARSER_H