Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 13 May 2021 21:20

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Python, PostGIS et raster

Bonjour,

Pour ma culture personnelle, je souhaite acquérir des connaissances en Python pour manipuler des données spatiales.

Pas de souci pour l'instant pour me connecter à mon serveur PostgreSQL, et pour charger des couches vecteur ou non spatiales.

Par contre, je ne trouve pas de documentation claire pour charger et manipuler des couches raster issus de serveurs PostGIS.


Pour l'instant, j'essaie avec le module rasterio :

Code:

import psycopg2
import rasterio

connection = psycopg2.connect(host="hote", database="base", user="utilisateur")
curseur = connection.cursor()

curseur.execute("""SELECT * FROM monschema.matable_raster ;""") # il n'y a pas moyen de charger la couche directement ?
relief = curseur.fetchall() # est-ce correct ?
relief2 = rasterio.open(relief, drive='PostGISRaster') # cela me renvoie le binaire du raster visiblement, donc je suis contraint d'interrompre la commande

Auriez-vous une meilleure piste pour pouvoir manipuler ma couche PostGIS comme tout objet raster ?

Je veux en fait faire la même chose qu'un script sur R, où le chargement de la couche raster est très simple :

Code:

library(RPostgreSQL)
library(rpostgis)
pilote <- dbDriver("PostgreSQL")
connection <- dbConnect(pilote, host="hote", dbname="mabase", user="utilisateur")
relief <- pgGetRast(connection, c("monschema","matable_raster"))

Merci !

Hors ligne

 

#2 Fri 14 May 2021 10:37

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: Python, PostGIS et raster

Bonjour,

Utilisez la méthode read() pour obtenir les données pixel dans un tableau Numpy
https://rasterio.readthedocs.io/en/late … aster-data

ensuite avec Numpy les possibilités sont infinies

Hors ligne

 

#3 Fri 14 May 2021 14:05

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: Python, PostGIS et raster

Bonjour,

Merci, mais encore faut-il que mon objet raster soit chargé. Or ce n'est pas le cas avec mes commandes.

Code:

relief2 = rasterio.open(relief, drive='PostGISRaster')

n'est pas correct.

Dans votre lien, le dataset est chargé avec :

Code:

dataset = rasterio.open('example.tif')

Comment faire avec une couche PostGIS ?

Hors ligne

 

#4 Fri 14 May 2021 14:36

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: Python, PostGIS et raster

Hors ligne

 

#5 Fri 14 May 2021 15:57

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: Python, PostGIS et raster

Merci pour le lien,

C'est exactement ce que je cherchais.

Voici du coup mon code :

Code:

import psycopg2
connection = psycopg2.connect(host="hote", database="mabase", user="utilisateur")
curseur = connection.cursor()

from rasterio.io import MemoryFile
curseur.execute('''
  SET postgis.gdal_enabled_drivers TO 'GTiff' ;
  SELECT ST_AsGDALRaster(rast, 'GTiff') FROM monschema.matable_raster ;
 ''')
monraster_byt = row[0].tobytes()
monraster_dataset = MemoryFile(monraster_byt).open()
monraster = monraster_dataset.read()

Ça va me permettre de m'amuser un peu !

Merci encore, ça faisait 2 jours que je cherchais des liens en vain.

Dernière modification par Lsam (Fri 14 May 2021 16:21)

Hors ligne

 

#6 Fri 14 May 2021 16:13

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 940
Site web

Re: Python, PostGIS et raster

Bonjour,


Soit vous appelez l'utilitaire "raster2pgsql" depuis Python en suivant une recette parmi celles mentionnées https://gis.stackexchange.com/questions … le-of-qgis soit vous passez par l'ancien utilitaire "raster2pgsql.py" https://trac.osgeo.org/postgis/browser/ … r2pgsql.py maintenant remplacé par le binaire "raster2pgsql". Comme "raster2pgsql.py" n'est plus maintenu, il n'est pas garantie que la seconde option restera pérenne.


Cordialement

Hors ligne

 

#7 Fri 14 May 2021 22:50

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: Python, PostGIS et raster

Bonsoir,

Merci pour l'astuce, je la note dans un coin pour tester.

Cordialement

Hors ligne

 

Pied de page des forums

Powered by FluxBB