File indexing completed on 2024-12-08 10:16:04
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "overpassquery.h" 0008 #include "io.h" 0009 0010 #include <QNetworkReply> 0011 0012 using namespace OSM; 0013 0014 OverpassQuery::OverpassQuery(QObject* parent) 0015 : QObject(parent) 0016 { 0017 } 0018 0019 OverpassQuery::~OverpassQuery() = default; 0020 0021 QString OverpassQuery::query() const 0022 { 0023 return m_query; 0024 } 0025 0026 QString OverpassQuery::query(const QRectF &bbox) const 0027 { 0028 const QString bboxStr = QString::number(bbox.y()) + QLatin1Char(',') + QString::number(bbox.x()) + QLatin1Char(',') + QString::number(bbox.y() + bbox.height()) + QLatin1Char(',') + QString::number(bbox.x() + bbox.width()); 0029 auto q = m_query; 0030 return q.replace(QLatin1String("{{bbox}}"), bboxStr); 0031 } 0032 0033 void OverpassQuery::setQuery(const QString &query) 0034 { 0035 m_query = query; 0036 } 0037 0038 QRectF OverpassQuery::boundingBox() const 0039 { 0040 return m_bbox; 0041 } 0042 0043 void OverpassQuery::setBoundingBox(const QRectF &bbox) 0044 { 0045 m_bbox = bbox; 0046 } 0047 0048 QSizeF OverpassQuery::tileSize() const 0049 { 0050 return m_tileSize; 0051 } 0052 0053 void OverpassQuery::setTileSize(const QSizeF &tileSize) 0054 { 0055 m_tileSize = tileSize; 0056 } 0057 0058 QSizeF OverpassQuery::minimumTileSize() const 0059 { 0060 return m_minimumTileSize; 0061 } 0062 0063 void OverpassQuery::setMinimumTileSize(const QSizeF &minTileSize) 0064 { 0065 m_minimumTileSize = minTileSize; 0066 } 0067 0068 OverpassQuery::Error OverpassQuery::error() const 0069 { 0070 return m_error; 0071 } 0072 0073 const DataSet& OverpassQuery::result() const 0074 { 0075 return m_result; 0076 } 0077 0078 DataSet&& OverpassQuery::takeResult() 0079 { 0080 return std::move(m_result); 0081 } 0082 0083 OverpassQuery::Error OverpassQuery::processReply(QNetworkReply *reply) 0084 { 0085 auto reader = OSM::IO::readerForMimeType(u"application/vnd.openstreetmap.data+xml", &m_result); 0086 if (!reader) { 0087 qWarning() << "No support for reading OSM XML available!"; 0088 return QueryError; 0089 } 0090 reader->read(reply); 0091 if (!reader->errorString().isEmpty()) { 0092 qWarning() << "Query error:" << reader->errorString(); 0093 qWarning() << "Request:" << reply->request().url(); 0094 return reader->errorString().contains(QLatin1String("timed out"), Qt::CaseInsensitive) ? QueryTimeout : QueryError; 0095 } 0096 qDebug() << "Nodes:" << m_result.nodes.size(); 0097 qDebug() << "Ways:" << m_result.ways.size(); 0098 qDebug() << "Relations:" << m_result.relations.size(); 0099 return NoError; 0100 }