Skip to content

Commit d9e29b9

Browse files
committedJul 13, 2017
Use QgsFeatureSource instead of QgsVectorLayer for QgsKde
Allows generation of heatmaps from feature sources instead of requiring vector layer inputs
1 parent eb0c301 commit d9e29b9

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed
 

‎python/analysis/raster/qgskde.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ class QgsKernelDensityEstimation
4949

5050
struct Parameters
5151
{
52-
QgsVectorLayer *vectorLayer;
52+
QgsFeatureSource *source;
5353
%Docstring
54-
Vector point layer
54+
Point feature source
5555
%End
5656

5757
double radius;

‎src/analysis/raster/qgskde.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
***************************************************************************/
1515

1616
#include "qgskde.h"
17-
#include "qgsvectorlayer.h"
17+
#include "qgsfeaturesource.h"
18+
#include "qgsfeatureiterator.h"
1819
#include "qgsgeometry.h"
1920

2021
#define NO_DATA -9999
@@ -24,7 +25,7 @@
2425
#endif
2526

2627
QgsKernelDensityEstimation::QgsKernelDensityEstimation( const QgsKernelDensityEstimation::Parameters &parameters, const QString &outputFile, const QString &outputFormat )
27-
: mInputLayer( parameters.vectorLayer )
28+
: mSource( parameters.source )
2829
, mOutputFile( outputFile )
2930
, mOutputFormat( outputFormat )
3031
, mRadiusField( -1 )
@@ -39,9 +40,9 @@ QgsKernelDensityEstimation::QgsKernelDensityEstimation( const QgsKernelDensityEs
3940
, mRasterBandH( nullptr )
4041
{
4142
if ( !parameters.radiusField.isEmpty() )
42-
mRadiusField = mInputLayer->fields().lookupField( parameters.radiusField );
43+
mRadiusField = mSource->fields().lookupField( parameters.radiusField );
4344
if ( !parameters.weightField.isEmpty() )
44-
mWeightField = mInputLayer->fields().lookupField( parameters.weightField );
45+
mWeightField = mSource->fields().lookupField( parameters.weightField );
4546
}
4647

4748
QgsKernelDensityEstimation::Result QgsKernelDensityEstimation::run()
@@ -58,7 +59,7 @@ QgsKernelDensityEstimation::Result QgsKernelDensityEstimation::run()
5859
if ( mWeightField >= 0 )
5960
requiredAttributes << mWeightField;
6061

61-
QgsFeatureIterator fit = mInputLayer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( requiredAttributes ) );
62+
QgsFeatureIterator fit = mSource->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( requiredAttributes ) );
6263

6364
QgsFeature f;
6465
while ( fit.nextFeature( f ) )
@@ -79,7 +80,7 @@ QgsKernelDensityEstimation::Result QgsKernelDensityEstimation::prepare()
7980
return DriverError;
8081
}
8182

82-
if ( !mInputLayer )
83+
if ( !mSource )
8384
return InvalidParameters;
8485

8586
mBounds = calculateBounds();
@@ -235,7 +236,7 @@ bool QgsKernelDensityEstimation::createEmptyLayer( GDALDriverH driver, const Qgs
235236
return false;
236237

237238
// Set the projection on the raster destination to match the input layer
238-
if ( GDALSetProjection( emptyDataset, mInputLayer->crs().toWkt().toLocal8Bit().data() ) != CE_None )
239+
if ( GDALSetProjection( emptyDataset, mSource->sourceCrs().toWkt().toLocal8Bit().data() ) != CE_None )
239240
return false;
240241

241242
GDALRasterBandH poBand = GDALGetRasterBand( emptyDataset, 1 );
@@ -399,16 +400,16 @@ double QgsKernelDensityEstimation::triangularKernel( const double distance, cons
399400

400401
QgsRectangle QgsKernelDensityEstimation::calculateBounds() const
401402
{
402-
if ( !mInputLayer )
403+
if ( !mSource )
403404
return QgsRectangle();
404405

405-
QgsRectangle bbox = mInputLayer->extent();
406+
QgsRectangle bbox = mSource->sourceExtent();
406407

407408
double radius = 0;
408409
if ( mRadiusField >= 0 )
409410
{
410411
// if radius is using a field, find the max value
411-
radius = mInputLayer->maximumValue( mRadiusField ).toDouble();
412+
radius = mSource->maximumValue( mRadiusField ).toDouble();
412413
}
413414
else
414415
{

‎src/analysis/raster/qgskde.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include <cpl_conv.h>
2626
#include "qgis_analysis.h"
2727

28-
class QgsVectorLayer;
28+
class QgsFeatureSource;
2929
class QProgressDialog;
3030
class QgsFeature;
3131

@@ -70,8 +70,8 @@ class ANALYSIS_EXPORT QgsKernelDensityEstimation
7070
//! KDE parameters
7171
struct Parameters
7272
{
73-
//! Vector point layer
74-
QgsVectorLayer *vectorLayer = nullptr;
73+
//! Point feature source
74+
QgsFeatureSource *source = nullptr;
7575

7676
//! Fixed radius, in map units
7777
double radius;
@@ -146,7 +146,7 @@ class ANALYSIS_EXPORT QgsKernelDensityEstimation
146146

147147
QgsRectangle calculateBounds() const;
148148

149-
QgsVectorLayer *mInputLayer = nullptr;
149+
QgsFeatureSource *mSource = nullptr;
150150

151151
QString mOutputFile;
152152
QString mOutputFormat;

0 commit comments

Comments
 (0)
Please sign in to comment.