QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgswmsgetmap.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgswmsgetmap.cpp
3  -------------------------
4  begin : December 20 , 2016
5  copyright : (C) 2007 by Marco Hugentobler (original code)
6  (C) 2014 by Alessandro Pasotti (original code)
7  (C) 2016 by David Marteau
8  email : marco dot hugentobler at karto dot baug dot ethz dot ch
9  a dot pasotti at itopen dot it
10  david dot marteau at 3liz dot com
11  ***************************************************************************/
12 
13 /***************************************************************************
14  * *
15  * This program is free software; you can redistribute it and/or modify *
16  * it under the terms of the GNU General Public License as published by *
17  * the Free Software Foundation; either version 2 of the License, or *
18  * (at your option) any later version. *
19  * *
20  ***************************************************************************/
21 #include "qgswmsutils.h"
22 #include "qgswmsgetmap.h"
23 #include "qgswmsrenderer.h"
24 #include "qgswmsserviceexception.h"
25 
26 #include <QImage>
27 
28 namespace QgsWms
29 {
30 
31  void writeGetMap( QgsServerInterface *serverIface, const QgsProject *project,
32  const QgsWmsRequest &request,
33  QgsServerResponse &response )
34  {
35  if ( request.serverParameters().version().isEmpty() )
36  {
38  QStringLiteral( "Please add the value of the VERSION parameter" ), 501 );
39  }
40 
41  // prepare render context
42  QgsWmsRenderContext context( project, serverIface );
51  context.setParameters( request.wmsParameters() );
52 
53  // rendering
54  QgsRenderer renderer( context );
55  std::unique_ptr<QImage> result( renderer.getMap() );
56 
57  if ( result )
58  {
59  const QString format = request.parameters().value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
60  writeImage( response, *result, format, context.imageQuality() );
61  }
62  else
63  {
64  throw QgsException( QStringLiteral( "Failed to compute GetMap image" ) );
65  }
66  }
67 } // namespace QgsWms
Defines a QGIS exception class.
Definition: qgsexception.h:35
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:99
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
virtual QString version() const
Returns VERSION parameter as a string or an empty string if not defined.
QgsServerParameters serverParameters() const
Returns parameters.
QgsServerRequest::Parameters parameters() const
Returns a map of query parameters with keys converted to uppercase.
QgsServerResponse Class defining response interface passed to services QgsService::executeRequest() m...
Map renderer for WMS requests.
QImage * getMap()
Returns the map as an image (or nullptr in case of error).
Exception class for WMS service exceptions.
Rendering context for the WMS renderer.
void setParameters(const QgsWmsParameters &parameters)
Sets WMS parameters.
void setFlag(Flag flag, bool on=true)
Sets or unsets a rendering flag according to the on value.
int imageQuality() const
Returns the image quality to use for rendering according to the current configuration.
Class defining request interface passed to WMS service.
Definition: qgswmsrequest.h:35
const QgsWmsParameters & wmsParameters() const
Returns the parameters interpreted for the WMS service.
Median cut implementation.
void writeImage(QgsServerResponse &response, QImage &img, const QString &formatStr, int imageQuality)
Write image response.
void writeGetMap(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetMap response in DXF format.