@@ -55,15 +55,15 @@ void QgsSpatialQuery::runQuery( QSet<int> & qsetIndexResult, int relation, QgsVe
55
55
setQuery ( lyrTarget, lyrReference );
56
56
57
57
// Create Spatial index for Reference - Set mIndexReference
58
- mPb ->setFormat ( " Processing 1/2 - %p%" );
58
+ mPb ->setFormat ( QObject::tr ( " Processing 1/2 - %p%" ) );
59
59
int totalStep = mUseReferenceSelection
60
60
? mLayerReference ->selectedFeatureCount ()
61
61
: ( int )( mLayerReference ->featureCount () );
62
62
mPb ->init ( 1 , totalStep );
63
63
setSpatialIndexReference (); // Need set mLayerReference before
64
64
65
65
// Make Query
66
- mPb ->setFormat ( " Processing 2/2 - %p%" );
66
+ mPb ->setFormat ( QObject::tr ( " Processing 2/2 - %p%" ) );
67
67
totalStep = mUseTargetSelection
68
68
? mLayerTarget ->selectedFeatureCount ()
69
69
: ( int )( mLayerTarget ->featureCount () );
@@ -181,9 +181,7 @@ bool QgsSpatialQuery::hasValidGeometry( QgsFeature &feature )
181
181
return false ;
182
182
}
183
183
184
- GEOSGeometry *geomGeos = geom->asGeos ();
185
-
186
- if ( GEOSisEmpty ( geomGeos ) || 1 != GEOSisValid ( geomGeos ) )
184
+ if ( geom->isGeosEmpty () || !geom->isGeosValid () )
187
185
{
188
186
return false ;
189
187
}
@@ -218,33 +216,32 @@ void QgsSpatialQuery::setSpatialIndexReference()
218
216
219
217
void QgsSpatialQuery::execQuery ( QSet<int > & qsetIndexResult, int relation )
220
218
{
221
- // Set GEOS function
222
- char ( *operation )( const GEOSGeometry *, const GEOSGeometry* );
219
+ bool ( QgsGeometry::* operation )( QgsGeometry * );
223
220
switch ( relation )
224
221
{
225
222
case Disjoint:
226
- operation = &GEOSDisjoint ;
223
+ operation = &QgsGeometry::disjoint ;
227
224
break ;
228
225
case Equals:
229
- operation = &GEOSEquals ;
226
+ operation = &QgsGeometry::equals ;
230
227
break ;
231
228
case Touches:
232
- operation = &GEOSTouches ;
229
+ operation = &QgsGeometry::touches ;
233
230
break ;
234
231
case Overlaps:
235
- operation = &GEOSOverlaps ;
232
+ operation = &QgsGeometry::overlaps ;
236
233
break ;
237
234
case Within:
238
- operation = &GEOSWithin ;
235
+ operation = &QgsGeometry::within ;
239
236
break ;
240
237
case Contains:
241
- operation = &GEOSContains ;
238
+ operation = &QgsGeometry::contains ;
242
239
break ;
243
240
case Crosses:
244
- operation = &GEOSCrosses ;
241
+ operation = &QgsGeometry::crosses ;
245
242
break ;
246
243
case Intersects:
247
- operation = &GEOSIntersects ;
244
+ operation = &QgsGeometry::intersects ;
248
245
break ;
249
246
}
250
247
@@ -253,20 +250,16 @@ void QgsSpatialQuery::execQuery( QSet<int> & qsetIndexResult, int relation )
253
250
coordinateTransform->setCoordinateTransform ( mLayerTarget , mLayerReference );
254
251
255
252
// Set function for populate result
256
- void ( QgsSpatialQuery::* funcPopulateIndexResult )
257
- ( QSet<int > &, int , QgsGeometry *,
258
- char ( * )( const GEOSGeometry *, const GEOSGeometry * ) );
253
+ void ( QgsSpatialQuery::* funcPopulateIndexResult )( QSet<int > &, int , QgsGeometry *, bool ( QgsGeometry::* )( QgsGeometry * ) );
259
254
funcPopulateIndexResult = ( relation == Disjoint )
260
255
? &QgsSpatialQuery::populateIndexResultDisjoint
261
256
: &QgsSpatialQuery::populateIndexResult;
262
257
263
258
QgsFeature featureTarget;
264
259
QgsGeometry * geomTarget;
265
260
int step = 1 ;
266
- while ( true )
261
+ while ( mReaderFeaturesTarget -> nextFeature ( featureTarget ) )
267
262
{
268
- if ( ! mReaderFeaturesTarget ->nextFeature ( featureTarget ) ) break ;
269
-
270
263
mPb ->step ( step++ );
271
264
272
265
if ( ! hasValidGeometry ( featureTarget ) )
@@ -285,23 +278,22 @@ void QgsSpatialQuery::execQuery( QSet<int> & qsetIndexResult, int relation )
285
278
286
279
void QgsSpatialQuery::populateIndexResult (
287
280
QSet<int > &qsetIndexResult, int idTarget, QgsGeometry * geomTarget,
288
- char ( *operation )( const GEOSGeometry *, const GEOSGeometry * ) )
281
+ bool ( QgsGeometry::* op )( QgsGeometry * ) )
289
282
{
290
283
QList<int > listIdReference;
291
284
listIdReference = mIndexReference .intersects ( geomTarget->boundingBox () );
292
285
if ( listIdReference.count () == 0 )
293
286
{
294
287
return ;
295
288
}
296
- GEOSGeometry * geosTarget = geomTarget->asGeos ();
297
289
QgsFeature featureReference;
298
290
QgsGeometry * geomReference;
299
291
QList<int >::iterator iterIdReference = listIdReference.begin ();
300
292
for ( ; iterIdReference != listIdReference.end (); iterIdReference++ )
301
293
{
302
294
mLayerReference ->featureAtId ( *iterIdReference, featureReference );
303
295
geomReference = featureReference.geometry ();
304
- if (( *operation )( geosTarget, geomReference-> asGeos () ) == 1 )
296
+ if (( geomTarget->*op )( geomReference ) == 1 )
305
297
{
306
298
qsetIndexResult.insert ( idTarget );
307
299
break ;
@@ -312,7 +304,7 @@ void QgsSpatialQuery::populateIndexResult(
312
304
313
305
void QgsSpatialQuery::populateIndexResultDisjoint (
314
306
QSet<int > &qsetIndexResult, int idTarget, QgsGeometry * geomTarget,
315
- char ( *operation )( const GEOSGeometry *, const GEOSGeometry * ) )
307
+ bool ( QgsGeometry::* op )( QgsGeometry * ) )
316
308
{
317
309
QList<int > listIdReference;
318
310
listIdReference = mIndexReference .intersects ( geomTarget->boundingBox () );
@@ -321,7 +313,6 @@ void QgsSpatialQuery::populateIndexResultDisjoint(
321
313
qsetIndexResult.insert ( idTarget );
322
314
return ;
323
315
}
324
- GEOSGeometry * geosTarget = geomTarget->asGeos ();
325
316
QgsFeature featureReference;
326
317
QgsGeometry * geomReference;
327
318
QList<int >::iterator iterIdReference = listIdReference.begin ();
@@ -330,7 +321,7 @@ void QgsSpatialQuery::populateIndexResultDisjoint(
330
321
{
331
322
mLayerReference ->featureAtId ( *iterIdReference, featureReference );
332
323
geomReference = featureReference.geometry ();
333
- if (( *operation )( geosTarget, geomReference-> asGeos () ) == 0 )
324
+ if (( geomTarget->*op )( geomTarget ) == 0 )
334
325
{
335
326
addIndex = false ;
336
327
break ;
0 commit comments