QGIS API Documentation 3.43.0-Master (e01d6d7c4c0)
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#define SIP_NO_FILE
19
20#include "qgis_core.h"
21#include "qgsrectangle.h"
22#include "qgshttpheaders.h"
23
24#include <QString>
25#include <QVariantMap>
26
27class QgsFeedback;
28class QNetworkReply;
30
37class CORE_EXPORT QgsArcGisRestQueryUtils
38{
39 public:
40
45 {
46 AllTypes,
47 Vector,
48 Raster
49 };
50
54 static QVariantMap getServiceInfo( const QString &baseurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString() );
55
59 static QVariantMap getLayerInfo( const QString &layerurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString() );
60
64 static QVariantMap getObjectIds( const QString &layerurl, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString(),
65 const QgsRectangle &bbox = QgsRectangle(),
66 const QString &whereClause = QString() );
67
68
74 static QgsRectangle getExtent( const QString &layerurl, const QString &whereClause, const QString &authcfg, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), const QString &urlPrefix = QString() );
75
98 static QVariantMap getObjects( const QString &layerurl, const QString &authcfg, const QList<quint32> &objectIds, const QString &crs,
99 bool fetchGeometry, const QStringList &fetchAttributes, bool fetchM, bool fetchZ,
100 const QgsRectangle &filterRect, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), QgsFeedback *feedback = nullptr, const QString &urlPrefix = QString() );
101
105 static QList<quint32> getObjectIdsByExtent( const QString &layerurl, const QgsRectangle &filterRect, QString &errorTitle, QString &errorText, const QString &authcfg, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), QgsFeedback *feedback = nullptr,
106 const QString &whereClause = QString(), const QString &urlPrefix = QString() );
107
111 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() );
112
116 static QVariantMap queryServiceJSON( const QUrl &url, const QString &authcfg, QString &errorTitle, QString &errorText, const QgsHttpHeaders &requestHeaders = QgsHttpHeaders(), QgsFeedback *feedback = nullptr, const QString &urlPrefix = QString() );
117
121 static void visitFolderItems( const std::function<void ( const QString &folderName, const QString &url )> &visitor, const QVariantMap &serviceData, const QString &baseUrl );
122
126 static void visitServiceItems( const std::function<void ( const QString &serviceName, const QString &url, Qgis::ArcGisRestServiceType serviceType )> &visitor, const QVariantMap &serviceData, const QString &baseUrl );
127
131 static void addLayerItems( const std::function<void ( const QString &parentLayerId, ServiceTypeFilter serviceType, Qgis::GeometryType geometryType, const QString &layerId, const QString &name, const QString &description, const QString &url, bool isParentLayer, const QgsCoordinateReferenceSystem &crs, const QString &format )> &visitor, const QVariantMap &serviceData, const QString &parentUrl, const QString &parentSupportedFormats, const ServiceTypeFilter filter = ServiceTypeFilter::AllTypes );
132
136 static QUrl parseUrl( const QUrl &url, bool *isTestEndpoint = nullptr );
137
138 private:
139
140 static void adjustBaseUrl( QString &baseUrl, const QString &name );
141
142 friend class TestQgsArcGisRestUtils;
143};
144
146class CORE_EXPORT QgsArcGisAsyncQuery : public QObject
147{
148 Q_OBJECT
149 public:
150 QgsArcGisAsyncQuery( QObject *parent = nullptr );
151 ~QgsArcGisAsyncQuery() override;
152
153 void start( const QUrl &url, const QString &authCfg, QByteArray *result, bool allowCache = false, const QgsHttpHeaders &headers = QgsHttpHeaders(), const QString &urlPrefix = QString() );
154 signals:
155 void finished();
156 void failed( QString errorTitle, QString errorName );
157 private slots:
158 void handleReply();
159
160 private:
161 QNetworkReply *mReply = nullptr;
162 QByteArray *mResult = nullptr;
163};
164
165class CORE_EXPORT QgsArcGisAsyncParallelQuery : public QObject
166{
167 Q_OBJECT
168 public:
169 QgsArcGisAsyncParallelQuery( const QString &authcfg, const QgsHttpHeaders &requestHeaders, QObject *parent = nullptr );
170 void start( const QVector<QUrl> &urls, QVector<QByteArray> *results, bool allowCache = false );
171
172 signals:
173 void finished( QStringList errors );
174 private slots:
175 void handleReply();
176
177 private:
178 QVector<QByteArray> *mResults = nullptr;
179 int mPendingRequests = 0;
180 QStringList mErrors;
181 QString mAuthCfg;
182 QgsHttpHeaders mRequestHeaders;
183};
184
186
187#endif // QGSARCGISRESTQUERY_H
ArcGisRestServiceType
Available ArcGIS REST service types.
Definition qgis.h:4237
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
Definition qgis.h:337
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.
const QgsCoordinateReferenceSystem & crs