Skip to content

Commit efbd3ad

Browse files
committedMay 28, 2020
PG raster: tests and data for issue #36689
1 parent 0496ce5 commit efbd3ad

File tree

2 files changed

+58
-13
lines changed

2 files changed

+58
-13
lines changed
 

‎tests/src/python/test_provider_postgresraster.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ def _load_test_table(cls, schemaname, tablename, basename=None):
6060
with open(os.path.join(TEST_DATA_DIR, 'provider', 'postgresraster', basename + '.sql'), 'r') as f:
6161
sql = f.read()
6262
conn.executeSql(sql)
63-
assert (tablename in [n.tableName() for n in conn.tables(schemaname)]), tablename + ' not found!'
63+
assert (tablename in [n.tableName() for n in conn.tables(
64+
schemaname)]), tablename + ' not found!'
6465

6566
@classmethod
6667
def setUpClass(cls):
@@ -101,15 +102,17 @@ def gdal_block_compare(self, rlayer, band, extent, width, height, value):
101102
})
102103
gdal_rl = QgsRasterLayer(gdal_uri, "rl", "gdal")
103104
self.assertTrue(gdal_rl.isValid())
104-
self.assertEqual(value, gdal_rl.dataProvider().block(band, self.rl.extent(), 6, 5).data().toHex())
105+
self.assertEqual(value, gdal_rl.dataProvider().block(
106+
band, self.rl.extent(), 6, 5).data().toHex())
105107

106108
@classmethod
107109
def tearDownClass(cls):
108110
"""Run after all tests"""
109111

110112
def testExtent(self):
111113
extent = self.rl.extent()
112-
self.assertEqual(extent, QgsRectangle(4080050, 2430625, 4080200, 2430750))
114+
self.assertEqual(extent, QgsRectangle(
115+
4080050, 2430625, 4080200, 2430750))
113116

114117
def testSize(self):
115118
self.assertEqual(self.source.xSize(), 6)
@@ -119,7 +122,8 @@ def testCrs(self):
119122
self.assertEqual(self.source.crs().authid(), 'EPSG:3035')
120123

121124
def testGetData(self):
122-
identify = self.source.identify(QgsPointXY(4080137.9, 2430687.9), QgsRaster.IdentifyFormatValue)
125+
identify = self.source.identify(QgsPointXY(
126+
4080137.9, 2430687.9), QgsRaster.IdentifyFormatValue)
123127
expected = 192.51044
124128
self.assertAlmostEqual(identify.results()[1], expected, 4)
125129

@@ -214,13 +218,16 @@ def testSpeed(self):
214218

215219
def _speed_check(schema, table, width, height):
216220
print('-' * 80)
217-
print("Testing: {schema}.{table}".format(table=table, schema=schema))
221+
print("Testing: {schema}.{table}".format(
222+
table=table, schema=schema))
218223
print('-' * 80)
219224

220225
# GDAL
221226
start = time.time()
222227
rl = QgsRasterLayer(
223-
"PG: " + conn + "table={table} mode=2 schema={schema}".format(table=table, schema=schema), 'gdal_layer',
228+
"PG: " + conn +
229+
"table={table} mode=2 schema={schema}".format(
230+
table=table, schema=schema), 'gdal_layer',
224231
'gdal')
225232
self.assertTrue(rl.isValid())
226233
# Make is smaller than full extent
@@ -229,10 +236,12 @@ def _speed_check(schema, table, width, height):
229236
print("Tiled GDAL start time: {:.6f}".format(checkpoint_1 - start))
230237
rl.dataProvider().block(1, extent, width, height)
231238
checkpoint_2 = time.time()
232-
print("Tiled GDAL first block time: {:.6f}".format(checkpoint_2 - checkpoint_1))
239+
print("Tiled GDAL first block time: {:.6f}".format(
240+
checkpoint_2 - checkpoint_1))
233241
# rl.dataProvider().block(1, extent, width, height)
234242
checkpoint_3 = time.time()
235-
print("Tiled GDAL second block time: {:.6f}".format(checkpoint_3 - checkpoint_2))
243+
print("Tiled GDAL second block time: {:.6f}".format(
244+
checkpoint_3 - checkpoint_2))
236245
print("Total GDAL time: {:.6f}".format(checkpoint_3 - start))
237246
print('-' * 80)
238247

@@ -246,10 +255,12 @@ def _speed_check(schema, table, width, height):
246255
print("Tiled PG start time: {:.6f}".format(checkpoint_1 - start))
247256
rl.dataProvider().block(1, extent, width, height)
248257
checkpoint_2 = time.time()
249-
print("Tiled PG first block time: {:.6f}".format(checkpoint_2 - checkpoint_1))
258+
print("Tiled PG first block time: {:.6f}".format(
259+
checkpoint_2 - checkpoint_1))
250260
rl.dataProvider().block(1, extent, width, height)
251261
checkpoint_3 = time.time()
252-
print("Tiled PG second block time: {:.6f}".format(checkpoint_3 - checkpoint_2))
262+
print("Tiled PG second block time: {:.6f}".format(
263+
checkpoint_3 - checkpoint_2))
253264
print("Total PG time: {:.6f}".format(checkpoint_3 - start))
254265
print('-' * 80)
255266

@@ -260,7 +271,8 @@ def testOtherSchema(self):
260271
See: GH #34823"""
261272

262273
rl = QgsRasterLayer(
263-
self.dbconn + " sslmode=disable table={table} schema={schema}".format(table='cosmo_i5_snow', schema='idro'),
274+
self.dbconn + " sslmode=disable table={table} schema={schema}".format(
275+
table='cosmo_i5_snow', schema='idro'),
264276
'pg_layer', 'postgresraster')
265277
self.assertTrue(rl.isValid())
266278
self.assertTrue(compareWkt(rl.extent().asWktPolygon(),
@@ -303,7 +315,8 @@ def testSetSubsetString(self):
303315
data.append(int(block.value(i, j)))
304316
self.assertEqual(data, [136, 142, 161, 169])
305317

306-
stats = rl.dataProvider().bandStatistics(1, QgsRasterBandStats.Min | QgsRasterBandStats.Max, rl.extent())
318+
stats = rl.dataProvider().bandStatistics(
319+
1, QgsRasterBandStats.Min | QgsRasterBandStats.Max, rl.extent())
307320
self.assertEqual(int(stats.minimumValue), 136)
308321
self.assertEqual(int(stats.maximumValue), 169)
309322

@@ -321,7 +334,8 @@ def testSetSubsetString(self):
321334
self.assertEqual(data, [136, 142, 145, 153])
322335

323336
# Check that we have new statistics
324-
stats = rl.dataProvider().bandStatistics(1, QgsRasterBandStats.Min | QgsRasterBandStats.Max, rl.extent())
337+
stats = rl.dataProvider().bandStatistics(
338+
1, QgsRasterBandStats.Min | QgsRasterBandStats.Max, rl.extent())
325339
self.assertEqual(int(stats.minimumValue), 136)
326340
self.assertEqual(int(stats.maximumValue), 153)
327341

@@ -449,6 +463,23 @@ def _round_trip(uri):
449463
'username': 'my username',
450464
})
451465

466+
def testInt16(self):
467+
"""Test regression https://github.com/qgis/QGIS/issues/36689"""
468+
469+
rl = QgsRasterLayer(
470+
self.dbconn + " sslmode=disable table={table} schema={schema}".format(
471+
table='int16_regression_36689', schema='public'), 'pg_layer', 'postgresraster')
472+
473+
self.assertTrue(rl.isValid())
474+
block = rl.dataProvider().block(1, rl.extent(), 6, 6)
475+
data = []
476+
for i in range(6):
477+
for j in range(6):
478+
data.append(int(block.value(i, j)))
479+
480+
self.assertEqual(data, [55, 52, 46, 39, 33, 30, 58, 54, 49, 45, 41, 37, 58, 54, 50,
481+
47, 45, 43, 54, 51, 49, 47, 46, 44, 47, 47, 47, 47, 46, 45, 41, 43, 45, 48, 49, 46])
482+
452483

453484
if __name__ == '__main__':
454485
unittest.main()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---------------------------
2+
--
3+
-- Test github issue 36689
4+
--
5+
6+
BEGIN;
7+
DROP TABLE IF EXISTS "int16_regression_36689";
8+
CREATE TABLE "int16_regression_36689" ("rid" serial PRIMARY KEY,"rast" raster,"filename" text);
9+
INSERT INTO "int16_regression_36689" ("rast","filename") VALUES ('0100000100555555555555C53F555555555555C5BF0000000000002240000000000000474000000000000000000000000000000000E610000006000600450080370034002E00270021001E003A00360031002D00290025003A00360032002F002D002B003600330031002F002E002C002F002F002F002F002E002D0029002B002D00300031002E00'::raster,'int16.tiff');
10+
CREATE INDEX ON "int16_regression_36689" USING gist (st_convexhull("rast"));
11+
ANALYZE "int16_regression_36689";
12+
SELECT AddRasterConstraints('','int16_regression_36689','rast',TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE);
13+
END;
14+
VACUUM ANALYZE "int16_regression_36689";

0 commit comments

Comments
 (0)
Please sign in to comment.