QGIS API Documentation 4.1.0-Master (5bf3c20f3c9)
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 "qgsdxfwriter.h"
23#include "qgsmodule.h"
24#include "qgspdfwriter.h"
25#include "qgswmsdescribelayer.h"
27#include "qgswmsgetcontext.h"
30#include "qgswmsgetmap.h"
31#include "qgswmsgetprint.h"
33#include "qgswmsgetstyles.h"
34#include "qgswmsparameters.h"
35#include "qgswmsrequest.h"
37#include "qgswmsutils.h"
38
39#include <QString>
40
41using namespace Qt::StringLiterals;
42
43#define QSTR_COMPARE( str, lit ) ( str.compare( QLatin1String( lit ), Qt::CaseInsensitive ) == 0 )
44
45namespace QgsWms
46{
47
54 class Service : public QgsService
55 {
56 public:
62 Service( const QString &version, QgsServerInterface *serverIface )
63 : mVersion( version )
64 , mServerIface( serverIface )
65 {}
66
67 QString name() const override { return u"WMS"_s; }
68 QString version() const override { return mVersion; }
69
70 void executeRequest( const QgsServerRequest &request, QgsServerResponse &response, const QgsProject *project ) override
71 {
72 // Get the request
73 const QgsWmsRequest wmsRequest( request );
74 const QString req = wmsRequest.wmsParameters().request();
75
76 if ( req.isEmpty() )
77 {
78 throw QgsServiceException( QgsServiceException::OGC_OperationNotSupported, u"Please add or check the value of the REQUEST parameter"_s, 501 );
79 }
80
81 if ( QSTR_COMPARE( req, "GetCapabilities" ) )
82 {
83 writeGetCapabilities( mServerIface, project, wmsRequest, response );
84 }
85 else if ( QSTR_COMPARE( req, "GetProjectSettings" ) )
86 {
87 writeGetCapabilities( mServerIface, project, request, response, true );
88 }
89 else if ( QSTR_COMPARE( req, "GetMap" ) )
90 {
91 if QSTR_COMPARE ( wmsRequest.wmsParameters().formatAsString(), "application/dxf" )
92 {
93 writeAsDxf( mServerIface, project, request, response );
94 }
95 else if QSTR_COMPARE ( wmsRequest.wmsParameters().formatAsString(), "application/pdf" )
96 {
97 writeAsPdf( mServerIface, project, request, response );
98 }
99 else
100 {
101 writeGetMap( mServerIface, project, request, response );
102 }
103 }
104 else if ( QSTR_COMPARE( req, "GetFeatureInfo" ) )
105 {
106 writeGetFeatureInfo( mServerIface, project, request, response );
107 }
108 else if ( QSTR_COMPARE( req, "GetContext" ) )
109 {
110 writeGetContext( mServerIface, project, request, response );
111 }
112 else if ( QSTR_COMPARE( req, "GetSchemaExtension" ) )
113 {
114 writeGetSchemaExtension( response );
115 }
116 else if ( QSTR_COMPARE( req, "GetStyle" ) || QSTR_COMPARE( req, "GetStyles" ) )
117 {
118 writeGetStyles( mServerIface, project, request, response );
119 }
120 else if ( QSTR_COMPARE( req, "DescribeLayer" ) )
121 {
122 writeDescribeLayer( mServerIface, project, request, response );
123 }
124 else if ( QSTR_COMPARE( req, "GetLegendGraphic" ) || QSTR_COMPARE( req, "GetLegendGraphics" ) )
125 {
126 writeGetLegendGraphics( mServerIface, project, request, response );
127 }
128 else if ( QSTR_COMPARE( req, "GetPrint" ) )
129 {
130 if ( mServerIface->serverSettings() && mServerIface->serverSettings()->getPrintDisabled() )
131 {
132 // GetPrint has been disabled
133 QgsDebugError( u"WMS GetPrint request called, but it has been disabled."_s );
134 throw QgsServiceException( QgsServiceException::OGC_OperationNotSupported, u"Request %1 is not supported"_s.arg( req ), 501 );
135 }
136 writeGetPrint( mServerIface, project, request, response );
137 }
138 else
139 {
140 // Operation not supported
141 throw QgsServiceException( QgsServiceException::OGC_OperationNotSupported, u"Request %1 is not supported"_s.arg( req ), 501 );
142 }
143 }
144
145 private:
146 QString mVersion;
147 QgsServerInterface *mServerIface = nullptr;
148 };
149} // namespace QgsWms
150
158{
159 public:
160 void registerSelf( QgsServiceRegistry &registry, QgsServerInterface *serverIface ) override
161 {
162 QgsDebugMsgLevel( u"WMSModule::registerSelf called"_s, 2 );
163 registry.registerService( new QgsWms::Service( QgsWms::implementationVersion(), serverIface ) ); // 1.3.0 default version
164 registry.registerService( new QgsWms::Service( u"1.1.1"_s, serverIface ) ); // second supported version
165 }
166};
167
168
169// Entry points
171{
172 static QgsWmsModule sModule;
173 return &sModule;
174}
176{
177 // Nothing to do
178}
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition qgsproject.h:113
Defines interfaces exposed by QGIS Server and made available to plugins.
Defines requests passed to QgsService classes.
Defines the response interface passed to QgsService.
Defines the service module interface for QGIS server services.
QgsServiceModule()=default
A registry manager for QGIS server services.
void registerService(QgsService *service)
Register a service by its name and version.
QgsService()
Constructor.
Module specialized for WMS service.
Definition qgswms.cpp:158
void registerSelf(QgsServiceRegistry &registry, QgsServerInterface *serverIface) override
Asks the module to register all provided services.
Definition qgswms.cpp:160
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:55
Service(const QString &version, QgsServerInterface *serverIface)
Constructor for WMS service.
Definition qgswms.cpp:62
void executeRequest(const QgsServerRequest &request, QgsServerResponse &response, const QgsProject *project) override
Executes the requests and sets result in QgsServerRequest.
Definition qgswms.cpp:70
QString version() const override
Returns the version of the service.
Definition qgswms.cpp:68
QString name() const override
Returns the name of the service.
Definition qgswms.cpp:67
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:7518
#define QgsDebugMsgLevel(str, level)
Definition qgslogger.h:63
#define QgsDebugError(str)
Definition qgslogger.h:59
#define QSTR_COMPARE(str, lit)
Definition qgswcs.cpp:30
QGISEXTERN QgsServiceModule * QGS_ServiceModule_Init()
Definition qgswms.cpp:170
QGISEXTERN void QGS_ServiceModule_Exit(QgsServiceModule *)
Definition qgswms.cpp:175