QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
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;
39class QgsMapSettings;
40class QgsPointXY;
41class QgsRasterLayer;
42class QgsRectangle;
44class QgsVectorLayer;
46class QgsDxfExport;
48class QgsLayerTree;
52
53class QImage;
54class QPaintDevice;
55class QPainter;
57
58namespace QgsWms
59{
60
68 {
69 public:
70
76 QgsRenderer( const QgsWmsRenderContext &context );
77
82
90 QImage *getLegendGraphics( QgsLayerTreeModel &model );
91
100
108 QJsonObject getLegendGraphicsAsJson( QgsLayerTreeModel &model );
109
110 typedef QSet<QString> SymbolSet;
111 typedef QHash<QgsVectorLayer *, SymbolSet> HitTest;
112
118
124 QImage *getMap();
125
131 std::unique_ptr<QgsDxfExport> getDxf();
132
137 QByteArray getPrint();
138
143 QByteArray getFeatureInfo( const QString &version = "1.3.0" );
144
148 void configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings = nullptr );
149
150 private:
151 QgsLegendSettings legendSettings();
152
153 // Build and returns highlight layers
154 QList<QgsMapLayer *> highlightLayers( QList<QgsWmsParametersHighlightLayer> params );
155
156 // Rendering step for layers
157 QPainter *layersRendering( const QgsMapSettings &mapSettings, QImage &image ) const;
158
159 // Rendering step for annotations
160 void annotationsRendering( QPainter *painter, const QgsMapSettings &mapSettings ) const;
161
162 // Set layer opacity
163 void setLayerOpacity( QgsMapLayer *layer, int opacity ) const;
164
165 // Set layer filter and dimension
166 void setLayerFilter( QgsMapLayer *layer, const QList<QgsWmsParametersFilter> &filters );
167
168 QStringList dimensionFilter( QgsVectorLayer *layer ) const;
169
170 // Set layer python filter
171 void setLayerAccessControlFilter( QgsMapLayer *layer ) const;
172
173 // Set layer selection
174 void setLayerSelection( QgsMapLayer *layer, const QStringList &fids ) const;
175
176 // Combine map extent with layer extent
177 void updateExtent( const QgsMapLayer *layer, QgsMapSettings &mapSettings ) const;
178
179 // Scale image with WIDTH/HEIGHT if necessary
180 QImage *scaleImage( const QImage *image ) const;
181
188 QImage *createImage( const QSize &size ) const;
189
197 void configureMapSettings( const QPaintDevice *paintDevice, QgsMapSettings &mapSettings, bool mandatoryCrsParam = true );
198
205 QgsRenderContext configureDefaultRenderContext( QPainter *painter = nullptr );
206
207 QDomDocument featureInfoDocument( QList<QgsMapLayer *> &layers, const QgsMapSettings &mapSettings,
208 const QImage *outputImage, const QString &version ) const;
209
225 bool featureInfoFromVectorLayer( QgsVectorLayer *layer,
226 const QgsPointXY *infoPoint,
227 int nFeatures,
228 QDomDocument &infoDocument,
229 QDomElement &layerElement,
230 const QgsMapSettings &mapSettings,
231 QgsRenderContext &renderContext,
232 const QString &version,
233 QgsRectangle *featureBBox = nullptr,
234 QgsGeometry *filterGeom = nullptr ) const;
235
247 void writeAttributesTabGroup( const QgsAttributeEditorElement *group, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
248
260 void writeAttributesTabLayout( QgsEditFormConfig &config, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
261
273 void writeVectorLayerAttribute( int attributeIndex, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext, QStringList *attributes = nullptr ) const;
274
276 bool featureInfoFromRasterLayer( QgsRasterLayer *layer,
277 const QgsMapSettings &mapSettings,
278 const QgsPointXY *infoPoint,
279 QDomDocument &infoDocument,
280 QDomElement &layerElement,
281 const QString &version ) const;
282
284 void runHitTest( const QgsMapSettings &mapSettings, HitTest &hitTest ) const;
286 void runHitTestLayer( QgsVectorLayer *vl, SymbolSet &usedSymbols, QgsRenderContext &context ) const;
287
292 bool testFilterStringSafety( const QString &filter ) const;
294 static void groupStringList( QStringList &list, const QString &groupString );
295
297 void convertFeatureInfoToSia2045( QDomDocument &doc ) const;
298
300 QByteArray convertFeatureInfoToHtml( const QDomDocument &doc ) const;
301
303 QByteArray convertFeatureInfoToText( const QDomDocument &doc ) const;
304
306 QByteArray convertFeatureInfoToJson( const QList<QgsMapLayer *> &layers, const QDomDocument &doc ) const;
307
308 QDomElement createFeatureGML(
309 const QgsFeature *feat,
310 QgsVectorLayer *layer,
311 QDomDocument &doc,
313 const QgsMapSettings &mapSettings,
314 const QString &typeName,
315 bool withGeom,
316 int version,
317 QStringList *attributes = nullptr ) const;
318
320 static QString replaceValueMapAndRelation( QgsVectorLayer *vl, int idx, const QVariant &attributeVal );
322 QgsRectangle featureInfoSearchRect( QgsVectorLayer *ml, const QgsMapSettings &ms, const QgsRenderContext &rct, const QgsPointXY &infoPoint ) const;
323
331 bool configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings, QgsLayoutAtlas *atlas );
332
333 void removeTemporaryLayers();
334
335 void handlePrintErrors( const QgsLayout *layout ) const;
336
337 void setLayerStyle( QgsMapLayer *layer, const QString &style ) const;
338
339 void setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const;
340
341 QgsWmsParameters mWmsParameters;
342
343 QgsFeatureFilter mFeatureFilter;
344
345 const QgsProject *mProject = nullptr;
346 QList<QgsMapLayer *> mTemporaryLayers;
347 const QgsWmsRenderContext &mContext;
348
350 bool mIsTemporal = false;
351 };
352
353} // namespace QgsWms
354
355#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:74
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.
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.
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