QGIS API Documentation 3.32.0-Lima (311a8cb8a6)
qgswmsrenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgswmsrendrer.h
3 -------------------
4 begin : May 14, 2006
5 copyright : (C) 2006 by Marco Hugentobler
6 (C) 2017 by David Marteau
7 email : marco dot hugentobler at karto dot baug dot ethz dot ch
8 david dot marteau at 3liz dot com
9 ***************************************************************************/
10
11/***************************************************************************
12 * *
13 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. *
17 * *
18 ***************************************************************************/
19
20#ifndef QGSWMSRENDERER_H
21#define QGSWMSRENDERER_H
22
23#include "qgsserversettings.h"
24#include "qgswmsparameters.h"
25#include "qgswmsrendercontext.h"
26#include "qgsfeaturefilter.h"
28#include "qgseditformconfig.h"
29#include <QDomDocument>
30#include <QMap>
31#include <QString>
32
34class QgsPrintLayout;
35class QgsFeature;
36class QgsLayout;
37class QgsMapLayer;
38class QgsMapSettings;
39class QgsPointXY;
40class QgsRasterLayer;
41class QgsRectangle;
43class QgsVectorLayer;
45class QgsDxfExport;
47class QgsLayerTree;
51
52class QImage;
53class QPaintDevice;
54class QPainter;
56
57namespace QgsWms
58{
59
67 {
68 public:
69
75 QgsRenderer( const QgsWmsRenderContext &context );
76
81
89 QImage *getLegendGraphics( QgsLayerTreeModel &model );
90
99
107 QJsonObject getLegendGraphicsAsJson( QgsLayerTreeModel &model );
108
109 typedef QSet<QString> SymbolSet;
110 typedef QHash<QgsVectorLayer *, SymbolSet> HitTest;
111
117
123 QImage *getMap();
124
130 std::unique_ptr<QgsDxfExport> getDxf();
131
136 QByteArray getPrint();
137
142 QByteArray getFeatureInfo( const QString &version = "1.3.0" );
143
147 void configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings = nullptr );
148
149 private:
150 QgsLegendSettings legendSettings();
151
152 // Build and returns highlight layers
153 QList<QgsMapLayer *> highlightLayers( QList<QgsWmsParametersHighlightLayer> params );
154
155 // Rendering step for layers
156 QPainter *layersRendering( const QgsMapSettings &mapSettings, QImage &image ) const;
157
158 // Rendering step for annotations
159 void annotationsRendering( QPainter *painter, const QgsMapSettings &mapSettings ) const;
160
161 // Set layer opacity
162 void setLayerOpacity( QgsMapLayer *layer, int opacity ) const;
163
164 // Set layer filter and dimension
165 void setLayerFilter( QgsMapLayer *layer, const QList<QgsWmsParametersFilter> &filters );
166
167 QStringList dimensionFilter( QgsVectorLayer *layer ) const;
168
169 // Set layer python filter
170 void setLayerAccessControlFilter( QgsMapLayer *layer ) const;
171
172 // Set layer selection
173 void setLayerSelection( QgsMapLayer *layer, const QStringList &fids ) const;
174
175 // Combine map extent with layer extent
176 void updateExtent( const QgsMapLayer *layer, QgsMapSettings &mapSettings ) const;
177
178 // Scale image with WIDTH/HEIGHT if necessary
179 QImage *scaleImage( const QImage *image ) const;
180
187 QImage *createImage( const QSize &size ) const;
188
196 void configureMapSettings( const QPaintDevice *paintDevice, QgsMapSettings &mapSettings, bool mandatoryCrsParam = true );
197
204 QgsRenderContext configureDefaultRenderContext( QPainter *painter = nullptr );
205
206 QDomDocument featureInfoDocument( QList<QgsMapLayer *> &layers, const QgsMapSettings &mapSettings,
207 const QImage *outputImage, const QString &version ) const;
208
224 bool featureInfoFromVectorLayer( QgsVectorLayer *layer,
225 const QgsPointXY *infoPoint,
226 int nFeatures,
227 QDomDocument &infoDocument,
228 QDomElement &layerElement,
229 const QgsMapSettings &mapSettings,
230 QgsRenderContext &renderContext,
231 const QString &version,
232 QgsRectangle *featureBBox = nullptr,
233 QgsGeometry *filterGeom = nullptr ) const;
234
246 void writeAttributesTabGroup( const QgsAttributeEditorElement *group, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
247
259 void writeAttributesTabLayout( QgsEditFormConfig &config, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
260
272 void writeVectorLayerAttribute( int attributeIndex, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
273
275 bool featureInfoFromRasterLayer( QgsRasterLayer *layer,
276 const QgsMapSettings &mapSettings,
277 const QgsPointXY *infoPoint,
278 QDomDocument &infoDocument,
279 QDomElement &layerElement,
280 const QString &version ) const;
281
283 void runHitTest( const QgsMapSettings &mapSettings, HitTest &hitTest ) const;
285 void runHitTestLayer( QgsVectorLayer *vl, SymbolSet &usedSymbols, QgsRenderContext &context ) const;
286
291 bool testFilterStringSafety( const QString &filter ) const;
293 static void groupStringList( QStringList &list, const QString &groupString );
294
296 void convertFeatureInfoToSia2045( QDomDocument &doc ) const;
297
299 QByteArray convertFeatureInfoToHtml( const QDomDocument &doc ) const;
300
302 QByteArray convertFeatureInfoToText( const QDomDocument &doc ) const;
303
305 QByteArray convertFeatureInfoToJson( const QList<QgsMapLayer *> &layers, const QDomDocument &doc ) const;
306
307 QDomElement createFeatureGML(
308 const QgsFeature *feat,
309 QgsVectorLayer *layer,
310 QDomDocument &doc,
312 const QgsMapSettings &mapSettings,
313 const QString &typeName,
314 bool withGeom,
315 int version,
316 QStringList *attributes = nullptr ) const;
317
319 static QString replaceValueMapAndRelation( QgsVectorLayer *vl, int idx, const QVariant &attributeVal );
321 QgsRectangle featureInfoSearchRect( QgsVectorLayer *ml, const QgsMapSettings &ms, const QgsRenderContext &rct, const QgsPointXY &infoPoint ) const;
322
330 bool configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings, bool atlasPrint = false );
331
332 void removeTemporaryLayers();
333
334 void handlePrintErrors( const QgsLayout *layout ) const;
335
336 void setLayerStyle( QgsMapLayer *layer, const QString &style ) const;
337
338 void setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const;
339
340 QgsWmsParameters mWmsParameters;
341
342 QgsFeatureFilter mFeatureFilter;
343
344 const QgsProject *mProject = nullptr;
345 QList<QgsMapLayer *> mTemporaryLayers;
346 const QgsWmsRenderContext &mContext;
347
349 bool mIsTemporal = false;
350 };
351
352} // namespace QgsWms
353
354#endif
A helper class that centralizes restrictions given by all the access control filter plugins.
This is an abstract base class for any elements of a drag and drop form.
A vector of attributes.
Definition: qgsattributes.h:59
This class represents a coordinate reference system (CRS).
Exports QGIS layers to the DXF format.
Definition: qgsdxfexport.h:65
Contains configuration settings for an editor form.
A feature filter provider allowing to set filter expressions on a per-layer basis.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:164
Layer tree group node serves as a container for layers and further groups.
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
The QgsLayerTreeModel class is model implementation for Qt item views framework.
Namespace with helper functions for layer tree operations.
Definition: qgslayertree.h:33
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:50
The QgsLegendSettings class stores the appearance and layout settings for legend drawing with QgsLege...
Base class for all map layer types.
Definition: qgsmaplayer.h:73
The QgsMapSettings class contains configuration for rendering of the map.
A class to represent a 2D point.
Definition: qgspointxy.h:59
Print layout, a QgsLayout subclass for static or atlas-based layouts.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:107
Represents a raster layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Contains information about the context of a rendering operation.
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
Represents a vector layer which manages a vector based data sets.
Map renderer for WMS requests.
QgsRenderer(const QgsWmsRenderContext &context)
Constructor for QgsRenderer.
QHash< QgsVectorLayer *, SymbolSet > HitTest
QByteArray getPrint()
Returns printed page as binary.
HitTest symbols()
Returns the hit test according to the current context.
std::unique_ptr< QgsDxfExport > getDxf()
Returns the map as DXF data.
QSet< QString > SymbolSet
void configureLayers(QList< QgsMapLayer * > &layers, QgsMapSettings *settings=nullptr)
Configures layers for rendering optionally considering the map settings.
QJsonObject getLegendGraphicsAsJson(QgsLayerTreeModel &model)
Returns the map legend as a JSON object.
QByteArray getFeatureInfo(const QString &version="1.3.0")
Creates an xml document that describes the result of the getFeatureInfo request.
QImage * getLegendGraphics(QgsLayerTreeModel &model)
Returns the map legend as an image (or nullptr in case of error).
QImage * getMap()
Returns the map as an image (or nullptr in case of error).
~QgsRenderer()
Destructor for QgsRenderer.
Provides an interface to retrieve and manipulate WMS parameters received from the client.
Rendering context for the WMS renderer.
Median cut implementation.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
const QgsCoordinateReferenceSystem & crs
const QString & typeName
bool withGeom