22
22
#include " qgsrasterlayer.h"
23
23
#include " qgszonalstatistics.h"
24
24
#include " qgsproject.h"
25
+ #include " qgsvectorlayerutils.h"
25
26
26
27
/* *
27
28
* \ingroup UnitTests
@@ -38,6 +39,7 @@ class TestQgsZonalStatistics : public QObject
38
39
void cleanup () {}
39
40
40
41
void testStatistics ();
42
+ void testReprojection ();
41
43
42
44
private:
43
45
QgsVectorLayer *mVectorLayer = nullptr ;
@@ -182,5 +184,67 @@ void TestQgsZonalStatistics::testStatistics()
182
184
QCOMPARE ( f.attribute ( " myqgis2__4" ).toDouble (), 0.13888888888889 );
183
185
}
184
186
187
+ void TestQgsZonalStatistics::testReprojection ()
188
+ {
189
+ QString myDataPath ( TEST_DATA_DIR ); // defined in CmakeLists.txt
190
+ QString myTestDataPath = myDataPath + " /zonalstatistics/" ;
191
+
192
+ // create a reprojected version of the layer
193
+ std::unique_ptr< QgsVectorLayer > vectorLayer ( new QgsVectorLayer ( myTestDataPath + " polys.shp" , QStringLiteral ( " poly" ), QStringLiteral ( " ogr" ) ) );
194
+ std::unique_ptr< QgsVectorLayer > reprojected ( vectorLayer->materialize ( QgsFeatureRequest ().setDestinationCrs ( QgsCoordinateReferenceSystem ( QStringLiteral ( " EPSG:3785" ) ), QgsProject::instance ()->transformContext () ) ) );
195
+
196
+ QCOMPARE ( reprojected->featureCount (), vectorLayer->featureCount () );
197
+ QgsZonalStatistics zs ( reprojected.get (), mRasterLayer , QString (), 1 , QgsZonalStatistics::All );
198
+ zs.calculateStatistics ( nullptr );
199
+
200
+ QgsFeature f;
201
+ QgsFeatureRequest request;
202
+ QgsFeatureIterator it = reprojected->getFeatures ( request );
203
+ bool fetched = it.nextFeature ( f );
204
+ QVERIFY ( fetched );
205
+ QCOMPARE ( f.attribute ( " count" ).toDouble (), 12.0 );
206
+ QCOMPARE ( f.attribute ( " sum" ).toDouble (), 8.0 );
207
+ QCOMPARE ( f.attribute ( " mean" ).toDouble (), 0.666666666666667 );
208
+ QCOMPARE ( f.attribute ( " median" ).toDouble (), 1.0 );
209
+ QCOMPARE ( f.attribute ( " stdev" ).toDouble (), 0.47140452079103201 );
210
+ QCOMPARE ( f.attribute ( " min" ).toDouble (), 0.0 );
211
+ QCOMPARE ( f.attribute ( " max" ).toDouble (), 1.0 );
212
+ QCOMPARE ( f.attribute ( " range" ).toDouble (), 1.0 );
213
+ QCOMPARE ( f.attribute ( " minority" ).toDouble (), 0.0 );
214
+ QCOMPARE ( f.attribute ( " majority" ).toDouble (), 1.0 );
215
+ QCOMPARE ( f.attribute ( " variety" ).toDouble (), 2.0 );
216
+ QCOMPARE ( f.attribute ( " variance" ).toDouble (), 0.222222222222222 );
217
+
218
+ fetched = it.nextFeature ( f );
219
+ QVERIFY ( fetched );
220
+ QCOMPARE ( f.attribute ( " count" ).toDouble (), 9.0 );
221
+ QCOMPARE ( f.attribute ( " sum" ).toDouble (), 5.0 );
222
+ QCOMPARE ( f.attribute ( " mean" ).toDouble (), 0.555555555555556 );
223
+ QCOMPARE ( f.attribute ( " median" ).toDouble (), 1.0 );
224
+ QCOMPARE ( f.attribute ( " stdev" ).toDouble (), 0.49690399499995302 );
225
+ QCOMPARE ( f.attribute ( " min" ).toDouble (), 0.0 );
226
+ QCOMPARE ( f.attribute ( " max" ).toDouble (), 1.0 );
227
+ QCOMPARE ( f.attribute ( " range" ).toDouble (), 1.0 );
228
+ QCOMPARE ( f.attribute ( " minority" ).toDouble (), 0.0 );
229
+ QCOMPARE ( f.attribute ( " majority" ).toDouble (), 1.0 );
230
+ QCOMPARE ( f.attribute ( " variety" ).toDouble (), 2.0 );
231
+ QCOMPARE ( f.attribute ( " variance" ).toDouble (), 0.24691358024691 );
232
+
233
+ fetched = it.nextFeature ( f );
234
+ QVERIFY ( fetched );
235
+ QCOMPARE ( f.attribute ( " count" ).toDouble (), 6.0 );
236
+ QCOMPARE ( f.attribute ( " sum" ).toDouble (), 5.0 );
237
+ QCOMPARE ( f.attribute ( " mean" ).toDouble (), 0.833333333333333 );
238
+ QCOMPARE ( f.attribute ( " median" ).toDouble (), 1.0 );
239
+ QCOMPARE ( f.attribute ( " stdev" ).toDouble (), 0.372677996249965 );
240
+ QCOMPARE ( f.attribute ( " min" ).toDouble (), 0.0 );
241
+ QCOMPARE ( f.attribute ( " max" ).toDouble (), 1.0 );
242
+ QCOMPARE ( f.attribute ( " range" ).toDouble (), 1.0 );
243
+ QCOMPARE ( f.attribute ( " minority" ).toDouble (), 0.0 );
244
+ QCOMPARE ( f.attribute ( " majority" ).toDouble (), 1.0 );
245
+ QCOMPARE ( f.attribute ( " variety" ).toDouble (), 2.0 );
246
+ QCOMPARE ( f.attribute ( " variance" ).toDouble (), 0.13888888888889 );
247
+ }
248
+
185
249
QGSTEST_MAIN ( TestQgsZonalStatistics )
186
250
#include " testqgszonalstatistics.moc"
0 commit comments