Suite

Comment classer un raster à l'aide du plugin QGIS interagissant avec PostGIS ?

Comment classer un raster à l'aide du plugin QGIS interagissant avec PostGIS ?


Je développe un plugin QGIS où les utilisateurs peuvent entrer certains paramètres (comme la distance, la profondeur, la surface…) et en soumettant le plugin, interagir avec une base de données PostGIS et extraire les informations des couches vectorielles et raster.

Je souhaite classer un raster DEM en substituant les valeurs de pixels, par exemple :

Si 200 < val < 210 Alors val = 205

Si 211 < val < 220 Alors val = 215

Cette classification est basée sur la valeur saisie par les utilisateurs à l'aide d'un TextBox ou LineEdit

J'utilise la requête ci-dessous et cela fonctionne mais manuellement pas automatiquement :

Cette requête a pris 2 secondes pour un raster DEM avec (X:6000 , Y:5000) et (MIN(val):200,MAX(val):2400)

Donc à chaque fois j'ai besoin de préciser l'écart.

Existe-t-il un moyen de permettre aux utilisateurs de spécifier l'intervalle qu'ils souhaitent appliquer pour toutes les valeurs de raster ?


si vous avez un intervalle constant, vous n'avez pas besoin d'une table de consultation. Vous pouvez utiliser la formule suivante

(int([email protected]) / intervalle) * intervalle + intervalle/2

bien sûr, / doit être une division entière (arrondir à l'entier ci-dessous)


Sur la base de la bonne idée de la réponse de @radouxju, je résous ce problème.

Au lieu d'utiliser la fonction Reclass, j'ai utilisé la fonction MapAlgebra donc la requête est :

SELECT ST_MapAlgebra(a.rast,b.rast, '(ceil([rast1]/10)*10)+5') AS newrast de my_raster1 a, my_raster2 b

J'ai utilisé la fonction 'ceil' pour obtenir le plus petit entier non inférieur à l'argument voir ce lien

Et voici comment je l'ai utilisé dans le code de mon plugin QGIS :

reclass_val = float(self.dlg.lineEdit.text()) cur.execute("créer un exemple de table en tant que SELECT ST_MapAlgebra(a.rast,b.rast, '(ceil([rast1]/%s)*%s)+ (%s/2)') AS newrast de my_raster1 a, my_raster2 b",(reclass_val ,reclass_val ,reclass_val ))

j'espère que cela va aider


Voir la vidéo: - Load raster into PostGIS - with DB Manager - View in QGIS