@@ -60,7 +60,8 @@ def _load_test_table(cls, schemaname, tablename, basename=None):
60
60
with open (os .path .join (TEST_DATA_DIR , 'provider' , 'postgresraster' , basename + '.sql' ), 'r' ) as f :
61
61
sql = f .read ()
62
62
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!'
64
65
65
66
@classmethod
66
67
def setUpClass (cls ):
@@ -101,15 +102,17 @@ def gdal_block_compare(self, rlayer, band, extent, width, height, value):
101
102
})
102
103
gdal_rl = QgsRasterLayer (gdal_uri , "rl" , "gdal" )
103
104
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 ())
105
107
106
108
@classmethod
107
109
def tearDownClass (cls ):
108
110
"""Run after all tests"""
109
111
110
112
def testExtent (self ):
111
113
extent = self .rl .extent ()
112
- self .assertEqual (extent , QgsRectangle (4080050 , 2430625 , 4080200 , 2430750 ))
114
+ self .assertEqual (extent , QgsRectangle (
115
+ 4080050 , 2430625 , 4080200 , 2430750 ))
113
116
114
117
def testSize (self ):
115
118
self .assertEqual (self .source .xSize (), 6 )
@@ -119,7 +122,8 @@ def testCrs(self):
119
122
self .assertEqual (self .source .crs ().authid (), 'EPSG:3035' )
120
123
121
124
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 )
123
127
expected = 192.51044
124
128
self .assertAlmostEqual (identify .results ()[1 ], expected , 4 )
125
129
@@ -214,13 +218,16 @@ def testSpeed(self):
214
218
215
219
def _speed_check (schema , table , width , height ):
216
220
print ('-' * 80 )
217
- print ("Testing: {schema}.{table}" .format (table = table , schema = schema ))
221
+ print ("Testing: {schema}.{table}" .format (
222
+ table = table , schema = schema ))
218
223
print ('-' * 80 )
219
224
220
225
# GDAL
221
226
start = time .time ()
222
227
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' ,
224
231
'gdal' )
225
232
self .assertTrue (rl .isValid ())
226
233
# Make is smaller than full extent
@@ -229,10 +236,12 @@ def _speed_check(schema, table, width, height):
229
236
print ("Tiled GDAL start time: {:.6f}" .format (checkpoint_1 - start ))
230
237
rl .dataProvider ().block (1 , extent , width , height )
231
238
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 ))
233
241
# rl.dataProvider().block(1, extent, width, height)
234
242
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 ))
236
245
print ("Total GDAL time: {:.6f}" .format (checkpoint_3 - start ))
237
246
print ('-' * 80 )
238
247
@@ -246,10 +255,12 @@ def _speed_check(schema, table, width, height):
246
255
print ("Tiled PG start time: {:.6f}" .format (checkpoint_1 - start ))
247
256
rl .dataProvider ().block (1 , extent , width , height )
248
257
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 ))
250
260
rl .dataProvider ().block (1 , extent , width , height )
251
261
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 ))
253
264
print ("Total PG time: {:.6f}" .format (checkpoint_3 - start ))
254
265
print ('-' * 80 )
255
266
@@ -260,7 +271,8 @@ def testOtherSchema(self):
260
271
See: GH #34823"""
261
272
262
273
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' ),
264
276
'pg_layer' , 'postgresraster' )
265
277
self .assertTrue (rl .isValid ())
266
278
self .assertTrue (compareWkt (rl .extent ().asWktPolygon (),
@@ -303,7 +315,8 @@ def testSetSubsetString(self):
303
315
data .append (int (block .value (i , j )))
304
316
self .assertEqual (data , [136 , 142 , 161 , 169 ])
305
317
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 ())
307
320
self .assertEqual (int (stats .minimumValue ), 136 )
308
321
self .assertEqual (int (stats .maximumValue ), 169 )
309
322
@@ -321,7 +334,8 @@ def testSetSubsetString(self):
321
334
self .assertEqual (data , [136 , 142 , 145 , 153 ])
322
335
323
336
# 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 ())
325
339
self .assertEqual (int (stats .minimumValue ), 136 )
326
340
self .assertEqual (int (stats .maximumValue ), 153 )
327
341
@@ -449,6 +463,23 @@ def _round_trip(uri):
449
463
'username' : 'my username' ,
450
464
})
451
465
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
+
452
483
453
484
if __name__ == '__main__' :
454
485
unittest .main ()
0 commit comments