diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp index 4df2b93484a..30d46308f78 100644 --- a/src/server/services/wms/qgswmsrenderer.cpp +++ b/src/server/services/wms/qgswmsrenderer.cpp @@ -139,13 +139,8 @@ namespace QgsWms } else { - context.setScaleFactor( mContext.dotsPerMm() ); - const double mmPerMapUnit = 1 / QgsServerProjectUtils::wmsDefaultMapUnitsPerMm( *mProject ); - context.setMapToPixel( QgsMapToPixel( 1 / ( mmPerMapUnit * context.scaleFactor() ) ) ); - QgsDistanceArea distanceArea; - distanceArea.setSourceCrs( QgsCoordinateReferenceSystem( mWmsParameters.crs() ), mProject->transformContext() ); - distanceArea.setEllipsoid( geoNone() ); - context.setDistanceArea( distanceArea ); + //use default scale settings + configureDefaultRenderContext( context ); } // create image according to context @@ -211,13 +206,7 @@ namespace QgsWms // create context QgsRenderContext context = QgsRenderContext::fromQPainter( painter.get() ); - context.setScaleFactor( mContext.dotsPerMm() ); - const double mmPerMapUnit = 1 / QgsServerProjectUtils::wmsDefaultMapUnitsPerMm( *mProject ); - context.setMapToPixel( QgsMapToPixel( 1 / ( mmPerMapUnit * context.scaleFactor() ) ) ); - QgsDistanceArea distanceArea = QgsDistanceArea(); - distanceArea.setSourceCrs( QgsCoordinateReferenceSystem( mWmsParameters.crs() ), mProject->transformContext() ); - distanceArea.setEllipsoid( geoNone() ); - context.setDistanceArea( distanceArea ); + configureDefaultRenderContext( context ); ctx.context = &context; nodeModel.drawSymbol( settings, &ctx, size.height() / dpmm ); @@ -1387,6 +1376,17 @@ namespace QgsWms } } + void QgsRenderer::configureDefaultRenderContext( QgsRenderContext &context ) + { + context.setScaleFactor( mContext.dotsPerMm() ); + const double mmPerMapUnit = 1 / QgsServerProjectUtils::wmsDefaultMapUnitsPerMm( *mProject ); + context.setMapToPixel( QgsMapToPixel( 1 / ( mmPerMapUnit * context.scaleFactor() ) ) ); + QgsDistanceArea distanceArea = QgsDistanceArea(); + distanceArea.setSourceCrs( QgsCoordinateReferenceSystem( mWmsParameters.crs() ), mProject->transformContext() ); + distanceArea.setEllipsoid( geoNone() ); + context.setDistanceArea( distanceArea ); + } + QDomDocument QgsRenderer::featureInfoDocument( QList &layers, const QgsMapSettings &mapSettings, const QImage *outputImage, const QString &version ) const { diff --git a/src/server/services/wms/qgswmsrenderer.h b/src/server/services/wms/qgswmsrenderer.h index 92be002793b..d91022bc42a 100644 --- a/src/server/services/wms/qgswmsrenderer.h +++ b/src/server/services/wms/qgswmsrenderer.h @@ -195,6 +195,12 @@ namespace QgsWms */ void configureMapSettings( const QPaintDevice *paintDevice, QgsMapSettings &mapSettings, bool mandatoryCrsParam = true ); + /** + * Configures QgsRenderContext according to the WMS parameters and default settings. Used, for example, when no mapSettings are available. + * \param context render context keeping info about the scale + */ + void configureDefaultRenderContext( QgsRenderContext &context ); + QDomDocument featureInfoDocument( QList &layers, const QgsMapSettings &mapSettings, const QImage *outputImage, const QString &version ) const;