QGIS API Documentation 3.41.0-Master (cea29feecf2)
Loading...
Searching...
No Matches
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
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
virtual QgsServerSettings * serverSettings()=0
Returns the server settings.
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
QgsServerResponse Class defining response interface passed to services QgsService::executeRequest() m...
bool getPrintDisabled() const
Returns true if WMS GetPrint request is disabled and the project's reading flag QgsProject::ReadFlag:...
Class defining the service module interface for QGIS server services.
QgsServiceRegistry Class defining the registry manager for QGIS server services.
void registerService(QgsService *service)
Register a service by its name and version.
QgsService Class defining interfaces for QGIS server services.
Definition qgsservice.h:39
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.
Class defining request interface 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
Execute the requests and set result in QgsServerRequest.
Definition qgswms.cpp:67
QString version() const override
Definition qgswms.cpp:65
QString name() const override
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:6615
#define QgsDebugMsgLevel(str, level)
Definition qgslogger.h:39
#define QgsDebugError(str)
Definition qgslogger.h:38
#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