QGIS API Documentation 4.1.0-Master (376402f9aeb)
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 Vector = 1 << 0,
49 Raster = 1 << 1,
50 Scene = 1 << 2,
51 };
53
60
64 static Qgis::ArcGisRestServiceType sniffServiceTypeFromJson( const QVariantMap &json );
65
69 static QVariantMap getServiceInfo(
70 const QString &baseurl,
71 const QString &authcfg,
72 QString &errorTitle,
73 QString &errorText,
74 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
75 const QString &urlPrefix = QString(),
76 bool forceRefresh = false
77 );
78
82 static QVariantMap getLayerInfo(
83 const QString &layerurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString()
84 );
85
89 static QVariantMap getObjectIds(
90 const QString &layerurl,
91 const QString &authcfg,
92 QString &errorTitle,
93 QString &errorText,
94 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
95 const QString &urlPrefix = QString(),
96 const QgsRectangle &bbox = QgsRectangle(),
97 const QString &whereClause = QString()
98 );
99
100
106 static QgsRectangle getExtent(
107 const QString &layerurl, const QString &whereClause, const QString &authcfg, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString()
108 );
109
131 static QVariantMap getObjects(
132 const QString &layerurl,
133 const QString &authcfg,
134 const QList<quint32> &objectIds,
135 const QString &crs,
136 bool fetchGeometry,
137 const QStringList &fetchAttributes,
138 bool fetchM,
139 bool fetchZ,
140 QString &errorTitle,
141 QString &errorText,
142 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
143 QgsFeedback *feedback = nullptr,
144 const QString &urlPrefix = QString()
145 );
146
150 static QList<quint32> getObjectIdsByExtent(
151 const QString &layerurl,
152 const QgsRectangle &filterRect,
153 QString &errorTitle,
154 QString &errorText,
155 const QString &authcfg,
156 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
157 QgsFeedback *feedback = nullptr,
158 const QString &whereClause = QString(),
159 const QString &urlPrefix = QString()
160 );
161
165 static QByteArray queryService(
166 const QUrl &url,
167 const QString &authcfg,
168 QString &errorTitle,
169 QString &errorText,
170 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
171 QgsFeedback *feedback = nullptr,
172 QString *contentType = nullptr,
173 const QString &urlPrefix = QString(),
174 bool forceRefresh = false
175 );
179 static QVariantMap queryServiceJSON(
180 const QUrl &url,
181 const QString &authcfg,
182 QString &errorTitle,
183 QString &errorText,
184 const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(),
185 QgsFeedback *feedback = nullptr,
186 const QString &urlPrefix = QString(),
187 bool forceRefresh = false
188 );
189
193 static void visitFolderItems( const std::function<void( const QString &folderName, const QString &url )> &visitor, const QVariantMap &serviceData, const QString &baseUrl );
194
198 static void visitServiceItems(
199 const std::function<void( const QString &serviceName, const QString &url, Qgis::ArcGisRestServiceType serviceType )> &visitor, const QVariantMap &serviceData, const QString &baseUrl
200 );
201
234
238 static void addLayerItems(
239 const std::function<void( const LayerItemDetails &details )> &visitor, const QVariantMap &serviceData, const QString &parentUrl, const QString &parentSupportedFormats, Qgis::ArcGisRestServiceType serviceType
240 );
241
245 static QUrl parseUrl( const QUrl &url, bool *isTestEndpoint = nullptr );
246
247 private:
248 static void adjustBaseUrl( QString &baseUrl, const QString &name );
249
251};
252
254class CORE_EXPORT QgsArcGisAsyncQuery : public QObject
255{
256 Q_OBJECT
257 public:
258 QgsArcGisAsyncQuery( QObject *parent = nullptr );
259 ~QgsArcGisAsyncQuery() override;
260
261 void start( const QUrl &url, const QString &authCfg, QByteArray *result, bool allowCache = false, const QgsHttpHeaders &headers = QgsHttpHeaders(), const QString &urlPrefix = QString() );
262 signals:
263 void finished();
264 void failed( QString errorTitle, QString errorName );
265 private slots:
266 void handleReply();
267
268 private:
269 QPointer<QNetworkReply> mReply;
270 QByteArray *mResult = nullptr;
271};
272
273class CORE_EXPORT QgsArcGisAsyncParallelQuery : public QObject
274{
275 Q_OBJECT
276 public:
277 QgsArcGisAsyncParallelQuery( const QString &authcfg, const QgsHttpHeaders &requestHeaders, QObject *parent = nullptr );
278 void start( const QVector<QUrl> &urls, QVector<QByteArray> *results, bool allowCache = false );
279
280 signals:
281 void finished( QStringList errors );
282 private slots:
283 void handleReply();
284
285 private:
286 QVector<QByteArray> *mResults = nullptr;
287 int mPendingRequests = 0;
288 QStringList mErrors;
289 QString mAuthCfg;
290 QgsHttpHeaders mRequestHeaders;
291};
292
294
295
296
297#endif // QGSARCGISRESTQUERY_H
ArcGisRestServiceType
Available ArcGIS REST service types.
Definition qgis.h:4643
@ Unknown
Other unknown/unsupported type.
Definition qgis.h:4650
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 void visitFolderItems(const std::function< void(const QString &folderName, const QString &url)> &visitor, const QVariantMap &serviceData, const QString &baseUrl)
Calls the specified visitor function on all folder items found within the given service data.
static QVariantMap queryServiceJSON(const QUrl &url, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, const QString &urlPrefix=QString(), bool forceRefresh=false)
Performs a blocking request to a URL and returns the retrieved JSON content.
static QgsRectangle getExtent(const QString &layerurl, const QString &whereClause, const QString &authcfg, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), const QString &urlPrefix=QString())
Retrieves the extent for the features matching a whereClause.
static Qgis::ArcGisRestServiceType sniffServiceTypeFromJson(const QVariantMap &json)
Attempts to resolve the service type from a json definition.
static QVariantMap getObjectIds(const QString &layerurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), const QString &urlPrefix=QString(), const QgsRectangle &bbox=QgsRectangle(), const QString &whereClause=QString())
Retrieves all object IDs for the specified layer URL.
static QUrl parseUrl(const QUrl &url, bool *isTestEndpoint=nullptr)
Parses and processes a url.
static QByteArray queryService(const QUrl &url, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, QString *contentType=nullptr, const QString &urlPrefix=QString(), bool forceRefresh=false)
Performs a blocking request to a URL and returns the retrieved data.
static QVariantMap getServiceInfo(const QString &baseurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), const QString &urlPrefix=QString(), bool forceRefresh=false)
Retrieves JSON service info for the specified base URL.
static QVariantMap getLayerInfo(const QString &layerurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), const QString &urlPrefix=QString())
Retrieves JSON layer info for the specified layer URL.
static Qgis::ArcGisRestServiceType sniffServiceTypeFromUrl(const QUrl &url)
Attempts to resolve the service type from a url.
static void addLayerItems(const std::function< void(const LayerItemDetails &details)> &visitor, const QVariantMap &serviceData, const QString &parentUrl, const QString &parentSupportedFormats, Qgis::ArcGisRestServiceType serviceType)
Calls the specified visitor function on all layer items found within the given service data.
static void visitServiceItems(const std::function< void(const QString &serviceName, const QString &url, Qgis::ArcGisRestServiceType serviceType)> &visitor, const QVariantMap &serviceData, const QString &baseUrl)
Calls the specified visitor function on all service items found within the given service data.
QFlags< ServiceTypeFilter > ServiceTypeFilters
static QList< quint32 > getObjectIdsByExtent(const QString &layerurl, const QgsRectangle &filterRect, QString &errorTitle, QString &errorText, const QString &authcfg, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, const QString &whereClause=QString(), const QString &urlPrefix=QString())
Gets a list of object IDs which fall within the specified extent.
static QVariantMap getObjects(const QString &layerurl, const QString &authcfg, const QList< quint32 > &objectIds, const QString &crs, bool fetchGeometry, const QStringList &fetchAttributes, bool fetchM, bool fetchZ, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders=QgsHttpHeaders(), QgsFeedback *feedback=nullptr, const QString &urlPrefix=QString())
Retrieves all matching objects from the specified layer URL.
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.
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsProjectionSelectionWidget::CrsOptions)
Encapsulates details relating to a layer item.
Qgis::ArcGisRestServiceType 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.