QGIS API Documentation 4.1.0-Master (3b8ef1f72a3)
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"
21#include "qgshttpheaders.h"
22#include "qgsrectangle.h"
23
24#include <QPointer>
25#include <QString>
26#include <QVariantMap>
27
28#define SIP_NO_FILE
29
30class QgsFeedback;
31class QNetworkReply;
33
40class CORE_EXPORT QgsArcGisRestQueryUtils
41{
42 public:
47 {
48 AllTypes,
49 Vector,
50 Raster,
51 Scene
52 };
53
57 static QVariantMap getServiceInfo(
58 const QString &baseurl,
59 const QString &authcfg,
60 QString &errorTitle,
61 QString &errorText,
62 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
63 const QString &urlPrefix = QString(),
64 bool forceRefresh = false
65 );
66
70 static QVariantMap getLayerInfo(
71 const QString &layerurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString()
72 );
73
77 static QVariantMap getObjectIds(
78 const QString &layerurl,
79 const QString &authcfg,
80 QString &errorTitle,
81 QString &errorText,
82 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
83 const QString &urlPrefix = QString(),
84 const QgsRectangle &bbox = QgsRectangle(),
85 const QString &whereClause = QString()
86 );
87
88
94 static QgsRectangle getExtent(
95 const QString &layerurl, const QString &whereClause, const QString &authcfg, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString()
96 );
97
119 static QVariantMap getObjects(
120 const QString &layerurl,
121 const QString &authcfg,
122 const QList<quint32> &objectIds,
123 const QString &crs,
124 bool fetchGeometry,
125 const QStringList &fetchAttributes,
126 bool fetchM,
127 bool fetchZ,
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
222
226 static void addLayerItems(
227 const std::function<void( const LayerItemDetails &details )> &visitor,
228 const QVariantMap &serviceData,
229 const QString &parentUrl,
230 const QString &parentSupportedFormats,
232 );
233
237 static QUrl parseUrl( const QUrl &url, bool *isTestEndpoint = nullptr );
238
239 private:
240 static void adjustBaseUrl( QString &baseUrl, const QString &name );
241
243};
244
246class CORE_EXPORT QgsArcGisAsyncQuery : public QObject
247{
248 Q_OBJECT
249 public:
250 QgsArcGisAsyncQuery( QObject *parent = nullptr );
251 ~QgsArcGisAsyncQuery() override;
252
253 void start( const QUrl &url, const QString &authCfg, QByteArray *result, bool allowCache = false, const QgsHttpHeaders &headers = QgsHttpHeaders(), const QString &urlPrefix = QString() );
254 signals:
255 void finished();
256 void failed( QString errorTitle, QString errorName );
257 private slots:
258 void handleReply();
259
260 private:
261 QPointer<QNetworkReply> mReply;
262 QByteArray *mResult = nullptr;
263};
264
265class CORE_EXPORT QgsArcGisAsyncParallelQuery : public QObject
266{
267 Q_OBJECT
268 public:
269 QgsArcGisAsyncParallelQuery( const QString &authcfg, const QgsHttpHeaders &requestHeaders, QObject *parent = nullptr );
270 void start( const QVector<QUrl> &urls, QVector<QByteArray> *results, bool allowCache = false );
271
272 signals:
273 void finished( QStringList errors );
274 private slots:
275 void handleReply();
276
277 private:
278 QVector<QByteArray> *mResults = nullptr;
279 int mPendingRequests = 0;
280 QStringList mErrors;
281 QString mAuthCfg;
282 QgsHttpHeaders mRequestHeaders;
283};
284
286
287#endif // QGSARCGISRESTQUERY_H
ArcGisRestServiceType
Available ArcGIS REST service types.
Definition qgis.h:4588
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
Definition qgis.h:379
@ Unknown
Unknown types.
Definition qgis.h:383
Utility functions for querying ArcGIS REST services.
static QUrl parseUrl(const QUrl &url, bool *isTestEndpoint=nullptr)
Parses and processes a url.
static void addLayerItems(const std::function< void(const LayerItemDetails &details)> &visitor, const QVariantMap &serviceData, const QString &parentUrl, const QString &parentSupportedFormats, const ServiceTypeFilter filter=ServiceTypeFilter::AllTypes)
Calls the specified visitor function on all layer items found within the given service data.
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.
Encapsulates details relating to a layer item.
ServiceTypeFilter serviceType
Service type.
bool isMapServerWithQueryCapability
true if layer is a map server with the query capability
QString format
Map server image format.
QgsCoordinateReferenceSystem crs
Coordinate reference system.
bool isMapServerSpecialAllLayersOption
true if layer is the special map server "all layers" layer
bool isParentLayer
true if layer item represents a parent layer
Qgis::GeometryType geometryType
Geometry type.