QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
qgsarcgisrestquery.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsarcgisrestquery.h
3 --------------------
4 begin : December 2020
5 copyright : (C) 2020 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#ifndef QGSARCGISRESTQUERY_H
16#define QGSARCGISRESTQUERY_H
17
18
19#include "qgis_core.h"
20#include "qgshttpheaders.h"
21#include "qgsrectangle.h"
22
23#include <QString>
24#include <QVariantMap>
25
26#define SIP_NO_FILE
27
28class QgsFeedback;
29class QNetworkReply;
31
38class CORE_EXPORT QgsArcGisRestQueryUtils
39{
40 public:
45 {
46 AllTypes,
47 Vector,
48 Raster,
49 Scene
50 };
51
55 static QVariantMap getServiceInfo(
56 const QString &baseurl,
57 const QString &authcfg,
58 QString &errorTitle,
59 QString &errorText,
60 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
61 const QString &urlPrefix = QString(),
62 bool forceRefresh = false
63 );
64
68 static QVariantMap getLayerInfo(
69 const QString &layerurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString()
70 );
71
75 static QVariantMap getObjectIds(
76 const QString &layerurl,
77 const QString &authcfg,
78 QString &errorTitle,
79 QString &errorText,
80 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
81 const QString &urlPrefix = QString(),
82 const QgsRectangle &bbox = QgsRectangle(),
83 const QString &whereClause = QString()
84 );
85
86
92 static QgsRectangle getExtent(
93 const QString &layerurl, const QString &whereClause, const QString &authcfg, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString()
94 );
95
118 static QVariantMap getObjects(
119 const QString &layerurl,
120 const QString &authcfg,
121 const QList<quint32> &objectIds,
122 const QString &crs,
123 bool fetchGeometry,
124 const QStringList &fetchAttributes,
125 bool fetchM,
126 bool fetchZ,
127 const QgsRectangle &filterRect,
128 QString &errorTitle,
129 QString &errorText,
130 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
131 QgsFeedback *feedback = nullptr,
132 const QString &urlPrefix = QString()
133 );
134
138 static QList<quint32> getObjectIdsByExtent(
139 const QString &layerurl,
140 const QgsRectangle &filterRect,
141 QString &errorTitle,
142 QString &errorText,
143 const QString &authcfg,
144 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
145 QgsFeedback *feedback = nullptr,
146 const QString &whereClause = QString(),
147 const QString &urlPrefix = QString()
148 );
149
153 static QByteArray queryService(
154 const QUrl &url,
155 const QString &authcfg,
156 QString &errorTitle,
157 QString &errorText,
158 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
159 QgsFeedback *feedback = nullptr,
160 QString *contentType = nullptr,
161 const QString &urlPrefix = QString(),
162 bool forceRefresh = false
163 );
167 static QVariantMap queryServiceJSON(
168 const QUrl &url,
169 const QString &authcfg,
170 QString &errorTitle,
171 QString &errorText,
172 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
173 QgsFeedback *feedback = nullptr,
174 const QString &urlPrefix = QString(),
175 bool forceRefresh = false
176 );
177
181 static void visitFolderItems( const std::function<void( const QString &folderName, const QString &url )> &visitor, const QVariantMap &serviceData, const QString &baseUrl );
182
186 static void visitServiceItems(
187 const std::function<void( const QString &serviceName, const QString &url, Qgis::ArcGisRestServiceType serviceType )> &visitor, const QVariantMap &serviceData, const QString &baseUrl
188 );
189
193 static void addLayerItems(
194 const std::function<void(
195 const QString &parentLayerId,
196 ServiceTypeFilter serviceType,
197 Qgis::GeometryType geometryType,
198 const QString &layerId,
199 const QString &name,
200 const QString &description,
201 const QString &url,
202 bool isParentLayer,
204 const QString &format
205 )> &visitor,
206 const QVariantMap &serviceData,
207 const QString &parentUrl,
208 const QString &parentSupportedFormats,
209 const ServiceTypeFilter filter = ServiceTypeFilter::AllTypes
210 );
211
215 static QUrl parseUrl( const QUrl &url, bool *isTestEndpoint = nullptr );
216
217 private:
218 static void adjustBaseUrl( QString &baseUrl, const QString &name );
219
221};
222
224class CORE_EXPORT QgsArcGisAsyncQuery : public QObject
225{
226 Q_OBJECT
227 public:
228 QgsArcGisAsyncQuery( QObject *parent = nullptr );
229 ~QgsArcGisAsyncQuery() override;
230
231 void start( const QUrl &url, const QString &authCfg, QByteArray *result, bool allowCache = false, const QgsHttpHeaders &headers = QgsHttpHeaders(), const QString &urlPrefix = QString() );
232 signals:
233 void finished();
234 void failed( QString errorTitle, QString errorName );
235 private slots:
236 void handleReply();
237
238 private:
239 QNetworkReply *mReply = nullptr;
240 QByteArray *mResult = nullptr;
241};
242
243class CORE_EXPORT QgsArcGisAsyncParallelQuery : public QObject
244{
245 Q_OBJECT
246 public:
247 QgsArcGisAsyncParallelQuery( const QString &authcfg, const QgsHttpHeaders &requestHeaders, QObject *parent = nullptr );
248 void start( const QVector<QUrl> &urls, QVector<QByteArray> *results, bool allowCache = false );
249
250 signals:
251 void finished( QStringList errors );
252 private slots:
253 void handleReply();
254
255 private:
256 QVector<QByteArray> *mResults = nullptr;
257 int mPendingRequests = 0;
258 QStringList mErrors;
259 QString mAuthCfg;
260 QgsHttpHeaders mRequestHeaders;
261};
262
264
265#endif // QGSARCGISRESTQUERY_H
ArcGisRestServiceType
Available ArcGIS REST service types.
Definition qgis.h:4515
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
Definition qgis.h:379
Utility functions for querying ArcGIS REST services.
Represents a coordinate reference system (CRS).
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Implements simple HTTP header management.
A rectangle specified with double values.