Skip to content

Commit c597ad1

Browse files
committedMar 1, 2019
Prepare geometry engine
for improved performance
1 parent d313405 commit c597ad1

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed
 

‎src/analysis/vector/geometry_checker/qgsgeometrygapcheck.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ void QgsGeometryGapCheck::collectErrors( const QMap<QString, QgsFeaturePool *> &
5858
}
5959

6060
std::unique_ptr< QgsGeometryEngine > geomEngine = QgsGeometryCheckerUtils::createGeomEngine( nullptr, mContext->tolerance );
61+
geomEngine->prepareGeometry();
6162

6263
// Create union of geometry
6364
QString errMsg;
@@ -70,6 +71,7 @@ void QgsGeometryGapCheck::collectErrors( const QMap<QString, QgsFeaturePool *> &
7071

7172
// Get envelope of union
7273
geomEngine = QgsGeometryCheckerUtils::createGeomEngine( unionGeom.get(), mContext->tolerance );
74+
geomEngine->prepareGeometry();
7375
std::unique_ptr<QgsAbstractGeometry> envelope( geomEngine->envelope( &errMsg ) );
7476
if ( !envelope )
7577
{
@@ -79,11 +81,13 @@ void QgsGeometryGapCheck::collectErrors( const QMap<QString, QgsFeaturePool *> &
7981

8082
// Buffer envelope
8183
geomEngine = QgsGeometryCheckerUtils::createGeomEngine( envelope.get(), mContext->tolerance );
84+
geomEngine->prepareGeometry();
8285
QgsAbstractGeometry *bufEnvelope = geomEngine->buffer( 2, 0, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_MITRE, 4. ); //#spellok //#spellok
8386
envelope.reset( bufEnvelope );
8487

8588
// Compute difference between envelope and union to obtain gap polygons
8689
geomEngine = QgsGeometryCheckerUtils::createGeomEngine( envelope.get(), mContext->tolerance );
90+
geomEngine->prepareGeometry();
8791
std::unique_ptr<QgsAbstractGeometry> diffGeom( geomEngine->difference( unionGeom.get(), &errMsg ) );
8892
if ( !diffGeom )
8993
{

‎src/analysis/vector/geometry_checker/qgsgeometryoverlapcheck.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ void QgsGeometryOverlapCheck::fixError( const QMap<QString, QgsFeaturePool *> &f
111111
QgsGeometryCheckerUtils::LayerFeature layerFeatureB( featurePoolB, featureB, mContext, true );
112112
const QgsGeometry geometryA = layerFeatureA.geometry();
113113
std::unique_ptr< QgsGeometryEngine > geomEngineA = QgsGeometryCheckerUtils::createGeomEngine( geometryA.constGet(), mContext->reducedTolerance );
114+
geomEngineA->prepareGeometry();
114115

115116
const QgsGeometry geometryB = layerFeatureB.geometry();
116117
if ( !geomEngineA->overlaps( geometryB.constGet() ) )
@@ -160,6 +161,7 @@ void QgsGeometryOverlapCheck::fixError( const QMap<QString, QgsFeaturePool *> &f
160161
QgsGeometryCheckerUtils::filter1DTypes( diff1.get() );
161162
}
162163
std::unique_ptr< QgsGeometryEngine > geomEngineB = QgsGeometryCheckerUtils::createGeomEngine( geometryB.constGet(), mContext->reducedTolerance );
164+
geomEngineB->prepareGeometry();
163165
std::unique_ptr< QgsAbstractGeometry > diff2( geomEngineB->difference( interPart, &errMsg ) );
164166
if ( !diff2 || diff2->isEmpty() )
165167
{

0 commit comments

Comments
 (0)
Please sign in to comment.