QGIS API Documentation 3.35.0-Master (728e5967df5)
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
69 {
70 public:
71
77 QgsRenderer( const QgsWmsRenderContext &context );
78
83
91 QImage *getLegendGraphics( QgsLayerTreeModel &model );
92
101
110 QJsonObject getLegendGraphicsAsJson( QgsLayerTreeModel &model, const Qgis::LegendJsonRenderFlags &jsonRenderFlags = Qgis::LegendJsonRenderFlags() );
111
120 QJsonObject getLegendGraphicsAsJson( QgsLayerTreeModelLegendNode &legendNode, const Qgis::LegendJsonRenderFlags &jsonRenderFlags = Qgis::LegendJsonRenderFlags() );
121
122
123 typedef QSet<QString> SymbolSet;
124 typedef QHash<QgsVectorLayer *, SymbolSet> HitTest;
125
131
137 QImage *getMap();
138
144 std::unique_ptr<QgsDxfExport> getDxf();
145
152 std::unique_ptr<QgsMapRendererTask> getPdf( const QString &tmpFileName );
153
158 QByteArray getPrint();
159
164 QByteArray getFeatureInfo( const QString &version = "1.3.0" );
165
169 void configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings = nullptr );
170
171 private:
172 QgsLegendSettings legendSettings();
173
174 // Build and returns highlight layers
175 QList<QgsMapLayer *> highlightLayers( QList<QgsWmsParametersHighlightLayer> params );
176
177 // Rendering step for layers
178 QPainter *layersRendering( const QgsMapSettings &mapSettings, QImage &image ) const;
179
180 // Rendering step for annotations
181 void annotationsRendering( QPainter *painter, const QgsMapSettings &mapSettings ) const;
182
183 // Set layer opacity
184 void setLayerOpacity( QgsMapLayer *layer, int opacity ) const;
185
186 // Set layer filter and dimension
187 void setLayerFilter( QgsMapLayer *layer, const QList<QgsWmsParametersFilter> &filters );
188
189 QStringList dimensionFilter( QgsVectorLayer *layer ) const;
190
191 // Set layer python filter
192 void setLayerAccessControlFilter( QgsMapLayer *layer ) const;
193
194 // Set layer selection
195 void setLayerSelection( QgsMapLayer *layer, const QStringList &fids ) const;
196
197 // Combine map extent with layer extent
198 void updateExtent( const QgsMapLayer *layer, QgsMapSettings &mapSettings ) const;
199
200 // Scale image with WIDTH/HEIGHT if necessary
201 QImage *scaleImage( const QImage *image ) const;
202
209 QImage *createImage( const QSize &size ) const;
210
218 void configureMapSettings( const QPaintDevice *paintDevice, QgsMapSettings &mapSettings, bool mandatoryCrsParam = true );
219
226 QgsRenderContext configureDefaultRenderContext( QPainter *painter = nullptr );
227
228 QDomDocument featureInfoDocument( QList<QgsMapLayer *> &layers, const QgsMapSettings &mapSettings,
229 const QImage *outputImage, const QString &version ) const;
230
246 bool featureInfoFromVectorLayer( QgsVectorLayer *layer,
247 const QgsPointXY *infoPoint,
248 int nFeatures,
249 QDomDocument &infoDocument,
250 QDomElement &layerElement,
251 const QgsMapSettings &mapSettings,
252 QgsRenderContext &renderContext,
253 const QString &version,
254 QgsRectangle *featureBBox = nullptr,
255 QgsGeometry *filterGeom = nullptr ) const;
256
268 void writeAttributesTabGroup( const QgsAttributeEditorElement *group, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
269
281 void writeAttributesTabLayout( QgsEditFormConfig &config, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
282
294 void writeVectorLayerAttribute( int attributeIndex, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
295
297 bool featureInfoFromRasterLayer( QgsRasterLayer *layer,
298 const QgsMapSettings &mapSettings,
299 const QgsPointXY *infoPoint,
300 QDomDocument &infoDocument,
301 QDomElement &layerElement,
302 const QString &version ) const;
303
305 void runHitTest( const QgsMapSettings &mapSettings, HitTest &hitTest ) const;
307 void runHitTestLayer( QgsVectorLayer *vl, SymbolSet &usedSymbols, QgsRenderContext &context ) const;
308
313 bool testFilterStringSafety( const QString &filter ) const;
315 static void groupStringList( QStringList &list, const QString &groupString );
316
318 void convertFeatureInfoToSia2045( QDomDocument &doc ) const;
319
321 QByteArray convertFeatureInfoToHtml( const QDomDocument &doc ) const;
322
324 QByteArray convertFeatureInfoToText( const QDomDocument &doc ) const;
325
327 QByteArray convertFeatureInfoToJson( const QList<QgsMapLayer *> &layers, const QDomDocument &doc ) const;
328
329 QDomElement createFeatureGML(
330 const QgsFeature *feat,
331 QgsVectorLayer *layer,
332 QDomDocument &doc,
334 const QgsMapSettings &mapSettings,
335 const QString &typeName,
336 bool withGeom,
337 int version,
338 QStringList *attributes = nullptr ) const;
339
341 static QString replaceValueMapAndRelation( QgsVectorLayer *vl, int idx, const QVariant &attributeVal );
343 QgsRectangle featureInfoSearchRect( QgsVectorLayer *ml, const QgsMapSettings &ms, const QgsRenderContext &rct, const QgsPointXY &infoPoint ) const;
344
352 bool configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings, QgsLayoutAtlas *atlas );
353
354 void removeTemporaryLayers();
355
356 void handlePrintErrors( const QgsLayout *layout ) const;
357
358 void setLayerStyle( QgsMapLayer *layer, const QString &style ) const;
359
360 void setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const;
361
362 QgsWmsParameters mWmsParameters;
363
364 QgsFeatureFilter mFeatureFilter;
365
366 const QgsProject *mProject = nullptr;
367 QList<QgsMapLayer *> mTemporaryLayers;
368 const QgsWmsRenderContext &mContext;
369
371 bool mIsTemporal = false;
372 };
373
374} // namespace QgsWms
375
376#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.
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:56
Container of fields for a vector layer.
Definition qgsfields.h:45
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: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:75
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 \tmpFileName the name of the temporary file to store the pdf.
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).
~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.
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