@@ -123,16 +123,11 @@ QgsWFSProvider::QgsWFSProvider( const QString& uri )
123
123
setDataSourceUri ( bkUri );
124
124
}
125
125
126
- #if 0 //non-cached mode is broken
127
126
mCached = !uri.contains ( " BBOX=" );
128
127
if ( mCached )
129
128
{ // "Cache Features" option; get all features in layer immediately
130
129
reloadData ();
131
130
} // otherwise, defer feature retrieval until layer is first rendered
132
- #endif // 0
133
-
134
- mCached = true ;
135
- reloadData ();
136
131
137
132
if ( mValid )
138
133
{
@@ -158,14 +153,15 @@ QgsAbstractFeatureSource* QgsWFSProvider::featureSource() const
158
153
159
154
void QgsWFSProvider::reloadData ()
160
155
{
161
- mPendingRetrieval = false ;
162
- deleteData ();
156
+ if ( mCached )
157
+ deleteData ();
163
158
delete mSpatialIndex ;
164
159
mSpatialIndex = new QgsSpatialIndex ();
165
160
mValid = !getFeature ( dataSourceUri () );
166
161
167
162
if ( !mCached )
168
163
emit dataChanged ();
164
+ mPendingRetrieval = false ;
169
165
}
170
166
171
167
void QgsWFSProvider::deleteData ()
@@ -285,8 +281,16 @@ QgsFeatureIterator QgsWFSProvider::getFeatures( const QgsFeatureRequest& request
285
281
}
286
282
287
283
}
288
- #endif
289
284
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
290
294
}
291
295
292
296
int QgsWFSProvider::getFeature ( const QString& uri )
@@ -1720,9 +1724,11 @@ void QgsWFSProvider::extendExtent( const QgsRectangle &extent )
1720
1724
1721
1725
QgsRectangle r ( mExtent .intersect ( &extent ) );
1722
1726
1723
- if ( mGetExtent .contains ( r ) )
1727
+ if ( (extent == mGetExtent || mFeatureCount == 0 || mFeatureCount % 500 != 0 )
1728
+ && mGetExtent .contains ( r ) )
1724
1729
return ;
1725
1730
1731
+ #if 0
1726
1732
if ( mGetExtent.isEmpty() )
1727
1733
{
1728
1734
mGetExtent = r;
@@ -1738,6 +1744,9 @@ void QgsWFSProvider::extendExtent( const QgsRectangle &extent )
1738
1744
{
1739
1745
mGetExtent.combineExtentWith( &r );
1740
1746
}
1747
+ #else
1748
+ mGetExtent = extent;
1749
+ #endif
1741
1750
1742
1751
setDataSourceUri ( dataSourceUri ().replace ( QRegExp ( " BBOX=[^&]*" ),
1743
1752
QString ( " BBOX=%1,%2,%3,%4" )
0 commit comments