File indexing completed on 2024-05-12 04:42:19
0001 /* 0002 SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include <../src/map/loader/marblegeometryassembler_p.h> 0007 0008 #include <osm/datasetmergebuffer.h> 0009 #include <osm/datatypes.h> 0010 #include <osm/io.h> 0011 0012 #include <QCommandLineParser> 0013 #include <QCoreApplication> 0014 #include <QDebug> 0015 #include <QFile> 0016 #include <QtPlugin> 0017 0018 Q_IMPORT_PLUGIN(OSM_XmlIOPlugin) 0019 #if HAVE_OSM_PBF_SUPPORT 0020 Q_IMPORT_PLUGIN(OSM_PbfIOPlugin) 0021 #endif 0022 0023 int main(int argc, char **argv) 0024 { 0025 QCoreApplication app(argc, argv); 0026 QCommandLineParser parser; 0027 parser.addHelpOption(); 0028 QCommandLineOption outOpt({QStringLiteral("o"), QStringLiteral("output")}, QStringLiteral("output file"), QStringLiteral("file")); 0029 parser.addOption(outOpt); 0030 parser.process(app); 0031 0032 const auto fileNames = parser.positionalArguments(); 0033 if (fileNames.isEmpty()) { 0034 parser.showHelp(1); 0035 } 0036 0037 OSM::DataSet dataSet; 0038 OSM::DataSetMergeBuffer mergeBuffer; 0039 KOSMIndoorMap::MarbleGeometryAssembler marbleMerger; 0040 marbleMerger.setDataSet(&dataSet); 0041 auto reader = OSM::IO::readerForMimeType(u"application/vnd.openstreetmap.data+o5m", &dataSet); 0042 reader->setMergeBuffer(&mergeBuffer); 0043 0044 for (const auto &fileName : fileNames) { 0045 QFile f(fileName); 0046 if (!f.open(QFile::ReadOnly)) { 0047 qCritical() << f.fileName() << f.errorString(); 0048 return 1; 0049 } 0050 const auto data = f.map(0, f.size()); 0051 reader->read(data, f.size()); 0052 marbleMerger.merge(&mergeBuffer); 0053 } 0054 0055 marbleMerger.finalize(); 0056 0057 QFile outputFile; 0058 std::unique_ptr<OSM::AbstractWriter> writer; 0059 if (parser.isSet(outOpt)) { 0060 outputFile.setFileName(parser.value(outOpt)); 0061 outputFile.open(QFile::WriteOnly); 0062 writer = OSM::IO::writerForFileName(outputFile.fileName()); 0063 } else { 0064 outputFile.open(stdout, QFile::WriteOnly); 0065 writer = OSM::IO::writerForMimeType(u"application/vnd.openstreetmap.data+xml"); 0066 } 0067 if (!outputFile.isOpen()) { 0068 qCritical() << outputFile.errorString(); 0069 return 1; 0070 } 0071 0072 if (!writer) { 0073 qCritical() << "no file writer for requested format:" << outputFile.fileName(); 0074 return 1; 0075 } 0076 writer->write(dataSet, &outputFile); 0077 return 0; 0078 }