QGIS API Documentation 3.99.0-Master (2fe06baccd8)
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 "qgseditformconfig.h"
24#include "qgsfeaturefilter.h"
26#include "qgslayoutatlas.h"
27#include "qgsmaprendererjob.h"
28#include "qgsserversettings.h"
29#include "qgswmsparameters.h"
30#include "qgswmsrendercontext.h"
31
32#include <QDomDocument>
33#include <QMap>
34#include <QString>
35
37class QgsPrintLayout;
38class QgsFeature;
39class QgsLayout;
40class QgsMapLayer;
42class QgsMapSettings;
43class QgsPointXY;
44class QgsRasterLayer;
45class QgsRectangle;
47class QgsVectorLayer;
49class QgsDxfExport;
51class QgsLayerTree;
55
56class QImage;
57class QPaintDevice;
58class QPainter;
60
61namespace QgsWms
62{
63
70 {
71 public:
77 QgsRenderer( const QgsWmsRenderContext &context );
78
80
88 QImage *getLegendGraphics( QgsLayerTreeModel &model );
89
98
108
118
119
120 typedef QSet<QString> SymbolSet;
121 typedef QHash<QgsVectorLayer *, SymbolSet> HitTest;
122
128
134 std::unique_ptr<QImage> getMap();
135
140 std::unique_ptr<QgsDxfExport> getDxf();
141
148 std::unique_ptr<QgsMapRendererTask> getPdf( const QString &tmpFileName );
149
154 QByteArray getPrint();
155
160 QByteArray getFeatureInfo( const QString &version = "1.3.0" );
161
165 void configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings = nullptr );
166
167 private:
168 QgsLegendSettings legendSettings();
169
170 // Build and returns highlight layers
171 QList<QgsMapLayer *> highlightLayers( QList<QgsWmsParametersHighlightLayer> params );
172
173 // Rendering step for layers
174 QPainter *layersRendering( const QgsMapSettings &mapSettings, QImage *image ) const;
175
176 // Rendering step for annotations
177 void annotationsRendering( QPainter *painter, const QgsMapSettings &mapSettings ) const;
178
179 // Set layer opacity
180 void setLayerOpacity( QgsMapLayer *layer, int opacity ) const;
181
182 // Set layer filter and dimension
183 void setLayerFilter( QgsMapLayer *layer, const QList<QgsWmsParametersFilter> &filters );
184
185 QStringList dimensionFilter( QgsVectorLayer *layer ) const;
186
187 // Set layer python filter
188 void setLayerAccessControlFilter( QgsMapLayer *layer ) const;
189
190 // Set layer selection
191 void setLayerSelection( QgsMapLayer *layer, const QStringList &fids ) const;
192
193 // Combine map extent with layer extent
194 void updateExtent( const QgsMapLayer *layer, QgsMapSettings &mapSettings ) const;
195
196 // Scale image with WIDTH/HEIGHT if necessary
197 QImage *scaleImage( const QImage *image ) const;
198
205 QImage *createImage( const QSize &size ) const;
206
214 void configureMapSettings( const QPaintDevice *paintDevice, QgsMapSettings &mapSettings, bool mandatoryCrsParam = true );
215
222 QgsRenderContext configureDefaultRenderContext( QPainter *painter = nullptr );
223
224 QDomDocument featureInfoDocument( QList<QgsMapLayer *> &layers, const QgsMapSettings &mapSettings, const QImage *outputImage, const QString &version ) const;
225
241 bool featureInfoFromVectorLayer( QgsVectorLayer *layer, const QgsPointXY *infoPoint, int nFeatures, QDomDocument &infoDocument, QDomElement &layerElement, const QgsMapSettings &mapSettings, QgsRenderContext &renderContext, const QString &version, QgsRectangle *featureBBox = nullptr, QgsGeometry *filterGeom = nullptr ) const;
242
254 void writeAttributesTabGroup( const QgsAttributeEditorElement *group, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
255
267 void writeAttributesTabLayout( QgsEditFormConfig &config, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
268
280 void writeVectorLayerAttribute( int attributeIndex, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
281
283 bool featureInfoFromRasterLayer( QgsRasterLayer *layer, const QgsMapSettings &mapSettings, const QgsPointXY *infoPoint, const QgsRenderContext &renderContext, QDomDocument &infoDocument, QDomElement &layerElement, const QString &version ) const;
284
286 void runHitTest( const QgsMapSettings &mapSettings, HitTest &hitTest ) const;
288 void runHitTestLayer( QgsVectorLayer *vl, SymbolSet &usedSymbols, QgsRenderContext &context ) const;
289
294 bool testFilterStringSafety( const QString &filter ) const;
296 static void groupStringList( QStringList &list, const QString &groupString );
297
299 void convertFeatureInfoToSia2045( QDomDocument &doc ) const;
300
302 QByteArray convertFeatureInfoToHtml( const QDomDocument &doc ) const;
303
305 QByteArray convertFeatureInfoToText( const QDomDocument &doc ) const;
306
308 QByteArray convertFeatureInfoToJson( const QList<QgsMapLayer *> &layers, const QDomDocument &doc, const QgsCoordinateReferenceSystem &destCRS ) const;
309
310 QDomElement createFeatureGML(
311 const QgsFeature *feat,
312 QgsVectorLayer *layer,
313 QDomDocument &doc,
315 const QgsMapSettings &mapSettings,
316 const QString &typeName,
317 bool withGeom,
318 int version,
319 QStringList *attributes = nullptr
320 ) const;
321
323 static QString replaceValueMapAndRelation( QgsVectorLayer *vl, int idx, const QVariant &attributeVal );
325 QgsRectangle featureInfoSearchRect( QgsVectorLayer *ml, const QgsMapSettings &ms, const QgsRenderContext &rct, const QgsPointXY &infoPoint ) const;
326
334 bool configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings, QgsLayoutAtlas *atlas );
335
336 void removeTemporaryLayers();
337
338 void logRenderingErrors( const QgsMapRendererJob::Errors &errors ) const;
339
340 void handlePrintErrors( const QgsLayout *layout ) const;
341
342 void setLayerStyle( QgsMapLayer *layer, const QString &style ) const;
343
344 void setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const;
345
346 QgsWmsParameters mWmsParameters;
347
348 QgsFeatureFilter mFeatureFilter;
349
350 const QgsProject *mProject = nullptr;
351 QList<QgsMapLayer *> mTemporaryLayers;
352 const QgsWmsRenderContext &mContext;
353
355 bool mIsTemporal = false;
356 };
357
358} // namespace QgsWms
359
360#endif
QFlags< LegendJsonRenderFlag > LegendJsonRenderFlags
Definition qgis.h:4599
A helper class that centralizes restrictions given by all the access control filter plugins.
An abstract base class for any elements of a drag and drop form.
A vector of attributes.
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.
An abstract interface for legend items returned from QgsMapLayerLegend implementation.
A model representing the layer tree, including layers and groups of layers.
Namespace with helper functions for layer tree operations.
Used to render QgsLayout as an atlas, by iterating over the features from an associated vector layer.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition qgslayout.h:50
Stores the appearance and layout settings for legend drawing with QgsLegendRenderer.
Base class for all map layer types.
Definition qgsmaplayer.h:80
QList< QgsMapRendererJob::Error > Errors
QgsTask task which draws a map to an image file or a painter as a background task.
Contains configuration for rendering maps.
Represents 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:109
Represents a raster layer.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
Defines interfaces exposed by QGIS Server and made available to plugins.
Represents a vector layer which manages a vector based dataset.
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.
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).
std::unique_ptr< QImage > getMap()
Returns the map 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.
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