KOSMIndoorMap

marble-geometry-assembler.cpp
1/*
2 SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#include <../src/map/loader/marblegeometryassembler_p.h>
7
8#include <osm/datasetmergebuffer.h>
9#include <osm/datatypes.h>
10#include <osm/io.h>
11
12#include <QCommandLineParser>
13#include <QCoreApplication>
14#include <QDebug>
15#include <QFile>
16#include <QtPlugin>
17
18Q_IMPORT_PLUGIN(OSM_XmlIOPlugin)
19#if HAVE_OSM_PBF_SUPPORT
20Q_IMPORT_PLUGIN(OSM_PbfIOPlugin)
21#endif
22
23int main(int argc, char **argv)
24{
25 QCoreApplication app(argc, argv);
26 QCommandLineParser parser;
27 parser.addHelpOption();
28 QCommandLineOption outOpt({QStringLiteral("o"), QStringLiteral("output")}, QStringLiteral("output file"), QStringLiteral("file"));
29 parser.addOption(outOpt);
30 parser.process(app);
31
32 const auto fileNames = parser.positionalArguments();
33 if (fileNames.isEmpty()) {
34 parser.showHelp(1);
35 }
36
37 OSM::DataSet dataSet;
38 OSM::DataSetMergeBuffer mergeBuffer;
39 KOSMIndoorMap::MarbleGeometryAssembler marbleMerger;
40 marbleMerger.setDataSet(&dataSet);
41 auto reader = OSM::IO::readerForMimeType(u"application/vnd.openstreetmap.data+o5m", &dataSet);
42 reader->setMergeBuffer(&mergeBuffer);
43
44 for (const auto &fileName : fileNames) {
45 QFile f(fileName);
46 if (!f.open(QFile::ReadOnly)) {
47 qCritical() << f.fileName() << f.errorString();
48 return 1;
49 }
50 const auto data = f.map(0, f.size());
51 reader->read(data, f.size());
52 marbleMerger.merge(&mergeBuffer);
53 }
54
55 marbleMerger.finalize();
56
57 QFile outputFile;
58 std::unique_ptr<OSM::AbstractWriter> writer;
59 if (parser.isSet(outOpt)) {
60 outputFile.setFileName(parser.value(outOpt));
61 outputFile.open(QFile::WriteOnly);
62 writer = OSM::IO::writerForFileName(outputFile.fileName());
63 } else {
64 outputFile.open(stdout, QFile::WriteOnly);
65 writer = OSM::IO::writerForMimeType(u"application/vnd.openstreetmap.data+xml");
66 }
67 if (!outputFile.isOpen()) {
68 qCritical() << outputFile.errorString();
69 return 1;
70 }
71
72 if (!writer) {
73 qCritical() << "no file writer for requested format:" << outputFile.fileName();
74 return 1;
75 }
76 writer->write(dataSet, &outputFile);
77 return 0;
78}
Holds OSM elements produced by a parser prior to merging into OSM::DataSet.
A set of nodes, ways and relations.
Definition datatypes.h:340
KOSM_EXPORT std::unique_ptr< AbstractReader > readerForMimeType(QStringView mimeType, OSM::DataSet *dataSet)
Returns a suitable reader for the given MIME type.
Definition io.cpp:49
KOSM_EXPORT std::unique_ptr< AbstractWriter > writerForMimeType(QStringView mimeType)
Returns a suitable writer for the given MIME type.
Definition io.cpp:67
KOSM_EXPORT std::unique_ptr< AbstractWriter > writerForFileName(QStringView fileName)
Returns a suitable writer for the given file name.
Definition io.cpp:58
KEDUVOCDOCUMENT_EXPORT QStringList fileNames(const QString &language=QString())
QCommandLineOption addHelpOption()
bool addOption(const QCommandLineOption &option)
bool isSet(const QCommandLineOption &option) const const
QStringList positionalArguments() const const
void process(const QCoreApplication &app)
void showHelp(int exitCode)
QString value(const QCommandLineOption &option) const const
virtual QString fileName() const const override
bool open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
void setFileName(const QString &name)
QString errorString() const const
bool isOpen() const const
bool isEmpty() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:20:03 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.