QGIS API Documentation 3.39.0-Master (bca3cdb6021)
Loading...
Searching...
No Matches
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 "qgslayoutatlas.h"
24#include "qgsserversettings.h"
25#include "qgswmsparameters.h"
26#include "qgswmsrendercontext.h"
27#include "qgsfeaturefilter.h"
29#include "qgseditformconfig.h"
30#include <QDomDocument>
31#include <QMap>
32#include <QString>
33
35class QgsPrintLayout;
36class QgsFeature;
37class QgsLayout;
38class QgsMapLayer;
40class QgsMapSettings;
41class QgsPointXY;
42class QgsRasterLayer;
43class QgsRectangle;
45class QgsVectorLayer;
47class QgsDxfExport;
49class QgsLayerTree;
53
54class QImage;
55class QPaintDevice;
56class QPainter;
58
59namespace QgsWms
60{
61
68 {
69 public:
70
76 QgsRenderer( const QgsWmsRenderContext &context );
77
79
87 QImage *getLegendGraphics( QgsLayerTreeModel &model );
88
97
107
117
118
119 typedef QSet<QString> SymbolSet;
120 typedef QHash<QgsVectorLayer *, SymbolSet> HitTest;
121
127
133 QImage *getMap();
134
139 std::unique_ptr<QgsDxfExport> getDxf();
140
147 std::unique_ptr<QgsMapRendererTask> getPdf( const QString &tmpFileName );
148
153 QByteArray getPrint();
154
159 QByteArray getFeatureInfo( const QString &version = "1.3.0" );
160
164 void configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings = nullptr );
165
166 private:
167 QgsLegendSettings legendSettings();
168
169 // Build and returns highlight layers
170 QList<QgsMapLayer *> highlightLayers( QList<QgsWmsParametersHighlightLayer> params );
171
172 // Rendering step for layers
173 QPainter *layersRendering( const QgsMapSettings &mapSettings, QImage &image ) const;
174
175 // Rendering step for annotations
176 void annotationsRendering( QPainter *painter, const QgsMapSettings &mapSettings ) const;
177
178 // Set layer opacity
179 void setLayerOpacity( QgsMapLayer *layer, int opacity ) const;
180
181 // Set layer filter and dimension
182 void setLayerFilter( QgsMapLayer *layer, const QList<QgsWmsParametersFilter> &filters );
183
184 QStringList dimensionFilter( QgsVectorLayer *layer ) const;
185
186 // Set layer python filter
187 void setLayerAccessControlFilter( QgsMapLayer *layer ) const;
188
189 // Set layer selection
190 void setLayerSelection( QgsMapLayer *layer, const QStringList &fids ) const;
191
192 // Combine map extent with layer extent
193 void updateExtent( const QgsMapLayer *layer, QgsMapSettings &mapSettings ) const;
194
195 // Scale image with WIDTH/HEIGHT if necessary
196 QImage *scaleImage( const QImage *image ) const;
197
204 QImage *createImage( const QSize &size ) const;
205
213 void configureMapSettings( const QPaintDevice *paintDevice, QgsMapSettings &mapSettings, bool mandatoryCrsParam = true );
214
221 QgsRenderContext configureDefaultRenderContext( QPainter *painter = nullptr );
222
223 QDomDocument featureInfoDocument( QList<QgsMapLayer *> &layers, const QgsMapSettings &mapSettings,
224 const QImage *outputImage, const QString &version ) const;
225
241 bool featureInfoFromVectorLayer( QgsVectorLayer *layer,
242 const QgsPointXY *infoPoint,
243 int nFeatures,
244 QDomDocument &infoDocument,
245 QDomElement &layerElement,
246 const QgsMapSettings &mapSettings,
247 QgsRenderContext &renderContext,
248 const QString &version,
249 QgsRectangle *featureBBox = nullptr,
250 QgsGeometry *filterGeom = nullptr ) const;
251
263 void writeAttributesTabGroup( const QgsAttributeEditorElement *group, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
264
276 void writeAttributesTabLayout( QgsEditFormConfig &config, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
277
289 void writeVectorLayerAttribute( int attributeIndex, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
290
292 bool featureInfoFromRasterLayer( QgsRasterLayer *layer,
293 const QgsMapSettings &mapSettings,
294 const QgsPointXY *infoPoint,
295 const QgsRenderContext &renderContext,
296 QDomDocument &infoDocument,
297 QDomElement &layerElement,
298 const QString &version ) const;
299
301 void runHitTest( const QgsMapSettings &mapSettings, HitTest &hitTest ) const;
303 void runHitTestLayer( QgsVectorLayer *vl, SymbolSet &usedSymbols, QgsRenderContext &context ) const;
304
309 bool testFilterStringSafety( const QString &filter ) const;
311 static void groupStringList( QStringList &list, const QString &groupString );
312
314 void convertFeatureInfoToSia2045( QDomDocument &doc ) const;
315
317 QByteArray convertFeatureInfoToHtml( const QDomDocument &doc ) const;
318
320 QByteArray convertFeatureInfoToText( const QDomDocument &doc ) const;
321
323 QByteArray convertFeatureInfoToJson( const QList<QgsMapLayer *> &layers, const QDomDocument &doc, const QgsCoordinateReferenceSystem &destCRS ) const;
324
325 QDomElement createFeatureGML(
326 const QgsFeature *feat,
327 QgsVectorLayer *layer,
328 QDomDocument &doc,
330 const QgsMapSettings &mapSettings,
331 const QString &typeName,
332 bool withGeom,
333 int version,
334 QStringList *attributes = nullptr ) const;
335
337 static QString replaceValueMapAndRelation( QgsVectorLayer *vl, int idx, const QVariant &attributeVal );
339 QgsRectangle featureInfoSearchRect( QgsVectorLayer *ml, const QgsMapSettings &ms, const QgsRenderContext &rct, const QgsPointXY &infoPoint ) const;
340
348 bool configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings, QgsLayoutAtlas *atlas );
349
350 void removeTemporaryLayers();
351
352 void handlePrintErrors( const QgsLayout *layout ) const;
353
354 void setLayerStyle( QgsMapLayer *layer, const QString &style ) const;
355
356 void setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const;
357
358 QgsWmsParameters mWmsParameters;
359
360 QgsFeatureFilter mFeatureFilter;
361
362 const QgsProject *mProject = nullptr;
363 QList<QgsMapLayer *> mTemporaryLayers;
364 const QgsWmsRenderContext &mContext;
365
367 bool mIsTemporal = false;
368 };
369
370} // namespace QgsWms
371
372#endif
QFlags< LegendJsonRenderFlag > LegendJsonRenderFlags
Definition qgis.h:4236
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.
This class represents a coordinate reference system (CRS).
Exports QGIS layers to the DXF format.
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:58
Container of fields for a vector layer.
Definition qgsfields.h:46
A geometry is the spatial representation of a feature.
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.
Class used to render QgsLayout as an atlas, by iterating over the features from an associated vector ...
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition qgslayout.h:49
The QgsLegendSettings class stores the appearance and layout settings for legend drawing with QgsLege...
Base class for all map layer types.
Definition qgsmaplayer.h:76
QgsTask task which draws a map to an image file or a painter as a background task.
The QgsMapSettings class contains configuration for rendering of the map.
A class to represent a 2D point.
Definition qgspointxy.h:60
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.
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.
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.
std::unique_ptr< QgsMapRendererTask > getPdf(const QString &tmpFileName)
Returns a configured pdf export task.
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).
QJsonObject getLegendGraphicsAsJson(QgsLayerTreeModel &model, const Qgis::LegendJsonRenderFlags &jsonRenderFlags=Qgis::LegendJsonRenderFlags())
Returns the map legend as a JSON object.
QImage * getMap()
Returns the map as an image (or nullptr in case of error).
Provides an interface to retrieve and manipulate WMS parameters received from the client.
Rendering context for the WMS renderer.
Median cut implementation.
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)
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