15
15
* (at your option) any later version. *
16
16
* *
17
17
***************************************************************************/
18
- /* $Id$ */
18
+ /* $Id: qgsspatialquery.cpp 13447 2010-05-09 00:45:17Z jef $ */
19
19
20
20
#include < QMessageBox>
21
21
@@ -50,7 +50,8 @@ void QgsSpatialQuery::setSelectedFeaturesReference( bool useSelected )
50
50
51
51
} // void QgsSpatialQuery::setSelectedFeaturesReference(bool useSelected)
52
52
53
- void QgsSpatialQuery::runQuery ( QSet<int > & qsetIndexResult, int relation, QgsVectorLayer* lyrTarget, QgsVectorLayer* lyrReference )
53
+ void QgsSpatialQuery::runQuery ( QSet<int > & qsetIndexResult, QSet<int > & qsetIndexInvalidTarget, QSet<int > & qsetIndexInvalidReference,
54
+ int relation, QgsVectorLayer* lyrTarget, QgsVectorLayer* lyrReference )
54
55
{
55
56
setQuery ( lyrTarget, lyrReference );
56
57
@@ -60,7 +61,7 @@ void QgsSpatialQuery::runQuery( QSet<int> & qsetIndexResult, int relation, QgsVe
60
61
? mLayerReference ->selectedFeatureCount ()
61
62
: ( int )( mLayerReference ->featureCount () );
62
63
mPb ->init ( 1 , totalStep );
63
- setSpatialIndexReference (); // Need set mLayerReference before
64
+ setSpatialIndexReference ( qsetIndexInvalidReference ); // Need set mLayerReference before
64
65
65
66
// Make Query
66
67
mPb ->setFormat ( QObject::tr ( " Processing 2/2 - %p%" ) );
@@ -69,7 +70,7 @@ void QgsSpatialQuery::runQuery( QSet<int> & qsetIndexResult, int relation, QgsVe
69
70
: ( int )( mLayerTarget ->featureCount () );
70
71
mPb ->init ( 1 , totalStep );
71
72
72
- execQuery ( qsetIndexResult, relation );
73
+ execQuery ( qsetIndexResult, qsetIndexInvalidTarget, relation );
73
74
74
75
} // QSet<int> QgsSpatialQuery::runQuery( int relation)
75
76
@@ -190,7 +191,7 @@ bool QgsSpatialQuery::hasValidGeometry( QgsFeature &feature )
190
191
191
192
} // bool QgsSpatialQuery::hasValidGeometry(QgsFeature &feature)
192
193
193
- void QgsSpatialQuery::setSpatialIndexReference ()
194
+ void QgsSpatialQuery::setSpatialIndexReference ( QSet< int > & qsetIndexInvalidReference )
194
195
{
195
196
QgsReaderFeatures * readerFeaturesReference = new QgsReaderFeatures ( mLayerReference , mUseReferenceSelection );
196
197
QgsFeature feature;
@@ -201,6 +202,7 @@ void QgsSpatialQuery::setSpatialIndexReference()
201
202
202
203
if ( ! hasValidGeometry ( feature ) )
203
204
{
205
+ qsetIndexInvalidReference.insert ( feature.id () );
204
206
continue ;
205
207
}
206
208
@@ -210,7 +212,7 @@ void QgsSpatialQuery::setSpatialIndexReference()
210
212
211
213
} // void QgsSpatialQuery::setSpatialIndexReference()
212
214
213
- void QgsSpatialQuery::execQuery ( QSet<int > & qsetIndexResult, int relation )
215
+ void QgsSpatialQuery::execQuery ( QSet<int > & qsetIndexResult, QSet< int > & qsetIndexInvalidTarget, int relation )
214
216
{
215
217
bool ( QgsGeometry::* operation )( QgsGeometry * );
216
218
switch ( relation )
@@ -263,6 +265,7 @@ void QgsSpatialQuery::execQuery( QSet<int> & qsetIndexResult, int relation )
263
265
264
266
if ( ! hasValidGeometry ( featureTarget ) )
265
267
{
268
+ qsetIndexInvalidTarget.insert ( featureTarget.id () );
266
269
continue ;
267
270
}
268
271
0 commit comments