Skip to content

Commit 6a0fbac

Browse files
committed
Avoid unnecessary detaches
1 parent 2dbeeff commit 6a0fbac

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

src/analysis/vector/geometry_checker/qgsgeometrygapcheck.cpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ void QgsGeometryGapCheck::collectErrors( QList<QgsGeometryCheckError *> &errors,
2626
QVector<QgsAbstractGeometry *> geomList;
2727

2828
QMap<QString, QgsFeatureIds> featureIds = ids.isEmpty() ? allLayerFeatureIds() : ids;
29-
QgsGeometryCheckerUtils::LayerFeatures layerFeatures( mContext->featurePools, featureIds, mCompatibleGeometryTypes, nullptr, true );
29+
const QgsGeometryCheckerUtils::LayerFeatures layerFeatures( mContext->featurePools, featureIds, mCompatibleGeometryTypes, nullptr, true );
3030
for ( const QgsGeometryCheckerUtils::LayerFeature &layerFeature : layerFeatures )
3131
{
3232
geomList.append( layerFeature.geometry()->clone() );
@@ -96,7 +96,7 @@ void QgsGeometryGapCheck::collectErrors( QList<QgsGeometryCheckError *> &errors,
9696

9797
// Get neighboring polygons
9898
QMap<QString, QgsFeatureIds> neighboringIds;
99-
QgsGeometryCheckerUtils::LayerFeatures layerFeatures( mContext->featurePools, featureIds.keys(), gapAreaBBox, mCompatibleGeometryTypes );
99+
const QgsGeometryCheckerUtils::LayerFeatures layerFeatures( mContext->featurePools, featureIds.keys(), gapAreaBBox, mCompatibleGeometryTypes );
100100
for ( const QgsGeometryCheckerUtils::LayerFeature &layerFeature : layerFeatures )
101101
{
102102
if ( QgsGeometryCheckerUtils::sharedEdgeLength( gapGeom, layerFeature.geometry(), mContext->reducedTolerance ) > 0 )
@@ -154,14 +154,17 @@ bool QgsGeometryGapCheck::mergeWithNeighbor( QgsGeometryGapCheckError *err, Chan
154154

155155
const QgsAbstractGeometry *errGeometry = QgsGeometryCheckerUtils::getGeomPart( err->geometry(), 0 );
156156

157+
const auto layerIds = err->neighbors().keys();
157158
// Search for touching neighboring geometries
158-
for ( const QString &layerId : err->neighbors().keys() )
159+
for ( const QString &layerId : layerIds )
159160
{
160-
QgsFeaturePool *featurePool = mContext->featurePools[ layerId ];
161+
QgsFeaturePool *featurePool = mContext->featurePools.value( layerId );
161162
QgsAbstractGeometry *errLayerGeom = errGeometry->clone();
162163
errLayerGeom->transform( featurePool->getLayerToMapTransform(), QgsCoordinateTransform::ReverseTransform );
163164

164-
for ( QgsFeatureId testId : err->neighbors()[layerId] )
165+
const auto featureIds = err->neighbors().value( layerId );
166+
167+
for ( QgsFeatureId testId : featureIds )
165168
{
166169
QgsFeature testFeature;
167170
if ( !featurePool->get( testId, testFeature ) )

src/analysis/vector/geometry_checker/qgsgeometryoverlapcheck.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ void QgsGeometryOverlapCheck::collectErrors( QList<QgsGeometryCheckError *> &err
2222
{
2323
double overlapThreshold = mThresholdMapUnits;
2424
QMap<QString, QgsFeatureIds> featureIds = ids.isEmpty() ? allLayerFeatureIds() : ids;
25-
QgsGeometryCheckerUtils::LayerFeatures layerFeaturesA( mContext->featurePools, featureIds, mCompatibleGeometryTypes, progressCounter, true );
26-
QList<QString> layerIds = featureIds.keys();
25+
const QgsGeometryCheckerUtils::LayerFeatures layerFeaturesA( mContext->featurePools, featureIds, mCompatibleGeometryTypes, progressCounter, true );
26+
const QList<QString> layerIds = featureIds.keys();
2727
for ( const QgsGeometryCheckerUtils::LayerFeature &layerFeatureA : layerFeaturesA )
2828
{
2929
// Ensure each pair of layers only gets compared once: remove the current layer from the layerIds, but add it to the layerList for layerFeaturesB
@@ -37,7 +37,7 @@ void QgsGeometryOverlapCheck::collectErrors( QList<QgsGeometryCheckError *> &err
3737
continue;
3838
}
3939

40-
QgsGeometryCheckerUtils::LayerFeatures layerFeaturesB( mContext->featurePools, QList<QString>() << layerFeatureA.layer().id() << layerIds, bboxA, mCompatibleGeometryTypes );
40+
const QgsGeometryCheckerUtils::LayerFeatures layerFeaturesB( mContext->featurePools, QList<QString>() << layerFeatureA.layer().id() << layerIds, bboxA, mCompatibleGeometryTypes );
4141
for ( const QgsGeometryCheckerUtils::LayerFeature &layerFeatureB : layerFeaturesB )
4242
{
4343
// > : only report overlaps within same layer once

0 commit comments

Comments
 (0)