Skip to content

Commit 7c1d397

Browse files
committed
[Server] WMS GetPrint refactoring
1 parent bb61db2 commit 7c1d397

File tree

12 files changed

+1043
-220
lines changed

12 files changed

+1043
-220
lines changed

src/server/services/wms/qgswmsparameters.cpp

+130-2
Original file line numberDiff line numberDiff line change
@@ -1271,8 +1271,8 @@ namespace QgsWms
12711271

12721272
QStringList QgsWmsParameters::allStyles() const
12731273
{
1274-
QStringList style = value( ParameterName::STYLE ).toString().split( ",", QString::SkipEmptyParts );
1275-
QStringList styles = value( ParameterName::STYLES ).toString().split( "," );
1274+
QStringList style = toStringList( ParameterName::STYLE );
1275+
QStringList styles = toStringList( ParameterName::STYLES );
12761276
return style << styles;
12771277
}
12781278

@@ -1417,6 +1417,134 @@ namespace QgsWms
14171417
return toColor( ParameterName::BGCOLOR );
14181418
}
14191419

1420+
QgsWmsParametersComposerMap QgsWmsParameters::composerMapParameters( int mapId ) const
1421+
{
1422+
QgsWmsParametersComposerMap param;
1423+
param.mId = mapId;
1424+
1425+
QString pMapId = "MAP" + QString::number( mapId );
1426+
1427+
//map extent is mandatory
1428+
if ( !mRequestParameters.contains( pMapId + ":EXTENT" ) )
1429+
return param;
1430+
1431+
QVariant extentValue( mRequestParameters[pMapId + ":EXTENT"] );
1432+
QString extentStr = extentValue.toString();
1433+
1434+
if ( extentStr.isEmpty() )
1435+
return param;
1436+
1437+
QgsRectangle extent;
1438+
QStringList corners = extentStr.split( "," );
1439+
1440+
if ( corners.size() == 4 )
1441+
{
1442+
double d[4];
1443+
bool ok;
1444+
1445+
for ( int i = 0; i < 4; i++ )
1446+
{
1447+
corners[i].replace( QLatin1String( " " ), QLatin1String( "+" ) );
1448+
d[i] = corners[i].toDouble( &ok );
1449+
if ( !ok )
1450+
{
1451+
raiseError( pMapId + "BBOX ('" + extentStr + "') cannot be converted into a rectangle" );
1452+
}
1453+
}
1454+
1455+
extent = QgsRectangle( d[0], d[1], d[2], d[3] );
1456+
}
1457+
else
1458+
{
1459+
raiseError( pMapId + "BBOX ('" + extentStr + "') cannot be converted into a rectangle" );
1460+
}
1461+
1462+
param.mHasExtent = true;
1463+
param.mExtent = extent;
1464+
1465+
// scale
1466+
if ( mRequestParameters.contains( pMapId + ":SCALE" ) )
1467+
{
1468+
param.mScale = composerMapParamToDouble( mapId, "SCALE", param.mScale );
1469+
}
1470+
1471+
// rotation
1472+
if ( mRequestParameters.contains( pMapId + ":ROTATION" ) )
1473+
{
1474+
param.mRotation = composerMapParamToDouble( mapId, "ROTATION", param.mRotation );
1475+
}
1476+
1477+
//grid space x / y
1478+
if ( mRequestParameters.contains( pMapId + ":GRID_INTERVAL_X" ) && mRequestParameters.contains( pMapId + ":GRID_INTERVAL_Y" ) )
1479+
{
1480+
param.mGridX = composerMapParamToDouble( mapId, "GRID_INTERVAL_X", param.mGridX );
1481+
param.mGridY = composerMapParamToDouble( mapId, "GRID_INTERVAL_Y", param.mGridY );
1482+
}
1483+
1484+
//layers
1485+
QList<QgsWmsParametersLayer> parameters;
1486+
QStringList layers = composerMapParamToStringList( mapId, "LAYERS", ',' );
1487+
QStringList styles = composerMapParamToStringList( mapId, "STYLES", ',' );
1488+
for ( int i = 0; i < layers.size(); i++ )
1489+
{
1490+
QString layer = layers[i];
1491+
QgsWmsParametersLayer param;
1492+
param.mNickname = layer;
1493+
1494+
if ( i < styles.count() )
1495+
param.mStyle = styles[i];
1496+
1497+
parameters.append( param );
1498+
}
1499+
param.mLayers = parameters;
1500+
1501+
return param;
1502+
}
1503+
1504+
double QgsWmsParameters::composerMapParamToDouble( int mapId, QString name, double defaultVal ) const
1505+
{
1506+
QString pMapId = "MAP" + QString::number( mapId );
1507+
QString paramName = pMapId + ":" + name;
1508+
double val = defaultVal;
1509+
1510+
if ( mRequestParameters.contains( paramName ) )
1511+
{
1512+
QVariant value( mRequestParameters[paramName] );
1513+
QString valStr = value.toString();
1514+
1515+
if ( ! valStr.isEmpty() && value.canConvert( QVariant::Double ) )
1516+
{
1517+
bool ok;
1518+
val = value.toDouble( &ok );
1519+
1520+
if ( !ok )
1521+
{
1522+
QString msg = paramName + " ('" + valStr + "') cannot be converted into a double";
1523+
raiseError( msg );
1524+
}
1525+
1526+
}
1527+
}
1528+
1529+
return val;
1530+
}
1531+
1532+
QStringList QgsWmsParameters::composerMapParamToStringList( int mapId, QString name, char delimiter ) const
1533+
{
1534+
QString pMapId = "MAP" + QString::number( mapId );
1535+
QString paramName = pMapId + ":" + name;
1536+
1537+
QString valStr;
1538+
1539+
if ( mRequestParameters.contains( paramName ) )
1540+
{
1541+
QVariant value( mRequestParameters[paramName] );
1542+
valStr = value.toString();
1543+
}
1544+
1545+
return valStr.split( delimiter, QString::SkipEmptyParts );
1546+
}
1547+
14201548
QString QgsWmsParameters::name( ParameterName name ) const
14211549
{
14221550
const QMetaEnum metaEnum( QMetaEnum::fromType<ParameterName>() );

src/server/services/wms/qgswmsparameters.h

+44
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,18 @@ namespace QgsWms
5959
QColor mBufferColor;
6060
};
6161

62+
struct QgsWmsParametersComposerMap
63+
{
64+
int mId; // composer map id
65+
bool mHasExtent; // does the request contains extent for this composer map
66+
QgsRectangle mExtent; // the request extent for this composer map
67+
float mScale = -1;
68+
float mRotation;
69+
float mGridX = 0;
70+
float mGridY = 0;
71+
QList<QgsWmsParametersLayer> mLayers; // list of layers fr this composer map
72+
};
73+
6274
class QgsWmsParameters
6375
{
6476
Q_GADGET
@@ -767,6 +779,38 @@ namespace QgsWms
767779
*/
768780
int dpiAsInt() const;
769781

782+
/** Returns the requested parameters for a composer map parameter.
783+
* An exception is raised if parameters are defined and cannot be
784+
* converted like EXTENT, SCALE, ROTATION, GRID_INTERVAL_X and
785+
* GRID_INTERVAL_Y.
786+
* \param mapId the composer map id.
787+
* \returns parameters for the composer map.
788+
* \throws QgsBadRequestException
789+
*/
790+
QgsWmsParametersComposerMap composerMapParameters( int mapId ) const;
791+
792+
/** Returns a composer map parameter as a double or the defaultVal.
793+
* An exception is raised if the parameter is defined and cannot
794+
* be converted. Made for specific composer map SCALE, ROTATION,
795+
* GRID_INTERVAL_X and GRID_INTERVAL_Y parameter.
796+
* \param mapId the composer map id.
797+
* \param name the parameter's name.
798+
* \param defaultVal the default value for this parameter.
799+
* \returns parameter as double
800+
* \throws QgsBadRequestException
801+
*/
802+
double composerMapParamToDouble( int mapId, QString name, double defaultVal ) const;
803+
804+
/** Returns a composer map parameter as a string list or an empty
805+
* list. Made for specific composer map LAYERS and STYLES
806+
* parameter.
807+
* \param mapId the composer map id.
808+
* \param name the parameter's name.
809+
* \param delimiter the delimiter to split the list.
810+
* \returns parameter as a string list
811+
*/
812+
QStringList composerMapParamToStringList( int mapId, QString name, char delimiter ) const;
813+
770814
private:
771815
QString name( ParameterName name ) const;
772816
void raiseError( ParameterName name ) const;

0 commit comments

Comments
 (0)