diff --git a/python/analysis/raster/qgskde.sip b/python/analysis/raster/qgskde.sip index 68b1b36d281..fd061e4c50d 100644 --- a/python/analysis/raster/qgskde.sip +++ b/python/analysis/raster/qgskde.sip @@ -49,9 +49,9 @@ class QgsKernelDensityEstimation struct Parameters { - QgsVectorLayer *vectorLayer; + QgsFeatureSource *source; %Docstring -Vector point layer +Point feature source %End double radius; diff --git a/src/analysis/raster/qgskde.cpp b/src/analysis/raster/qgskde.cpp index f2005c5aaeb..aad9abdd8be 100644 --- a/src/analysis/raster/qgskde.cpp +++ b/src/analysis/raster/qgskde.cpp @@ -14,7 +14,8 @@ ***************************************************************************/ #include "qgskde.h" -#include "qgsvectorlayer.h" +#include "qgsfeaturesource.h" +#include "qgsfeatureiterator.h" #include "qgsgeometry.h" #define NO_DATA -9999 @@ -24,7 +25,7 @@ #endif QgsKernelDensityEstimation::QgsKernelDensityEstimation( const QgsKernelDensityEstimation::Parameters ¶meters, const QString &outputFile, const QString &outputFormat ) - : mInputLayer( parameters.vectorLayer ) + : mSource( parameters.source ) , mOutputFile( outputFile ) , mOutputFormat( outputFormat ) , mRadiusField( -1 ) @@ -39,9 +40,9 @@ QgsKernelDensityEstimation::QgsKernelDensityEstimation( const QgsKernelDensityEs , mRasterBandH( nullptr ) { if ( !parameters.radiusField.isEmpty() ) - mRadiusField = mInputLayer->fields().lookupField( parameters.radiusField ); + mRadiusField = mSource->fields().lookupField( parameters.radiusField ); if ( !parameters.weightField.isEmpty() ) - mWeightField = mInputLayer->fields().lookupField( parameters.weightField ); + mWeightField = mSource->fields().lookupField( parameters.weightField ); } QgsKernelDensityEstimation::Result QgsKernelDensityEstimation::run() @@ -58,7 +59,7 @@ QgsKernelDensityEstimation::Result QgsKernelDensityEstimation::run() if ( mWeightField >= 0 ) requiredAttributes << mWeightField; - QgsFeatureIterator fit = mInputLayer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( requiredAttributes ) ); + QgsFeatureIterator fit = mSource->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( requiredAttributes ) ); QgsFeature f; while ( fit.nextFeature( f ) ) @@ -79,7 +80,7 @@ QgsKernelDensityEstimation::Result QgsKernelDensityEstimation::prepare() return DriverError; } - if ( !mInputLayer ) + if ( !mSource ) return InvalidParameters; mBounds = calculateBounds(); @@ -235,7 +236,7 @@ bool QgsKernelDensityEstimation::createEmptyLayer( GDALDriverH driver, const Qgs return false; // Set the projection on the raster destination to match the input layer - if ( GDALSetProjection( emptyDataset, mInputLayer->crs().toWkt().toLocal8Bit().data() ) != CE_None ) + if ( GDALSetProjection( emptyDataset, mSource->sourceCrs().toWkt().toLocal8Bit().data() ) != CE_None ) return false; GDALRasterBandH poBand = GDALGetRasterBand( emptyDataset, 1 ); @@ -399,16 +400,16 @@ double QgsKernelDensityEstimation::triangularKernel( const double distance, cons QgsRectangle QgsKernelDensityEstimation::calculateBounds() const { - if ( !mInputLayer ) + if ( !mSource ) return QgsRectangle(); - QgsRectangle bbox = mInputLayer->extent(); + QgsRectangle bbox = mSource->sourceExtent(); double radius = 0; if ( mRadiusField >= 0 ) { // if radius is using a field, find the max value - radius = mInputLayer->maximumValue( mRadiusField ).toDouble(); + radius = mSource->maximumValue( mRadiusField ).toDouble(); } else { diff --git a/src/analysis/raster/qgskde.h b/src/analysis/raster/qgskde.h index cc38a0a567b..cb59c2fab88 100644 --- a/src/analysis/raster/qgskde.h +++ b/src/analysis/raster/qgskde.h @@ -25,7 +25,7 @@ #include #include "qgis_analysis.h" -class QgsVectorLayer; +class QgsFeatureSource; class QProgressDialog; class QgsFeature; @@ -70,8 +70,8 @@ class ANALYSIS_EXPORT QgsKernelDensityEstimation //! KDE parameters struct Parameters { - //! Vector point layer - QgsVectorLayer *vectorLayer = nullptr; + //! Point feature source + QgsFeatureSource *source = nullptr; //! Fixed radius, in map units double radius; @@ -146,7 +146,7 @@ class ANALYSIS_EXPORT QgsKernelDensityEstimation QgsRectangle calculateBounds() const; - QgsVectorLayer *mInputLayer = nullptr; + QgsFeatureSource *mSource = nullptr; QString mOutputFile; QString mOutputFormat;