File indexing completed on 2024-04-14 03:48:50

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