mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-22 00:06:57 -04:00
[FEATURE]: possibility to set MaxWidth and MaxHeight for GetMap request
This commit is contained in:
parent
f2443737e0
commit
fad13f407d
@ -229,6 +229,20 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
|
||||
bool addWktGeometry = QgsProject::instance()->readBoolEntry( "WMSAddWktGeometry", "/" );
|
||||
mAddWktGeometryCheckBox->setChecked( addWktGeometry );
|
||||
|
||||
//WMS maxWidth / maxHeight
|
||||
mMaxWidthLineEdit->setValidator( new QIntValidator( mMaxWidthLineEdit ) );
|
||||
int maxWidth = QgsProject::instance()->readNumEntry( "WMSMaxWidth", "/", -1 );
|
||||
if ( maxWidth != -1 )
|
||||
{
|
||||
mMaxWidthLineEdit->setText( QString::number( maxWidth ) );
|
||||
}
|
||||
mMaxHeightLineEdit->setValidator( new QIntValidator( mMaxHeightLineEdit ) );
|
||||
int maxHeight = QgsProject::instance()->readNumEntry( "WMSMaxHeight", "/", -1 );
|
||||
if ( maxHeight != -1 )
|
||||
{
|
||||
mMaxHeightLineEdit->setText( QString::number( maxHeight ) );
|
||||
}
|
||||
|
||||
QStringList wfsLayerIdList = QgsProject::instance()->readListEntry( "WFSLayers", "/" );
|
||||
|
||||
twWFSLayers->setColumnCount( 2 );
|
||||
@ -460,6 +474,25 @@ void QgsProjectProperties::apply()
|
||||
|
||||
QgsProject::instance()->writeEntry( "WMSAddWktGeometry", "/", mAddWktGeometryCheckBox->isChecked() );
|
||||
|
||||
QString maxWidthText = mMaxWidthLineEdit->text();
|
||||
if ( maxWidthText.isEmpty() )
|
||||
{
|
||||
QgsProject::instance()->removeEntry( "WMSMaxWidth", "/" );
|
||||
}
|
||||
else
|
||||
{
|
||||
QgsProject::instance()->writeEntry( "WMSMaxWidth", "/", maxWidthText.toInt() );
|
||||
}
|
||||
QString maxHeightText = mMaxHeightLineEdit->text();
|
||||
if ( maxHeightText.isEmpty() )
|
||||
{
|
||||
QgsProject::instance()->removeEntry( "WMSMaxHeight", "/" );
|
||||
}
|
||||
else
|
||||
{
|
||||
QgsProject::instance()->writeEntry( "WMSMaxHeight", "/", maxHeightText.toInt() );
|
||||
}
|
||||
|
||||
QStringList wfsLayerList;
|
||||
for ( int i = 0; i < twWFSLayers->rowCount(); i++ )
|
||||
{
|
||||
|
@ -31,6 +31,8 @@ QgsConfigParser::QgsConfigParser()
|
||||
: mFallbackParser( 0 )
|
||||
, mScaleDenominator( 0 )
|
||||
, mOutputUnits( QgsMapRenderer::Millimeters )
|
||||
, mMaxWidth( -1 )
|
||||
, mMaxHeight( -1 )
|
||||
{
|
||||
setDefaultLegendSettings();
|
||||
mSelectionColor = QColor( 255, 255, 0 ); //yellow opaque is default selection color
|
||||
|
@ -121,6 +121,9 @@ class QgsConfigParser
|
||||
QColor selectionColor() const { return mSelectionColor; }
|
||||
void setSelectionColor( const QColor& c ) { mSelectionColor = c; }
|
||||
|
||||
int maxWidth() const { return mMaxWidth; }
|
||||
int maxHeight() const { return mMaxHeight; }
|
||||
|
||||
protected:
|
||||
/**Parser to forward not resolved requests (e.g. SLD parser based on user request might have a fallback parser with admin configuration)*/
|
||||
QgsConfigParser* mFallbackParser;
|
||||
@ -160,6 +163,10 @@ class QgsConfigParser
|
||||
|
||||
QColor mSelectionColor;
|
||||
|
||||
//maximum width/height for the GetMap request. Disabled by default (-1)
|
||||
int mMaxWidth;
|
||||
int mMaxHeight;
|
||||
|
||||
/**Transforms layer extent to epsg 4326 and appends ExGeographicBoundingBox and BoundingBox elements to the layer element*/
|
||||
void appendLayerBoundingBoxes( QDomElement& layerElem, QDomDocument& doc, const QgsRectangle& layerExtent, const QgsCoordinateReferenceSystem& layerCRS ) const;
|
||||
|
||||
|
@ -45,6 +45,7 @@ QgsProjectParser::QgsProjectParser( QDomDocument* xmlDoc, const QString& filePat
|
||||
mOutputUnits = QgsMapRenderer::Millimeters;
|
||||
setLegendParametersFromProject();
|
||||
setSelectionColor();
|
||||
setMaxWidthHeight();
|
||||
|
||||
//accelerate search for layers and groups
|
||||
if ( mXMLDoc )
|
||||
@ -1439,6 +1440,27 @@ void QgsProjectParser::serviceCapabilities( QDomElement& parentElement, QDomDocu
|
||||
}
|
||||
|
||||
serviceElem.appendChild( contactInfoElem );
|
||||
|
||||
//MaxWidth / MaxHeight for WMS 1.3
|
||||
QString version = doc.documentElement().attribute( "version" );
|
||||
if ( version != "1.1.1" )
|
||||
{
|
||||
if ( mMaxWidth != -1 )
|
||||
{
|
||||
QDomElement maxWidthElem = doc.createElement( "MaxWidth" );
|
||||
QDomText maxWidthText = doc.createTextNode( QString::number( mMaxWidth ) );
|
||||
maxWidthElem.appendChild( maxWidthText );
|
||||
serviceElem.appendChild( maxWidthElem );
|
||||
}
|
||||
if ( mMaxHeight != -1 )
|
||||
{
|
||||
QDomElement maxHeightElem = doc.createElement( "MaxHeight" );
|
||||
QDomText maxHeightText = doc.createTextNode( QString::number( mMaxHeight ) );
|
||||
maxHeightElem.appendChild( maxHeightText );
|
||||
serviceElem.appendChild( maxHeightElem );
|
||||
}
|
||||
}
|
||||
|
||||
parentElement.appendChild( serviceElem );
|
||||
}
|
||||
|
||||
@ -1541,6 +1563,31 @@ void QgsProjectParser::setSelectionColor()
|
||||
mSelectionColor = QColor( red, green, blue, alpha );
|
||||
}
|
||||
|
||||
void QgsProjectParser::setMaxWidthHeight()
|
||||
{
|
||||
if ( mXMLDoc )
|
||||
{
|
||||
QDomElement qgisElem = mXMLDoc->documentElement();
|
||||
if ( !qgisElem.isNull() )
|
||||
{
|
||||
QDomElement propertiesElem = qgisElem.firstChildElement( "properties" );
|
||||
if ( !propertiesElem.isNull() )
|
||||
{
|
||||
QDomElement maxWidthElem = propertiesElem.firstChildElement( "WMSMaxWidth" );
|
||||
if ( !maxWidthElem.isNull() )
|
||||
{
|
||||
mMaxWidth = maxWidthElem.text().toInt();
|
||||
}
|
||||
QDomElement maxHeightElem = propertiesElem.firstChildElement( "WMSMaxHeight" );
|
||||
if ( !maxHeightElem.isNull() )
|
||||
{
|
||||
mMaxHeight = maxHeightElem.text().toInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const QgsCoordinateReferenceSystem& QgsProjectParser::projectCRS() const
|
||||
{
|
||||
//mapcanvas->destinationsrs->spatialrefsys->authid
|
||||
|
@ -167,6 +167,8 @@ class QgsProjectParser: public QgsConfigParser
|
||||
|
||||
/**Reads selection color from project and sets it to QgsConfigParser::mSelectionColor*/
|
||||
void setSelectionColor();
|
||||
/**Reads maxWidth / maxHeight from project and sets it to QgsConfigParser::mMaxWidth / mMaxHeight*/
|
||||
void setMaxWidthHeight();
|
||||
};
|
||||
|
||||
#endif // QGSPROJECTPARSER_H
|
||||
|
@ -669,6 +669,10 @@ QImage* QgsWMSServer::printCompositionToImage( QgsComposition* c ) const
|
||||
|
||||
QImage* QgsWMSServer::getMap()
|
||||
{
|
||||
if ( !checkMaximumWidthHeight() )
|
||||
{
|
||||
throw QgsMapServiceException( "Size error", "The requested map size is too large" );
|
||||
}
|
||||
QStringList layersList, stylesList, layerIdList;
|
||||
QImage* theImage = initializeRendering( layersList, stylesList, layerIdList );
|
||||
|
||||
@ -1994,3 +1998,31 @@ void QgsWMSServer::clearFeatureSelections( const QStringList& layerIds ) const
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
bool QgsWMSServer::checkMaximumWidthHeight() const
|
||||
{
|
||||
//test if maxWidth / maxHeight set and WIDTH / HEIGHT parameter is in the range
|
||||
if ( mConfigParser->maxWidth() != -1 )
|
||||
{
|
||||
QMap<QString, QString>::const_iterator widthIt = mParameterMap.find( "WIDTH" );
|
||||
if ( widthIt != mParameterMap.constEnd() )
|
||||
{
|
||||
if ( widthIt->toInt() > mConfigParser->maxWidth() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( mConfigParser->maxHeight() != -1 )
|
||||
{
|
||||
QMap<QString, QString>::const_iterator heightIt = mParameterMap.find( "HEIGHT" );
|
||||
if ( heightIt != mParameterMap.constEnd() )
|
||||
{
|
||||
if ( heightIt->toInt() > mConfigParser->maxHeight() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -163,6 +163,10 @@ class QgsWMSServer
|
||||
|
||||
void appendFormats( QDomDocument &doc, QDomElement &elem, const QStringList &formats );
|
||||
|
||||
/**Checks WIDTH/HEIGHT values agains MaxWidth and MaxHeight
|
||||
@return true if width/height values are okay*/
|
||||
bool checkMaximumWidthHeight() const;
|
||||
|
||||
/**Map containing the WMS parameters*/
|
||||
QMap<QString, QString> mParameterMap;
|
||||
QgsConfigParser* mConfigParser;
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>676</width>
|
||||
<height>522</height>
|
||||
<width>571</width>
|
||||
<height>448</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -368,7 +368,7 @@
|
||||
<string>OWS Server</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0" rowspan="2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
@ -377,13 +377,13 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>616</width>
|
||||
<height>538</height>
|
||||
<y>-271</y>
|
||||
<width>526</width>
|
||||
<height>668</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="grpOWSServiceCapabilities">
|
||||
<property name="title">
|
||||
<string>Service Capabilitities</string>
|
||||
@ -483,7 +483,7 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="grpWMSCapabilities">
|
||||
<property name="title">
|
||||
<string>WMS Capabilitities</string>
|
||||
@ -641,7 +641,31 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<item row="2" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="mMaxWidthLabel">
|
||||
<property name="text">
|
||||
<string>Maximum width</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="mMaxWidthLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="mMaxHeightLabel">
|
||||
<property name="text">
|
||||
<string>Maximum height</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="mMaxHeightLineEdit"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QGroupBox" name="grpWFSCapabilities">
|
||||
<property name="title">
|
||||
<string>WFS Capabilitities</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user