mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-05 00:09:32 -04:00
Merge pull request #63335 from qgis/backport-63321-to-release-3_44
[Backport release-3_44] [pg][raster] Fix nodata identify
This commit is contained in:
commit
c324704f91
@ -325,7 +325,16 @@ QgsRasterIdentifyResult QgsRasterDataProvider::identify( const QgsPointXY &point
|
||||
if ( bandBlock )
|
||||
{
|
||||
const double value = bandBlock->value( 0 );
|
||||
results.insert( bandNumber, value );
|
||||
if ( ( sourceHasNoDataValue( bandNumber ) && useSourceNoDataValue( bandNumber ) &&
|
||||
( std::isnan( value ) || qgsDoubleNear( value, sourceNoDataValue( bandNumber ) ) ) ) ||
|
||||
( QgsRasterRange::contains( value, userNoDataValues( bandNumber ) ) ) )
|
||||
{
|
||||
results.insert( bandNumber, QVariant() ); // null QVariant represents no data
|
||||
}
|
||||
else
|
||||
{
|
||||
results.insert( bandNumber, value );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -80,6 +80,11 @@ class TestPyQgsPostgresRasterProvider(QgisTestCase):
|
||||
if "QGIS_PGTEST_DB" in os.environ:
|
||||
cls.dbconn = os.environ["QGIS_PGTEST_DB"]
|
||||
|
||||
# Clean all styles
|
||||
md = QgsProviderRegistry.instance().providerMetadata("postgres")
|
||||
conn = md.createConnection(cls.dbconn + " sslmode=disable ", {})
|
||||
conn.executeSql("DROP TABLE IF EXISTS layer_styles")
|
||||
|
||||
cls._load_test_table("public", "raster_tiled_3035")
|
||||
cls._load_test_table("public", "raster_3035_no_constraints")
|
||||
cls._load_test_table("public", "raster_3035_tiled_no_overviews")
|
||||
@ -170,7 +175,8 @@ class TestPyQgsPostgresRasterProvider(QgisTestCase):
|
||||
identify = rl.dataProvider().identify(
|
||||
QgsPointXY(4080320, 2430854), QgsRaster.IdentifyFormat.IdentifyFormatValue
|
||||
)
|
||||
self.assertEqual(identify.results()[1], -9999)
|
||||
|
||||
self.assertEqual(identify.results()[1], None)
|
||||
|
||||
postgis_warning_logs = list(
|
||||
filter(
|
||||
@ -944,11 +950,21 @@ class TestPyQgsPostgresRasterProvider(QgisTestCase):
|
||||
self.assertTrue(rl.isValid())
|
||||
|
||||
dp = rl.dataProvider()
|
||||
self.assertEqual(dp.sourceNoDataValue(1), -9999.0)
|
||||
|
||||
r = dp.identify(
|
||||
QgsPointXY(4080317.72, 2430635.68), Qgis.RasterIdentifyFormat.Value
|
||||
).results()
|
||||
self.assertEqual(r[1], -9999.0)
|
||||
|
||||
# Nodata value
|
||||
self.assertEqual(r[1], None)
|
||||
|
||||
r = dp.identify(
|
||||
QgsPointXY(4080106.29, 2430678.29), Qgis.RasterIdentifyFormat.Value
|
||||
).results()
|
||||
|
||||
# Valid value
|
||||
self.assertAlmostEqual(r[1], 184.16825, 4)
|
||||
|
||||
# tile request returned no tiles, check nodata
|
||||
ext = QgsRectangle.fromCenterAndSize(QgsPointXY(4080317.72, 2430635.68), 1, 1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user