mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-08 00:05:09 -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 )
|
if ( bandBlock )
|
||||||
{
|
{
|
||||||
const double value = bandBlock->value( 0 );
|
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
|
else
|
||||||
{
|
{
|
||||||
|
@ -80,6 +80,11 @@ class TestPyQgsPostgresRasterProvider(QgisTestCase):
|
|||||||
if "QGIS_PGTEST_DB" in os.environ:
|
if "QGIS_PGTEST_DB" in os.environ:
|
||||||
cls.dbconn = os.environ["QGIS_PGTEST_DB"]
|
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_tiled_3035")
|
||||||
cls._load_test_table("public", "raster_3035_no_constraints")
|
cls._load_test_table("public", "raster_3035_no_constraints")
|
||||||
cls._load_test_table("public", "raster_3035_tiled_no_overviews")
|
cls._load_test_table("public", "raster_3035_tiled_no_overviews")
|
||||||
@ -170,7 +175,8 @@ class TestPyQgsPostgresRasterProvider(QgisTestCase):
|
|||||||
identify = rl.dataProvider().identify(
|
identify = rl.dataProvider().identify(
|
||||||
QgsPointXY(4080320, 2430854), QgsRaster.IdentifyFormat.IdentifyFormatValue
|
QgsPointXY(4080320, 2430854), QgsRaster.IdentifyFormat.IdentifyFormatValue
|
||||||
)
|
)
|
||||||
self.assertEqual(identify.results()[1], -9999)
|
|
||||||
|
self.assertEqual(identify.results()[1], None)
|
||||||
|
|
||||||
postgis_warning_logs = list(
|
postgis_warning_logs = list(
|
||||||
filter(
|
filter(
|
||||||
@ -944,11 +950,21 @@ class TestPyQgsPostgresRasterProvider(QgisTestCase):
|
|||||||
self.assertTrue(rl.isValid())
|
self.assertTrue(rl.isValid())
|
||||||
|
|
||||||
dp = rl.dataProvider()
|
dp = rl.dataProvider()
|
||||||
|
self.assertEqual(dp.sourceNoDataValue(1), -9999.0)
|
||||||
|
|
||||||
r = dp.identify(
|
r = dp.identify(
|
||||||
QgsPointXY(4080317.72, 2430635.68), Qgis.RasterIdentifyFormat.Value
|
QgsPointXY(4080317.72, 2430635.68), Qgis.RasterIdentifyFormat.Value
|
||||||
).results()
|
).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
|
# tile request returned no tiles, check nodata
|
||||||
ext = QgsRectangle.fromCenterAndSize(QgsPointXY(4080317.72, 2430635.68), 1, 1)
|
ext = QgsRectangle.fromCenterAndSize(QgsPointXY(4080317.72, 2430635.68), 1, 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user