Skip to content

Commit 2dfa10f

Browse files
committedDec 2, 2015
Merge pull request #2511 from tomtor/master
Fix non caching behaviour for WFS
2 parents 9e5528b + 2305b90 commit 2dfa10f

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed
 

‎src/providers/wfs/qgswfsprovider.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,11 @@ QgsWFSProvider::QgsWFSProvider( const QString& uri )
123123
setDataSourceUri( bkUri );
124124
}
125125

126-
#if 0 //non-cached mode is broken
127126
mCached = !uri.contains( "BBOX=" );
128127
if ( mCached )
129128
{ //"Cache Features" option; get all features in layer immediately
130129
reloadData();
131130
} //otherwise, defer feature retrieval until layer is first rendered
132-
#endif //0
133-
134-
mCached = true;
135-
reloadData();
136131

137132
if ( mValid )
138133
{
@@ -158,14 +153,15 @@ QgsAbstractFeatureSource* QgsWFSProvider::featureSource() const
158153

159154
void QgsWFSProvider::reloadData()
160155
{
161-
mPendingRetrieval = false;
162-
deleteData();
156+
if (mCached)
157+
deleteData();
163158
delete mSpatialIndex;
164159
mSpatialIndex = new QgsSpatialIndex();
165160
mValid = !getFeature( dataSourceUri() );
166161

167162
if ( !mCached )
168163
emit dataChanged();
164+
mPendingRetrieval = false;
169165
}
170166

171167
void QgsWFSProvider::deleteData()
@@ -285,8 +281,16 @@ QgsFeatureIterator QgsWFSProvider::getFeatures( const QgsFeatureRequest& request
285281
}
286282

287283
}
288-
#endif
289284
return new QgsWFSFeatureIterator( new QgsWFSFeatureSource( this ), true, request );
285+
#else
286+
QgsRectangle rect = request.filterRect();
287+
if ( !( request.flags() & QgsFeatureRequest::NoGeometry ) && !rect.isEmpty() )
288+
{
289+
deleteData();
290+
reloadData();
291+
}
292+
return new QgsWFSFeatureIterator( new QgsWFSFeatureSource( this ), true, request );
293+
#endif
290294
}
291295

292296
int QgsWFSProvider::getFeature( const QString& uri )
@@ -1720,9 +1724,11 @@ void QgsWFSProvider::extendExtent( const QgsRectangle &extent )
17201724

17211725
QgsRectangle r( mExtent.intersect( &extent ) );
17221726

1723-
if ( mGetExtent.contains( r ) )
1727+
if ( (extent == mGetExtent || mFeatureCount == 0 || mFeatureCount % 500 != 0)
1728+
&& mGetExtent.contains( r ) )
17241729
return;
17251730

1731+
#if 0
17261732
if ( mGetExtent.isEmpty() )
17271733
{
17281734
mGetExtent = r;
@@ -1738,6 +1744,9 @@ void QgsWFSProvider::extendExtent( const QgsRectangle &extent )
17381744
{
17391745
mGetExtent.combineExtentWith( &r );
17401746
}
1747+
#else
1748+
mGetExtent = extent;
1749+
#endif
17411750

17421751
setDataSourceUri( dataSourceUri().replace( QRegExp( "BBOX=[^&]*" ),
17431752
QString( "BBOX=%1,%2,%3,%4" )

0 commit comments

Comments
 (0)
Please sign in to comment.