Skip to content

Commit 394a80c

Browse files
committed
Consider number of layers in a project can be higher than 100 for caching
1 parent fd8c92f commit 394a80c

6 files changed

+32
-0
lines changed

src/mapserver/qgsconfigcache.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ QgsWMSConfigParser* QgsConfigCache::wmsConfiguration( const QString& filePath, c
101101
p = new QgsWMSProjectParser( doc, filePath );
102102
}
103103

104+
int numberOfLayers = p->nLayers();
105+
if ( numberOfLayers > 100 )
106+
{
107+
mWMSConfigCache.setMaxCost( numberOfLayers );
108+
}
109+
104110
mWMSConfigCache.insert( filePath, p );
105111
mFileSystemWatcher.addPath( filePath );
106112
return p;

src/mapserver/qgssldconfigparser.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,20 @@ QList< QPair< QString, QgsLayerCoordinateTransform > > QgsSLDConfigParser::layer
702702
return QList< QPair< QString, QgsLayerCoordinateTransform > >();
703703
}
704704

705+
int QgsSLDConfigParser::nLayers() const
706+
{
707+
if ( mXMLDoc )
708+
{
709+
QDomNode sldNode = mXMLDoc->documentElement();
710+
if ( !sldNode.isNull() )
711+
{
712+
QDomNodeList layerNodeList = sldNode.toElement().elementsByTagName( "UserLayer" );
713+
return layerNodeList.size();
714+
}
715+
}
716+
return 0;
717+
}
718+
705719
QList<QDomElement> QgsSLDConfigParser::findNamedLayerElements( const QString& layerName ) const
706720
{
707721
QList<QDomElement> resultList;

src/mapserver/qgssldconfigparser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ class QgsSLDConfigParser: public QgsWMSConfigParser
114114

115115
QList< QPair< QString, QgsLayerCoordinateTransform > > layerCoordinateTransforms() const;
116116

117+
int nLayers() const;
118+
117119
private:
118120

119121
/**SLD as dom document*/

src/mapserver/qgswmsconfigparser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ class QgsWMSConfigParser
105105
virtual void addExternalGMLData( const QString& layerName, QDomDocument* gmlDoc ) = 0;
106106

107107
virtual QList< QPair< QString, QgsLayerCoordinateTransform > > layerCoordinateTransforms() const = 0;
108+
109+
virtual int nLayers() const = 0;
110+
108111
#if 0
109112
/**List of GML datasets passed outside SLD (e.g. in a SOAP request). Key of the map is the layer name*/
110113
QMap<QString, QDomDocument*> mExternalGMLDatasets;

src/mapserver/qgswmsprojectparser.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,6 +1638,11 @@ void QgsWMSProjectParser::drawOverlays( QPainter* p, int dpi, int width, int hei
16381638
}
16391639
}
16401640

1641+
int QgsWMSProjectParser::nLayers() const
1642+
{
1643+
return mProjectParser.numberOfLayers();
1644+
}
1645+
16411646
QDomElement QgsWMSProjectParser::composerByName( const QString& composerName ) const
16421647
{
16431648
QDomElement composerElem;

src/mapserver/qgswmsprojectparser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ class QgsWMSProjectParser: public QgsWMSConfigParser
9797
/**Draw text annotation items from the QGIS projectfile*/
9898
void drawOverlays( QPainter* p, int dpi, int width, int height ) const;
9999

100+
int nLayers() const;
101+
100102
private:
101103
QgsServerProjectParser mProjectParser;
102104

0 commit comments

Comments
 (0)