@@ -864,8 +864,7 @@ namespace QgsWms
864
864
{
865
865
// Verifying Mandatory parameters
866
866
// The QUERY_LAYERS parameter is Mandatory
867
- QStringList queryLayers = mWmsParameters .queryLayersNickname ();
868
- if ( queryLayers.isEmpty () )
867
+ if ( mWmsParameters .queryLayersNickname ().isEmpty () )
869
868
{
870
869
QString msg = QObject::tr ( " QUERY_LAYERS parameter is required for GetFeatureInfo" );
871
870
throw QgsBadRequestException ( QStringLiteral ( " LayerNotDefined" ), msg );
@@ -883,52 +882,29 @@ namespace QgsWms
883
882
QStringLiteral ( " I/J parameters are required for GetFeatureInfo" ) );
884
883
}
885
884
886
- QgsWmsParameters::Format infoFormat = mWmsParameters .infoFormat ();
885
+ const QgsWmsParameters::Format infoFormat = mWmsParameters .infoFormat ();
887
886
if ( infoFormat == QgsWmsParameters::Format::NONE )
888
887
{
889
888
throw QgsBadRequestException ( QStringLiteral ( " InvalidFormat" ),
890
889
QStringLiteral ( " Invalid INFO_FORMAT parameter" ) );
891
890
}
892
891
893
- // get layers parameters
894
- QList<QgsMapLayer *> layers;
895
- QList<QgsWmsParametersLayer> params = mWmsParameters .layersParameters ();
896
-
897
- // init layer restorer before doing anything
898
- std::unique_ptr<QgsLayerRestorer> restorer;
899
- restorer.reset ( new QgsLayerRestorer ( mNicknameLayers .values () ) );
900
-
901
- // init stylized layers according to LAYERS/STYLES or SLD
902
- QString sld = mWmsParameters .sldBody ();
903
- if ( !sld.isEmpty () )
904
- layers = sldStylizedLayers ( sld );
905
- else
906
- layers = stylizedLayers ( params );
907
-
908
- // add QUERY_LAYERS to list of available layers for more flexibility
909
- for ( const QString &queryLayer : queryLayers )
910
- {
911
- if ( mNicknameLayers .contains ( queryLayer )
912
- && !layers.contains ( mNicknameLayers [queryLayer] ) )
913
- {
914
- layers.append ( mNicknameLayers [queryLayer] );
915
- }
916
- }
917
-
918
892
// create the mapSettings and the output image
919
893
int imageWidth = mWmsParameters .widthAsInt ();
920
894
int imageHeight = mWmsParameters .heightAsInt ();
921
895
922
- // Provide default image width/height values if format is not image
923
896
if ( !( imageWidth && imageHeight ) && ! mWmsParameters .infoFormatIsImage () )
924
897
{
925
898
imageWidth = 10 ;
926
899
imageHeight = 10 ;
927
900
}
928
901
929
- QgsMapSettings mapSettings;
930
902
std::unique_ptr<QImage> outputImage ( createImage ( imageWidth, imageHeight ) );
931
903
904
+ // init layer restorer before doing anything
905
+ std::unique_ptr<QgsLayerRestorer> restorer;
906
+ restorer.reset ( new QgsLayerRestorer ( mContext .layers () ) );
907
+
932
908
// The CRS parameter is considered as mandatory in configureMapSettings
933
909
// but in the case of filter parameter, CRS parameter has not to be mandatory
934
910
bool mandatoryCrsParam = true ;
@@ -938,41 +914,21 @@ namespace QgsWms
938
914
}
939
915
940
916
// configure map settings (background, DPI, ...)
917
+ QgsMapSettings mapSettings;
941
918
configureMapSettings ( outputImage.get (), mapSettings, mandatoryCrsParam );
942
919
943
- QgsMessageLog::logMessage ( " mapSettings.destinationCrs(): " + mapSettings.destinationCrs ().authid () );
944
- QgsMessageLog::logMessage ( " mapSettings.extent(): " + mapSettings.extent ().toString () );
945
- QgsMessageLog::logMessage ( QStringLiteral ( " mapSettings width = %1 height = %2" ).arg ( mapSettings.outputSize ().width () ).arg ( mapSettings.outputSize ().height () ) );
946
- QgsMessageLog::logMessage ( QStringLiteral ( " mapSettings.mapUnitsPerPixel() = %1" ).arg ( mapSettings.mapUnitsPerPixel () ) );
947
-
920
+ // compute scale denominator
948
921
QgsScaleCalculator scaleCalc ( ( outputImage->logicalDpiX () + outputImage->logicalDpiY () ) / 2 , mapSettings.destinationCrs ().mapUnits () );
949
- QgsRectangle mapExtent = mapSettings.extent ();
950
- double scaleDenominator = scaleCalc.calculate ( mapExtent, outputImage->width () );
922
+ const double scaleDenominator = scaleCalc.calculate ( mWmsParameters .bboxAsRectangle (), outputImage->width () );
951
923
952
- // remove unwanted layers (restricted layers, ...)
953
- removeUnwantedLayers ( layers, scaleDenominator );
954
- // remove non identifiable layers
955
- // removeNonIdentifiableLayers( layers );
956
-
957
- for ( QgsMapLayer *layer : layers )
958
- {
959
- checkLayerReadPermissions ( layer );
960
-
961
- for ( const QgsWmsParametersLayer ¶m : params )
962
- {
963
- if ( param.mNickname == layerNickname ( *layer ) )
964
- {
965
- setLayerFilter ( layer, param.mFilter );
966
-
967
- break ;
968
- }
969
- }
924
+ // configure layers
925
+ QgsWmsRenderContext context = mContext ;
926
+ context.setScaleDenominator ( scaleDenominator );
970
927
971
- setLayerAccessControlFilter ( layer );
972
- }
928
+ QList<QgsMapLayer *> layers = context. layersToRender ( );
929
+ configureLayers ( layers, &mapSettings );
973
930
974
- // add layers to map settings (revert order for the rendering)
975
- std::reverse ( layers.begin (), layers.end () );
931
+ // add layers to map settings
976
932
mapSettings.setLayers ( layers );
977
933
978
934
QDomDocument result = featureInfoDocument ( layers, mapSettings, outputImage.get (), version );
0 commit comments