From fd19167c0a796c3eca161818dc9ca6eeea32d695 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 30 Jul 2020 19:29:44 +1000 Subject: [PATCH] [processing] Show some more warnings when spatial indexes are missing but desirable --- python/plugins/processing/algs/qgis/SpatialJoinSummary.py | 4 ++++ src/analysis/processing/qgsalgorithmclip.cpp | 3 +++ src/analysis/processing/qgsalgorithmextractbyextent.cpp | 3 +++ 3 files changed, 10 insertions(+) diff --git a/python/plugins/processing/algs/qgis/SpatialJoinSummary.py b/python/plugins/processing/algs/qgis/SpatialJoinSummary.py index 960070e4add..76bdbbfe6fe 100644 --- a/python/plugins/processing/algs/qgis/SpatialJoinSummary.py +++ b/python/plugins/processing/algs/qgis/SpatialJoinSummary.py @@ -35,6 +35,7 @@ from qgis.core import (NULL, QgsFeatureSink, QgsFeatureRequest, QgsGeometry, + QgsFeatureSource, QgsCoordinateTransform, QgsStatisticalSummary, QgsDateTimeStatisticalSummary, @@ -160,6 +161,9 @@ class SpatialJoinSummary(QgisAlgorithm): if join_source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.JOIN)) + if join_source.hasSpatialIndex() == QgsFeatureSource.SpatialIndexNotPresent: + feedback.reportError(self.tr("No spatial index exists for join layer, performance will be severely degraded")) + join_fields = self.parameterAsFields(parameters, self.JOIN_FIELDS, context) discard_nomatch = self.parameterAsBoolean(parameters, self.DISCARD_NONMATCHING, context) summaries = [self.statistics[i][0] for i in diff --git a/src/analysis/processing/qgsalgorithmclip.cpp b/src/analysis/processing/qgsalgorithmclip.cpp index 617c49ad16c..54e8ddb4aea 100644 --- a/src/analysis/processing/qgsalgorithmclip.cpp +++ b/src/analysis/processing/qgsalgorithmclip.cpp @@ -96,6 +96,9 @@ QVariantMap QgsClipAlgorithm::processAlgorithm( const QVariantMap ¶meters, Q if ( !maskSource ) throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "OVERLAY" ) ) ); + if ( featureSource->hasSpatialIndex() == QgsFeatureSource::SpatialIndexNotPresent ) + feedback->reportError( QObject::tr( "No spatial index exists for input layer, performance will be severely degraded" ) ); + QString dest; QgsWkbTypes::GeometryType sinkType = QgsWkbTypes::geometryType( featureSource->wkbType() ); std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, featureSource->fields(), QgsWkbTypes::multiType( featureSource->wkbType() ), featureSource->sourceCrs() ) ); diff --git a/src/analysis/processing/qgsalgorithmextractbyextent.cpp b/src/analysis/processing/qgsalgorithmextractbyextent.cpp index 78f6839a269..21fb2a3d741 100644 --- a/src/analysis/processing/qgsalgorithmextractbyextent.cpp +++ b/src/analysis/processing/qgsalgorithmextractbyextent.cpp @@ -70,6 +70,9 @@ QVariantMap QgsExtractByExtentAlgorithm::processAlgorithm( const QVariantMap &pa if ( !featureSource ) throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "INPUT" ) ) ); + if ( featureSource->hasSpatialIndex() == QgsFeatureSource::SpatialIndexNotPresent ) + feedback->reportError( QObject::tr( "No spatial index exists for input layer, performance will be severely degraded" ) ); + QgsRectangle extent = parameterAsExtent( parameters, QStringLiteral( "EXTENT" ), context, featureSource->sourceCrs() ); bool clip = parameterAsBoolean( parameters, QStringLiteral( "CLIP" ), context );