QGIS API Documentation 3.43.0-Master (32433f7016e)
qgswms.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgswms.cpp
3 -------------------------
4 begin : December 20 , 2016
5 copyright : (C) 2007 by Marco Hugentobler ( parts from qgswmshandler)
6 (C) 2014 by Alessandro Pasotti ( parts from qgswmshandler)
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
22#include "qgsmodule.h"
23#include "qgsdxfwriter.h"
24#include "qgspdfwriter.h"
27#include "qgswmsgetmap.h"
28#include "qgswmsgetstyles.h"
29#include "qgswmsgetcontext.h"
31#include "qgswmsgetprint.h"
33#include "qgswmsdescribelayer.h"
35#include "qgswmsparameters.h"
36#include "qgswmsrequest.h"
37#include "qgswmsutils.h"
38
39#define QSTR_COMPARE( str, lit ) \
40 ( str.compare( QLatin1String( lit ), Qt::CaseInsensitive ) == 0 )
41
42namespace QgsWms
43{
44
51 class Service : public QgsService
52 {
53 public:
59 Service( const QString &version, QgsServerInterface *serverIface )
60 : mVersion( version )
61 , mServerIface( serverIface )
62 {}
63
64 QString name() const override { return QStringLiteral( "WMS" ); }
65 QString version() const override { return mVersion; }
66
67 void executeRequest( const QgsServerRequest &request, QgsServerResponse &response, const QgsProject *project ) override
68 {
69 // Get the request
70 const QgsWmsRequest wmsRequest( request );
71 const QString req = wmsRequest.wmsParameters().request();
72
73 if ( req.isEmpty() )
74 {
75 throw QgsServiceException( QgsServiceException::OGC_OperationNotSupported, QStringLiteral( "Please add or check the value of the REQUEST parameter" ), 501 );
76 }
77
78 if ( QSTR_COMPARE( req, "GetCapabilities" ) )
79 {
80 writeGetCapabilities( mServerIface, project, wmsRequest, response );
81 }
82 else if ( QSTR_COMPARE( req, "GetProjectSettings" ) )
83 {
84 writeGetCapabilities( mServerIface, project, request, response, true );
85 }
86 else if ( QSTR_COMPARE( req, "GetMap" ) )
87 {
88 if QSTR_COMPARE ( wmsRequest.wmsParameters().formatAsString(), "application/dxf" )
89 {
90 writeAsDxf( mServerIface, project, request, response );
91 }
92 else if QSTR_COMPARE ( wmsRequest.wmsParameters().formatAsString(), "application/pdf" )
93 {
94 writeAsPdf( mServerIface, project, request, response );
95 }
96 else
97 {
98 writeGetMap( mServerIface, project, request, response );
99 }
100 }
101 else if ( QSTR_COMPARE( req, "GetFeatureInfo" ) )
102 {
103 writeGetFeatureInfo( mServerIface, project, request, response );
104 }
105 else if ( QSTR_COMPARE( req, "GetContext" ) )
106 {
107 writeGetContext( mServerIface, project, request, response );
108 }
109 else if ( QSTR_COMPARE( req, "GetSchemaExtension" ) )
110 {
111 writeGetSchemaExtension( response );
112 }
113 else if ( QSTR_COMPARE( req, "GetStyle" ) || QSTR_COMPARE( req, "GetStyles" ) )
114 {
115 writeGetStyles( mServerIface, project, request, response );
116 }
117 else if ( QSTR_COMPARE( req, "DescribeLayer" ) )
118 {
119 writeDescribeLayer( mServerIface, project, request, response );
120 }
121 else if ( QSTR_COMPARE( req, "GetLegendGraphic" ) || QSTR_COMPARE( req, "GetLegendGraphics" ) )
122 {
123 writeGetLegendGraphics( mServerIface, project, request, response );
124 }
125 else if ( QSTR_COMPARE( req, "GetPrint" ) )
126 {
127 if ( mServerIface->serverSettings() && mServerIface->serverSettings()->getPrintDisabled() )
128 {
129 // GetPrint has been disabled
130 QgsDebugError( QStringLiteral( "WMS GetPrint request called, but it has been disabled." ) );
131 throw QgsServiceException( QgsServiceException::OGC_OperationNotSupported, QStringLiteral( "Request %1 is not supported" ).arg( req ), 501 );
132 }
133 writeGetPrint( mServerIface, project, request, response );
134 }
135 else
136 {
137 // Operation not supported
138 throw QgsServiceException( QgsServiceException::OGC_OperationNotSupported, QStringLiteral( "Request %1 is not supported" ).arg( req ), 501 );
139 }
140 }
141
142 private:
143 QString mVersion;
144 QgsServerInterface *mServerIface = nullptr;
145 };
146} // namespace QgsWms
147
155{
156 public:
157 void registerSelf( QgsServiceRegistry &registry, QgsServerInterface *serverIface ) override
158 {
159 QgsDebugMsgLevel( QStringLiteral( "WMSModule::registerSelf called" ), 2 );
160 registry.registerService( new QgsWms::Service( QgsWms::implementationVersion(), serverIface ) ); // 1.3.0 default version
161 registry.registerService( new QgsWms::Service( QStringLiteral( "1.1.1" ), serverIface ) ); // second supported version
162 }
163};
164
165
166// Entry points
168{
169 static QgsWmsModule sModule;
170 return &sModule;
171}
173{
174 // Nothing to do
175}
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition qgsproject.h:107
Defines interfaces exposed by QGIS Server and made available to plugins.
virtual QgsServerSettings * serverSettings()=0
Returns the server settings.
Defines requests passed to QgsService classes.
Defines the response interface passed to QgsService.
bool getPrintDisabled() const
Returns true if WMS GetPrint request is disabled and the project's reading flag QgsProject::ReadFlag:...
Defines the service module interface for QGIS server services.
A registry manager for QGIS server services.
void registerService(QgsService *service)
Register a service by its name and version.
Defines interfaces for QGIS server services.
Definition qgsservice.h:38
Module specialized for WMS service.
Definition qgswms.cpp:155
void registerSelf(QgsServiceRegistry &registry, QgsServerInterface *serverIface) override
Asks the module to register all provided services.
Definition qgswms.cpp:157
Exception class for WMS service exceptions.
QString formatAsString() const
Returns FORMAT parameter as a string.
QString request() const override
Returns REQUEST parameter as a string or an empty string if not defined.
Defines request interfaces passed to WMS service.
const QgsWmsParameters & wmsParameters() const
Returns the parameters interpreted for the WMS service.
OGC web service specialized for WMS.
Definition qgswms.cpp:52
Service(const QString &version, QgsServerInterface *serverIface)
Constructor for WMS service.
Definition qgswms.cpp:59
void executeRequest(const QgsServerRequest &request, QgsServerResponse &response, const QgsProject *project) override
Executes the requests and sets result in QgsServerRequest.
Definition qgswms.cpp:67
QString version() const override
Returns the version of the service.
Definition qgswms.cpp:65
QString name() const override
Returns the name of the service.
Definition qgswms.cpp:64
Median cut implementation.
void writeGetCapabilities(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response, bool projectSettings)
Output GetCapabilities response.
void writeAsPdf(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetMap response in PDF format.
void writeDescribeLayer(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetMap response in DXF format.
void writeGetMap(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetMap response in DXF format.
void writeGetLegendGraphics(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetLegendGRaphics response.
void writeGetSchemaExtension(QgsServerResponse &response)
Output GetSchemaExtension response.
void writeAsDxf(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetMap response in DXF format.
QString implementationVersion()
Returns the highest version supported by this implementation.
void writeGetContext(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetContext response.
void writeGetPrint(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetPrint response.
void writeGetStyles(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetStyles response.
void writeGetFeatureInfo(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetFeatureInfo response.
#define QGISEXTERN
Definition qgis.h:6833
#define QgsDebugMsgLevel(str, level)
Definition qgslogger.h:41
#define QgsDebugError(str)
Definition qgslogger.h:40
#define QSTR_COMPARE(str, lit)
Definition qgswcs.cpp:26
QGISEXTERN QgsServiceModule * QGS_ServiceModule_Init()
Definition qgswms.cpp:167
QGISEXTERN void QGS_ServiceModule_Exit(QgsServiceModule *)
Definition qgswms.cpp:172