KOSMIndoorMap

overpassquery.h
1/*
2 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#ifndef OSM_OVERPASSQUERY_H
8#define OSM_OVERPASSQUERY_H
9
10#include "kosm_export.h"
11
12#include "datatypes.h"
13
14#include <QObject>
15#include <QRectF>
16
17class QNetworkReply;
18
19namespace OSM {
20
21/** An Overpass QL query job, to be executed by OverpassQueryManager.
22 * @note Use this wrongly can cause excessive load on Overpass servers,
23 * so only use this when you know what you are doing!
24 */
25class KOSM_EXPORT OverpassQuery : public QObject
26{
28public:
29 explicit OverpassQuery(QObject *parent = nullptr);
30 ~OverpassQuery();
31
32 /** Returns the raw (without bbox replacement) query string. */
33 [[nodiscard]] QString query() const;
34 /** Returns the query with @p bbox applied. */
35 [[nodiscard]] QString query(const QRectF &bbox) const;
36 /** Overpass QL query string.
37 * Can contain the '{{bbox}}' bounding box placeholder also supported by Overpass Turbo.
38 */
39 void setQuery(const QString &query);
40
41 /** Bounding box for this query, values in degree. */
42 [[nodiscard]] QRectF boundingBox() const;
43 /** Set the bounding box for this query, values in degree. */
44 void setBoundingBox(const QRectF &bbox);
45
46 /** Tile size in which the bounding box is broken down for querying.
47 * Values in degree.
48 */
49 [[nodiscard]] QSizeF tileSize() const;
50 /** Sets the tile size in which the bounding box is broken down for querying.
51 * Values in degree.
52 */
53 void setTileSize(const QSizeF &tileSize);
54 /** Minimum tile size to which tiles can be broken down in case of query timeouts. */
55 [[nodiscard]] QSizeF minimumTileSize() const;
56 /** Sets the minimum tile size.
57 * Should be smaller than tile size by a power of 2.
58 */
59 void setMinimumTileSize(const QSizeF &minTileSize);
60
61 /** Error codes. */
62 enum Error {
63 NoError,
64 QueryError, ///< generic query error
65 QueryTimeout, ///< query exceeded its execution time budget
66 NetworkError,
67 };
68 /** Error code of this query job. */
69 [[nodiscard]] Error error() const;
70
71 /** Query result data set. */
72 [[nodiscard]] const DataSet& result() const;
73 [[nodiscard]] DataSet&& takeResult();
74
75Q_SIGNALS:
76 void finished();
77
78private:
79 friend class OverpassQueryManager;
80 friend class OverpassQueryManagerPrivate;
81
82 [[nodiscard]] Error processReply(QNetworkReply *reply);
83
84 QString m_query;
85 QRectF m_bbox = { -180.0, -90.0, 360.0, 180.0 };
86 QSizeF m_tileSize = { 360.0, 180.0 };
87 QSizeF m_minimumTileSize = { 1.0, 1.0 };
88 Error m_error = NoError;
89 OSM::DataSet m_result;
90};
91
92}
93
94#endif // OSM_OVERPASSQUERY_H
A set of nodes, ways and relations.
Definition datatypes.h:346
Executes OverpassQuery jobs.
@ QueryTimeout
query exceeded its execution time budget
@ QueryError
generic query error
QString query() const
Returns the raw (without bbox replacement) query string.
QSizeF minimumTileSize() const
Minimum tile size to which tiles can be broken down in case of query timeouts.
void setTileSize(const QSizeF &tileSize)
Sets the tile size in which the bounding box is broken down for querying.
QSizeF tileSize() const
Tile size in which the bounding box is broken down for querying.
QRectF boundingBox() const
Bounding box for this query, values in degree.
void setMinimumTileSize(const QSizeF &minTileSize)
Sets the minimum tile size.
void setQuery(const QString &query)
Overpass QL query string.
void setBoundingBox(const QRectF &bbox)
Set the bounding box for this query, values in degree.
Low-level types and functions to work with raw OSM data as efficiently as possible.
QObject(QObject *parent)
Q_OBJECTQ_OBJECT
QObject * parent() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Jan 24 2025 11:54:42 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.