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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Thu 15 May 2014 10:55

FloG38
Participant occasionnel
Date d'inscription: 5 Mar 2014
Messages: 15

PostGis 2 : convertir table geometry en table raster

Bonjour,

Tout d'abord je précise que je travail sur Windows XP avec les versions suivantes :
- PostGre : "PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit"
- PostGis:"POSTGIS="2.1.1 r12113" GEOS="3.4.2-CAPI-1.8.2 r3924" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.10.0, released 2013/04/24" LIBXML="2.7.8" LIBJSON="UNKNOWN" TOPOLOGY RASTER"

Je cherche a rasteriser une table geometry dans PostGre. Si j'ai bien compris il faut utiliser pour cela "ST_AsRaster", j'ai donc consulté la page PostGIS : http://postgis.net/docs/RT_ST_AsRaster.html . J'ai essayé toutes les possibilités décrites dans cette page.
Les seules requêtes qui marchent sont celles où je renseigne la taille des tuiles (width, height) mais je ne peux du coup pas renseigner la taille des pixels et lorsque que je veux visualiser la vue sur QGIS 2.2, j'ai un message d'erreur me disant que ma couche est invalide, je suppose donc que je l'ai mal rasterisé.

A la base, je dispose d'une table geometry avec laquelle je voudrais créer un raster avec les caractéristiques suivantes:
- taille pixel: 1.5, -1.5
- emprise: xmin, ymin -> 962169.10, 6467622.06    xmax, ymax -> 1021575.52, 6527092.02 (ce qui correspond à l'emprise de la couche SHAPE)
-pixeltype: 16BSI

Il me semple donc je dois faire la requête suivante:

CREATE TABLE monschema.monraster AS
SELECT ST_AsRaster(geom,1.5,-1.5,962169.10,6467622,06,'16BSI',1,0,0,0,false) as rast
FROM monschema.matable;

ALTER TABLE mon schema.monraster ADD id serial;
CREATE INDEX monraster_gist ON monschema.monraster USING gist(st_convexhull(rast));

CREATE OR REPLACE VIEW monschema.v_monraster AS
SELECT st_convehull(monraster.rast)::geometry(multipolygon,2154) AS geom
FROM monschema.monraster


Seulement lorsque je l'exécute j'ai le message d'erreur suivant:
ERREUR: rt_raster_gdal_rasterize: Could not add band to GDALDataset

Je me tourne vers vous pour savoir à quel moment j'effectue une erreur (ou plusieurs), et si vous avez une idée de la requête que je dois lancer pour obtenir le raster que je souhaite.

Je vous remercie d'avance pour vos réactions.

Hors ligne

 

#2 Mon 19 October 2015 15:51

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

Je me permets de relancer ce post étant donné que je vois qu’il n’a aucune réponse.

Pour diverses raisons, je souhaite rasteriser une couche vecteur via postgis (interface = pgadmin 1.20). Je ne souhaite pas passer par Qgis (avec lequel je connais bien la méthode maintenant).

Pour cela, voici ce dont je dispose :

- une couche comm qui correspond à des communes (donc polygones) sur un périmètre donné et assez petit, dotée d’un champ « geom »
- une couche raster .tiff monobande qui pourrait, sous Qgis via Gdal, me servir de raster emprise.

Je veux une résolution de pixels de 5.0 (la même que mon raster emprise), un encodage de 32 bits, et je souhaite que, en dehors de mon périmètre de communes à rasteriser, les valeurs soient nulles.

Je ne sais absolument pas comment m’y prendre pour rasteriser via une requête sql, sauf qu’il faut passer par la fonction ST_AsRaster à ce que j’ai compris. Il y a bien un tuto sur internet (http://postgis.net/docs/RT_ST_AsRaster.html) mais en anglais (je progresse lentement dans la langue ^^’’). De plus, je ne suis même pas sûre que je comprendrais même s’il était en français, puisque j’ai du mal à déchiffrer la multitude de synopsis proposés et surtout, je ne sais pas lequel utiliser...

Quelqu’un pourrait-il m’aider à écrire ma requête, sachant que je n’ai même pas de première proposition à faire étant donné que je n’y comprends strictement rien...

Ça ressemblerait à qqch comme ça :

CREATE TABLE AS
SELECT ST_AsRaster(geom, ???????...)

Comment faire comprendre à la machine que je souhaite rasteriser en fonction de mon raster emprise ? Même avec les exemples de requête de FloG38, je ne saisi pas le fonctionnement, d’autant plus que je ne sais pas si elles sont justes...

Merci infiniment pour votre aide précieuse !!!

Bien cordialement,

Lucie D.

Hors ligne

 

#3 Tue 20 October 2015 15:13

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Après de nombreuses recherches, ci-dessous quelques précisions concernant mon travail :

En fait j'ai déjà importé la couche raster "emprise" dans postgis (tuiles = 50x50).

Je lance la requête suivante :

Code:

CREATE TABLE lucie.raster
AS
SELECT ST_AsRaster(comm.geom,import_raster6.rast,'8BUI',1,0,false)
FROM lucie.comm,lucie.import_raster6;

sachant que comm est ma couche vecteur et import_raster6 est mon raster "emprise".

Je me demande vraiment comment fonctionne ces requêtes, quelles qu'elles soient...En effet, comment peut-on, avec cette formule, rasteriser en fonction d'un champ défini de ma couche vecteur? Le 1 correspond-t-il à la valeur que vont prendre tous les pixels de ma couche raster finale?

J'ai également lancé la requête suivante:

Code:

CREATE TABLE lucie.raster2
AS
SELECT ST_AsRaster(comm.geom,50,50,'8BUI',1,0,st_upperleftx(import_raster6.rast),st_upperlefty(import_raster6.rast),st_skewx(import_raster6.rast),st_skewy(import_raster6.rast),false) as rast2
FROM lucie.comm,lucie.import_raster6;

L'une comme l'autre, ces requêtes fonctionnent (ou en tout cas s'exécutent). En revanche, lorsque je souhaite visualiser ces rasters dans QGis, le sablier de ma souris tourne dans le vide et je ne parviens pas à les visualiser.

Que faire???

Je sais que mes requêtes ne sont pas bonnes, mais j'ai vraiment du mal à saisir le sens des synopsis proposés par le site de postgis...

A nouveau, je vous remercie pour votre aide!!!!!

Bien cordialement,

Lucie D.

PS :

Windows 7
QGis 2.10
Postgis 2.1.7
pgadmin 1.20
postgresql 9.4

Dernière modification par Lucie D. (Tue 20 October 2015 15:15)

Hors ligne

 

#4 Tue 20 October 2015 15:22

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Que pensez-vous de:

Code:

CREATE TABLE lucie.raster3
AS
SELECT ST_AsRaster(comm.geom,2.5,-2.5,'8BUI',1,0,null,null,0,0,false) as rast3
FROM lucie.comm,lucie.import_raster6;

scalex et scaley correspondent-il bien à la taille des pixels?

Dernière modification par Lucie D. (Tue 20 October 2015 15:23)

Hors ligne

 

#5 Wed 21 October 2015 13:46

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

J'ai lancé la requête suivante en utilisant un serveur distant :

Code:

CREATE TABLE essai_lucie.raster_bati
AS
SELECT ST_AsRaster(bati.geom,50,50,'8BUI',1,0,NULL,NULL,0,0,false) as rastbati
FROM essai_lucie.bati,essai_lucie.import_raster4;

J'ai bien cru que mon raster ne s'afficherait pas non plus, mais après 15 minutes d'attente!!!, il s'affiche, youpiiii!!!

En revanche, dès que je veux faire le moindre zoom dessus, ça met un temps fou à faire la mise au point! De plus, je me demande s'il n'y a pas un léger décalage avec ma couche vecteur de base...Impossible à voir puisque depuis mon dernier essai de zoom, la couche raster que je viens de créer ne s'affiche plus...

Par ailleurs, ce premier travail n'est qu'un essai. Je souhaiterais à terme rasteriser sous postgis en fonction d'un champ défini de ma couche vecteur, est-ce possible (puisque pour l'instant je n'arrive à affecter qu'une valeur unique, en l’occurrence ici, la valeur 1!)?

En vous remerciant par avance pour votre aide!!!

Bonne journée.

Bien cordialement,

Lucie D.

Hors ligne

 

#6 Mon 02 November 2015 13:53

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Personne pour me répondre?
Snif... T_T

...

Hors ligne

 

#7 Mon 02 November 2015 14:17

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9853
Site web

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

1. Pourquoi y a t'il deux tables dans ta clause FROM ? En fonction de quel(s) champ(s) souhaites tu créer la valeur du raster ?

2. As tu essayé de découper ton raster en tile ? Dans ton cas je pense que tu as un gros raster dans une seule ligne (peux tu confirmer ?) La fonction st_tile pourrait t'adier : http://postgis.net/docs/manual-2.1/RT_ST_Tile.html

3. As tu pensé à créer un index sur ton raster ?

Code:

CREATE INDEX srtm_tiled_rast_gist_idx ON srtm_tiled USING GIST (ST_ConvexHull(rast));

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#8 Tue 03 November 2015 10:13

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour Yves,

Merci pour ta réponse.

En fait, je pense que j'essaye trop de calquer la méthode de rasterisation via gdal sous qgis.

Tous mes posts précédents concernant ce sujet sont basés sur un essai et donc pas sur les couches sur lesquelles je dois travailler à terme.

Je m'explique.

En fait je travaille sur la réalisation de couches plutôt précises (25m²) d'occupation du sol. L'objectif à terme est de tout automatiser (nous pensions donc passer l'intégralité des commandes (et il y en a beaucoup) sous postgresql). Mais peut-être serait-il plus logique d'écrire un script sous python qui permette de cliquer sur un seul bouton pour que tout se lance automatiquement du début à la fin. Pour l'instant nous avons automatisé plusieurs commandes, mais elles ne sont pas liées les unes aux autres... Le problème avec python, c'est que ni moi ni mes collègues ne maitrisons la bête...^^''

Bref. Du coup nous pensions optimiser le temps d'attente en cliquant sur un seul bouton (histoire de pouvoir travailler sur une autre affaire à côté quoi...) mais je ne sais pas si c'est réalisable. On va partir du principe que oui... ^^"

Ça c'était l'introduction. Dans cette affaire d'occupation du sol, nous travaillons à la fois avec des couches raster et vecteur. Nous avons besoin de rasteriser bon nombre de couches correspondant entre autres à la BD TOPO, etc. Et ensuite nous les compilons, puis nous les retravaillons avec une méthode bien définie.

Le problème c'est que les temps de rasterisation (même via gdal qui est d'après mes observations plus rapide que GRASS) sont particulièrement longs sous qgis. Nous souhaitions aussi savoir si postgresql permettait d'accélérer la manip (ce qui n'a pas l'air d'être le cas...).

Bref. J'ai donc par exemple une couche des zones végétation d'un territoire. Nous affectons des codes à chaque entité via une requête sql et qui correspond à la nature de l'occupation du sol (par exemple ici ligneux, non ligneux, etc.). C'est en fonction de ce champs "code" que nous souhaitons rasteriser (souvent à l'échelle d'un département).

Je pensais que, comme dans GDAL, il fallait que j'importe mon raster emprise sous postgresql afin qu'il me serve d'emprise de rasterisation (histoire de dire que je veux des pixels uniquement à l'intérieur des limites départementales).


Pour tout t'avouer, la table raster dans ma clause from n'a apparemment pas lieu d'être...Je vais donc l'enlever (je l'avais mise car dans un des synopsis de st_asraster, il était écrit : st_asraster(geometry geom,raster ref...du coup je me suis dit que j'avais besoin de ma couche raster...mais ça c'était avant que je ne change de type de synopsis et j'ai oublié de l'enlever...).

Pour moi, dans le code suivant :

Code:

CREATE TABLE essai_lucie.raster_bati
AS
SELECT ST_AsRaster(bati.geom,50,50,'8BUI',1,0,NULL,NULL,0,0,false) as rastbati
FROM essai_lucie.bati,essai_lucie.import_raster4;

Je pensais que le 50,50 découpait mon raster en tile... Mais très sincèrement c'est encore bien flou tout ça...

Je vais essayer de créer un index sur mon raster (je ne savais même pas que la création d'index pouvait optimiser le temps d'affichage à l'écran...) =p

Je teste et je reviens!

Désolée pour le pavé et merci pour ton aide!

Bien cordialement,

Lucie D.

PS : du coup, comment rasteriser en fonction de mon champ "code"? Merci!!! smilesmilesmile

Dernière modification par Lucie D. (Tue 03 November 2015 10:18)

Hors ligne

 

#9 Tue 03 November 2015 10:47

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9853
Site web

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

La doc indique plusieurs variantes, regroupés en 3 groupes (2  variants pour le 1er, 4 pour les deux suivants). Laquelle comptes tu utiliser ?

Code:

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, double precision gridx, double precision gridy, text pixeltype, double precision value=1, double precision nodataval=0, double precision skewx=0, double precision skewy=0, boolean touched=false);

Ici :
* geometry : colonne géométrique
* scalex et scaley
* gridx et gridy
* pixeltype
* la taille est issue de l'étendue de l'ensemble des géométries

Le dernier groupe te permet de définir la largeur et hauteur de ton raster final. Donc ici, il n'y a pas de notion de tiles.

Tu peux modifier la taille des tuiles comme ceci :

Code:

SELECT ST_Tile(st_AsRaster(the_geom, 50, 50,'8BUI',1,0,NULL,NULL,0,0,false),1,250,250) FROM formation.parcelle;

Dernière chose : tu devrais créer des overviews également pour améliorer l'affichage ! Il n'est pas nécessaire d'afficher ton raster à la pleine résolution si tu l'affiches en totalité dans QGIS !

Y.
PS : attention, j'ai peu d'expérience avec les Raster smile


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#10 Tue 03 November 2015 10:54

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Super!

J'ai lancé la requête sql suivante :

Code:

CREATE TABLE lucie.raster
AS
SELECT ST_AsRaster(bati.geom,50,50,'8BUI',1,0,NULL,NULL,0,0,false) as rastbati
FROM lucie.bati;

et ça marche nickel, ma couche raster s'est créée en même pas une seconde (je n'ai fait que supprimer la deuxième table dans ma clause from au final). Elle s'affiche nickel dans Qgis et très rapidement (même avec les zooms aucun problème).

J'avais essayé dans un premier temps de créer un index sur mon ancienne couche comme Yves me le suggérait. Mais hélas ça n'a rien changé.

Bon maintenant j'aimerais savoir comment régler la résolution de mes pixels tout en découpant mon raster en tile, comment rasteriser en fonction d'un champ donné ("code") et surtout comment rasteriser en fonction de mon raster emprise histoire de ne pas rasteriser en dehors de mon périmètre donné...?

Merci beaucoup!

Bien cordialement,

Lucie D.

Hors ligne

 

#11 Tue 03 November 2015 11:14

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

Quelques éléments sur ce processus de rastérisation:

D'abord attention au SQL: rajouter une table dans une clause FROM sans la lier aux autres tables de la requete entraine ce qu'on appelle un produit cartésien entre les deux tables: le nombre de ligne de résultat est égal au produit du nombre de ligne de chaque table: si la table A contient 100 lignes et la table B en contient 5000, alors la requete (sans prendre en compte le where) aura 500 000 lignes.

Pour rastériser une zone définie par l'emprise d'un raster en base, il faut faire une jointure spatiale entre la table géographique et le raster:

Code:

SELECT ST_AsRaster(bati.geom,50,50,'8BUI',1,0,NULL,NULL,0,0,false) as rastbati
FROM lucie.bati b join lucie.import_raster4 r on st_intersects (b.geom, r.rast);

Pour rastériser en fonction d'un code, il faut attribuer une valeur de pixel en fonction de la zone intersectée:
Soit le code contient directement la valeur a mettre dans le raster, et vous l'utilisez directement dans la requete, soit le code pointe vers une table contenant la ou les valeurs du pixel, et vous devez rajouter cette table dans la requete:

Code:

SELECT ST_AsRaster(bati.geom,50,50,'8BUI',b.code,0,NULL,NULL,0,0,false) as rastbati
FROM lucie.bati b join lucie.import_raster4 r on st_intersects (b.geom, r.rast);

C'est là que l'index spatial dont parlait Yves est capital, sur les deux tables (colonnes geom et rast doivent etre indéxées).
Les index ne sont utilisés que lorsqu'une clause where dans le requete met en oeuvre la ou les colonnes indéxées (meme dans ce cas, l'index n'est pas forcément utilisé).

Pour la performance des requetes (et meme en général), il faut que le raster soit tuilé dans la base: la table contenant le raster doit contenir beaucoup de lignes contenant une petite tuile raster (100x100, 50x50, en général des multiples entiers de la taille du raster)
La commande de chargement raster2pgsql permet ce tuilage.

N'oubliez pas, enfin, que Postgis Raster n'est pas fait pour l'affichage ou le stockage (pas performant) mais vraiment pour le traitement raster, comme ce que vous faites.

Nicolas

Hors ligne

 

#12 Tue 03 November 2015 12:05

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis 2 : convertir table geometry en table raster

Re,

Pour aller un peu plus loin dans l'explication entre géometrie et raster:

En faisant l'intersection de vos polygones avec le raster, vous obtenez tout plein de petits rasters correspondant a chaque intersection: ces petits blocs ne sont pas alignés et ne représentent pas une couverture raster super propre. (comme la couche d'entrée servant de masque, par exemple)

Pour en faire une couverture, il faut faire l'union de tous ces blocs avec st_union, puis redécouper en tuiles histoire de ne pas stocker un gros raster dans une seule ligne de la table.

Code:

-- ici, le raster servant au découpage est aussi utilisé pour spécifier les parametres des rasters produits.
-- si vous devez changer le type du raster produit, il faut utiliser une autre version de st_asRaster

drop table if exists lucie.raster;
create table lucie.raster as (
  SELECT st_tile(
                st_union(
                  st_asRaster(b.geom, r.rast, '8BUI', b.code, 0, FALSE)), 50, 50) as rast
  FROM lucie.bati b JOIN lucie.import_raster4 r ON st_intersects(b.geom, r.rast)
);

(Le résultat sur les images (couche batiments dont la hauteur est utilisée (champ code) pour fabriquer le raster)


Il existe bcp de méthodes pour faire ce que vous voulez, suivant les couches d'entrée, le volume, les usages, etc.

Un tuto bien sympa sur le sujet: http://geospatialelucubrations.blogspot … ector.html

Nicolas


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#13 Tue 03 November 2015 12:22

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis 2 : convertir table geometry en table raster

(un oubli: postgis est parfait pour faire le genre de traitement que vous voulez faire: un ensemble de requetes qui tournent en fonction de quelques parametres et qui réalisent des opérations geospatiales complexes/volumineuses)

Nicolas

Hors ligne

 

#14 Tue 03 November 2015 14:38

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Super!

Merci beaucoup pour toutes ces explications qui m'éclairent énormément!!!

Yves, pour répondre à ta question, voici le synopsis que j'utilise (3ème variante du troisième groupe) :

Code:

raster ST_AsRaster(geometry geom, integer width, integer height, text pixeltype, double precision value=1, double precision nodataval=0, double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

Mais je crois que, comme j'utilise déjà un raster de référence, je peux me contenter de la 1ère variante du 1er groupe, comme le suggère Nicolas :

Code:

raster ST_AsRaster(geometry geom, raster ref, text pixeltype, double precision value=1, double precision nodataval=0, boolean touched=false);

Sauf que, au lieu d'indiquer une valeur par défaut que prendront mes pixels, j'indique tout simplement mon champ à partir duquel je souhaite rasteriser!

Si j'ai bien compris, le raster final prendra les mêmes caractéristiques que mon raster emprise (taille des pixels, inclinaison, etc.).

Nicolas, merci beaucoup pour ce tuto que je cherche depuis des semaines et sur lequel je n'ai jamais réussi à tomber! =p

Je fais des essais et je vous tiens au courant!

Merci infiniment pour votre aide précieuse!

Bien cordialement,

Lucie

Dernière modification par Lucie D. (Tue 03 November 2015 14:40)

Hors ligne

 

#15 Thu 05 November 2015 09:05

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour à tous,

Après plusieurs essais, je suis plus que satisfaite du résultat et des propositions qu'Yves et Nicolas m'ont faites.

Le tuto m'a énormément aidée (mais m'a aussi bien pris la tête pour le traduire ^^" surtout que c'est assez technique tout ça =p).

L'outil ST_AsRaster présente l'avantage d'être très rapide!!! Mais le problème, c'est qu'il ne me permet pas d'avoir les mêmes emprises entre mon raster de référence et ma couche raster finale. J'ai donc testé le code proposé suivant (sans le st_intersects()):

Code:

CREATE TABLE lucie.raster4
AS
SELECT ST_MapAlgebra(raster3.st_tile,ST_AddBand(ST_MakeEmptyRaster(r.rast),'8BUI'::text,-9999,-9999),'[rast1]','8BUI','SECOND') rast
FROM lucie.raster3,lucie.import_raster6 as r;

Le fait que je ne demande pas d'intersection entre mes deux couches (vecteur et raster de référence) rend la requête extrêmement longue, et impossible à afficher dans QGis (je retombe donc à mon point de départ). La requête me retourne 30 841 600 lignes et prend presque 3h!!! Peut-être parce que, comme l'indiquait Nicolas, l'outil me fait une sorte de produit cartésien entre mes deux tables... sad ).

La requête suivante fonctionne quant à elle très bien :

Code:

CREATE TABLE lucie.raster
AS
SELECT ST_Tile(ST_Union(ST_AsRaster(b.geom,r.rast,'8BUI',b.hauteur,NULL,false)),50,50) as rastbati
FROM lucie.bati as b join lucie.import_raster6 as r on st_intersects (b.geom, r.rast);

Celle-là également :

Code:

CREATE TABLE lucie.raster2
AS
SELECT ST_Tile(ST_Union(ST_AsRaster(b.geom,rast,'8BUI',b.hauteur,NULL)),50,50) as rastbati
FROM lucie.bati as b , (SELECT rast FROM lucie.import_raster6 LIMIT 1) as rast;

mais je ne comprends pas l'utilité du

Code:

SELECT rast FROM lucie.import_raster6 LIMIT 1

Est-ce que c'est pour accélérer la manip?

Toutefois, ces deux dernières requêtes ne me permettent pas de conserver l'emprise de mon raster de référence, et en plus,si j'ai bien compris, les tuiles entre mon raster ref et mon raster final ne sont pas alignées...Je ne sais pas en quoi c'est problématique, mais je préfère obtenir un résultat le plus propre possible.

Par ailleurs, j'ai cru comprendre qu'avec ST_AsRaster, la valeur attribuée à chaque pixel est celle du polygone qui intersecte le centroide du pixel...quelque soit la surface de ce polygone qui recouvre le pixel...Cette méthode ne me semble donc pas très correcte alors que, dans notre travail, nous souhaitons être les plus justes possibles. (Jusqu'à présent, nous utilisions Gdal pour notre travail, et il me semble que ST_AsRaster est justement basé sur cet outil donc je pense que notre travail jusqu'à présent n'était pas très précis...)

Du coup, je suis passée à ST_ExtractToRaster() qui me donne (à première vue) exactement le résultat que je cherchais...! Exactement les mêmes emprises entre mon raster ref et mon raster final,même taille de pixel, même alignement... En revanche, pour une requête qui s'effectue en une fraction de seconde sur ST_AsRaster, ST_ExtractToRaster prend presque 3 minutes. Mon essai porte seulement sur trois communes et sur une quantité pas très importante de polygones à rasteriser, mais lorsque je passerai à mon vrai travail, il s'agit de rasteriser à l'échelle d'un département (voire d'une région à terme!!!) un nombre très important de polygones. Avec GDal, il me fallait plus de 12 heures pour rasteriser un département... Je vais faire des tests sous postgis avec ST_ExtractToRaster() pour voir si ça prend un peu moins de temps.

L'objectif en passant sous postgis est d'automatiser le travail et de le rendre plus efficace.

Voilà la requête que j'ai entrée:

Code:

CREATE TABLE lucie.raster5
AS
SELECT ST_ExtractToRaster(ST_AddBand(ST_MakeEmptyRaster(rast),'8BUI'::text,-9999,-9999),
'lucie',
'bati',
'geom',
'hauteur',
'VALUE_OF_BIGGEST')rast
FROM lucie.import_raster6;

Le souci avec ça, c'est que j'aimerais pour diverses raisons passer les -9999 en NULL.
Or, lorsque je remplace les -9999 en NULL dans ma requête, pgadmin me retourne le message suivant que je ne comprends pas :

Code:

la fonction st_addband(raster, text, unknown, unknown) n'est pas unique

.

Comment faire, je veux que là où il n'y a pas de données dans ma couche vecteur, le raster prenne la valeur nulle...

En vous remerciant pour votre aide!!!

Lucie D.

PS : peut-on dessiner des tuiles sous QGis comme ci-joint?

Merci!!!


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#16 Thu 05 November 2015 09:41

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9853
Site web

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

Pour le problème des NULL je suppose que tu dois caster (hehe, jolie terme n'est ce pas ?) :

Code:

ST_AddBand(ST_MakeEmptyRaster(rast),'8BUI'::text,NULL:int8NULL::int8),

Pour les tiles, je suppose que oui mais je ne suis pas sur que cela correspondent à la même chose entre ta capture et les données en base.

Code:

SELECT st_envelope(raster) FROM moraster;

Voir http://postgis.net/docs/RT_ST_Envelope.html

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#17 Thu 05 November 2015 10:23

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

Juste une reponse rapide:
Ne faites JAMAIS une requete avec deux tables dans le from sans les lier, sauf si une table a une seule entrée (ou juste qq unes).
3h et 30M de lignes pour rien, en fait.
le jour ou vous avez des tables volumineuse, la requete ne finira jamais..

Si vous devez utiliser la colonne raster pour initialiser votre raster avec les memes valeurs, utilisez une sous requete comme dans le tuto.

Code:

(select rast from raster limit 1)

Une seule ligne retournée contre 30M.

Nico

Hors ligne

 

#18 Thu 05 November 2015 13:32

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Super!

Merci pour ces indications, effectivement, le NULL::int8 fonctionne très bien! Et le st_envelope aussi =^_^=

Du coup j'ai fait des essais avec ST_ExtractToRaster sur une couche végétation ayant la même emprise que bati, mais ayant beaucoup plus de polygones...Au lieu de mettre 3 minutes, la machine en met presque 1h (et encore, j'ai arrêté la requête car pour moi c'est bien trop long!).

Du coup, si on part du principe que ST_AsRaster nous convient (en fermant les yeux sur la méthode d’attribution des valeurs à chaque pixels...), je cherche un moyen pour que mon raster de référence et mon raster final aient la même emprise...

Avec la requête suivante :

Code:

CREATE TABLE lucie.raster
AS
SELECT ST_Tile(ST_Union(ST_AsRaster(b.geom,r.rast,'8BUI',b.hauteur,NULL,false)),50,50) as rastbati
FROM lucie.bati as b join lucie.import_raster6 as r on st_intersects (b.geom, r.rast);

nous sommes d'accord qu'il y a trois inconvénients:

- tiles entre raster ref et raster final non alignés (mais je ne sais pas si ça risque de poser problème dans mon travail, sachant que je veux rasteriser plusieurs couches et ensuite les compiler entre elles (du genre : if(A>0,A,if(B>0,B,NULL())))
- les emprises ne sont pas les mêmes (léger décalage en haut à gauche et emprise raster final plus petite)
- les valeurs des pixels peuvent parfois ne pas être représentatives (méthode d'attribution des valeurs des polygones à chaque pixel non précise)

Du coup, dans un premier temps, pour régler l'histoire de l'emprise (ce qui pour moi est le plus important), j'ai lancé la requête suivante:

Code:

DROP TABLE IF EXISTS lucie.raster3;
CREATE TABLE lucie.raster3
AS
SELECT ST_Tile(ST_Union(ST_AsRaster(b.geom,2.5,-2.5,'8BUI',b.hauteur,0,st_upperleftx(r.rast),st_upperlefty(r.rast),st_skewx(r.rast),st_skewy(r.rast))),50,50)
FROM lucie.import_raster6 as r, lucie.bati as b
WHERE st_intersects(b.geom,r.rast);

Les upperleftx et upperlefty permettent d'avoir deux emprise qui commencent bien exactement au même endroit en haut à gauche (puis sens de lecture je suppose de haut en bas et de gauche à droite...?). Il me faudrait pouvoir fixer également le coin en bas à droite pour avoir deux emprises parfaitement superposées...Mais je n'y parviens pas...le raster final a toujours une emprise plus petite...

En parallèle, j'ai également lancé la requête suivante:

Code:

CREATE TABLE lucie.raster7
AS
SELECT ST_MapAlgebra(raster3.rast,ST_AddBand(ST_MakeEmptyRaster(r.rast),'8BUI'::text,NULL::int8,NULL::int8),'[rast1]','8BUI','SECOND') rast
FROM lucie.raster3,lucie.import_raster6 as r
WHERE St_Intersects(raster3.rast,r.rast);

Ça n'a pris que quelques secondes, mais elle me retourne 42535 lignes et ne veut pas s'ouvrir dans QGis (je suis sensée avoir 6400 lignes...).

Mais que se passe-t-il, par la barbe de Merlin!!! 0_X

J'ai également une question concernant les paramètres gridx et gridy...A quoi correspondent-ils (possibilité de les intégrer dans plusieurs variantes de la fonction st_asraster()). Est-ce que justement ils ne me permettraient pas d'avoir la même emprise entre mon raster ref et mon raster final???

A nouveau, je vous remercie sincèrement pour votre aide.

Bien cordialement,

Lucie D.

Dernière modification par Lucie D. (Thu 05 November 2015 13:35)

Hors ligne

 

#19 Fri 20 November 2015 11:52

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour à tous!

Bon voilà, même si je sais que vous m'avez déjà énormément aidée sur le sujet, je me permets de revenir sur le forum parce que je pense que quelque chose m'échappe.

L'outil St_ExtractToRaster() correspond en théorie exactement à ce que je recherche, et la requête à taper est particulièrement claire, simple et courte. En revanche, ce qui est moins court, c'est son temps d'exécution! Presque 3 heures pour une couche vecteur de 4000 Ko. Pour info, quand je rasterise cette même couche sous QGis via Gdal, ça ne prend que quelques secondes pour le même résultat, et j'ai bien la même emprise entre mon raster de référence et mon raster final!!!!!

Le but de mes recherches sous postgresql est justement d'optimiser le temps d'attente lors des rasterisations et de les enchaîner! Pour l'instant je fais des tests à l'échelle de deux ou trois communes, mais le but à terme est de rasteriser en un seul coup à l'échelle régionale (sans compter que la fusion récente des régions double parfois la surface du territoire concerné!!!).

Donc le seul souci avec ST_ExtractToRaster() est le temps d'exécution bien trop long!!! J'en conclue donc que ST_AsRaster() (qui est beaucoup plus rapide) est bien le bon outil. L'ennui, c'est que je ne parviens pas à obtenir la même emprise entre mon raster référence et mon raster final!!!

En gros il me faudrait un mix entre ST_ExtractToRaster (même emprise) et ST_AsRaster (rapidité!!!).

J'ai donc essayé de changer de synopsis avec ST_AsRaster(). Je m'explique.

J'ai une couche vecteur vegetation que je souhaite rasteriser en fonction de mon raster de référence import_raster6. Je précise (car c'est problématique pour la suite) que certains polygones de ma couche vecteur vegetation sont en dehors de l'emprise de mon import_raster6 ou à cheval dessus.

Je lance la requête suivante:

Code:

CREATE TABLE lucie.veget
AS
SELECT ST_Tile(ST_Union(ST_AsRaster(v.geom,2.5,-2.5,'8BUI',v.prec_plani,NULL::int8,st_upperleftx(r.rast),st_upperlefty(r.rast),st_skewx(r.rast),st_skewy(r.rast))),50,50)
FROM lucie.import_raster6 as r, lucie.vegetation as v
WHERE st_intersects(v.geom,r.rast);

Les paramètres st_upperleftx() et st_upperlefty() me permettent d'obtenir une emprise raster final qui commence en haut à gauche exactement au même endroit que l'emprise de mon import_raster6 (super=)) mais elle se termine en bas à droit au même endroit que l'emprise de la couche vecteur vegetation (pas cool sad).

Mais le plus gros problème avec l'utilisation de st_upperleftx et st_upperlefty, c'est que tous les polygones qui sont à cheval sur l'emprise de mon import_raster6 ne sont pas pris en compte (alors que je souhaite que ces polygones soient découpés en fonction de l'emprise import_raster6 puis rasterisés lorsqu'ils sont à l'intérieur de l'emprise import_raster6). Il faut donc que j'utilise la fonction ST_intersection() avant de lancer cette requête pour découper ma couche vecteur en fonction de mon emprise import_raster6 (et ça se complique):

Code:

DROP TABLE IF EXISTS lucie.veget_intersection;
CREATE TABLE lucie.veget_intersection
AS
SELECT v.*, ST_intersection(v.geom,r.geom) as geometry
FROM lucie.vegetation as v,lucie.raster_emprise as r
WHERE st_intersects(v.geom,r.geom);

(Sachant que la couche raster_emprise correspond à la couche vecteur de l'emprise de mon import_raster6 (la fonction st_intersection s'utilisant uniquement entre deux couches vecteurs).

Le résultat est satisfaisant, mais lorsque sous QGis je dessine l'emprise de la couche résultat veget_intersection, elle n'est pas la même que raster_emprise. Toutefois! Les polygones sont bien découpé en fonction du raster_emprise.

MAIS ! quand je souhaite ensuite rasteriser cette couche vecteur "clipée" en quelques sortes :

Code:

DROP TABLE IF EXISTS lucie.raster11;
CREATE TABLE lucie.raster11
AS
SELECT ST_Tile(ST_Union(ST_AsRaster(v.geometry,2.5,-2.5,'8BUI',v.prec_plani,NULL::int8,st_upperleftx(r.rast),st_upperlefty(r.rast),st_skewx(r.rast),st_skewy(r.rast))),50,50)
FROM lucie.import_raster6 as r, lucie.veget_intersection as v
WHERE st_intersects(v.geometry,r.rast);

le message d'erreur suivant apparait :

Code:

ERREUR:  Relate Operation called with a LWGEOMCOLLECTION type.  This is unsupported.
HINT:  Change argument 1: 'GEOMETRYCOLLECTION(POINT(475000 6739627.9),POLYGON((474940.3 6739683.7,474943...'
CONTEXT:  fonction PL/pgsql _st_intersects(geometry,raster,integer), ligne 39 à IF
********** Erreur **********

ERREUR: Relate Operation called with a LWGEOMCOLLECTION type.  This is unsupported.
État SQL :XX000
Astuce : Change argument 1: 'GEOMETRYCOLLECTION(POINT(475000 6739627.9),POLYGON((474940.3 6739683.7,474943...'
Contexte : fonction PL/pgsql _st_intersects(geometry,raster,integer), ligne 39 à IF

En faisant des recherches sur le web, j'ai donc modifié mes requêtes et tapé:

Code:

DROP TABLE IF EXISTS lucie.veget_intersection;
CREATE TABLE lucie.veget_intersection
AS
SELECT v.*, ST_Multi(ST_Buffer(ST_intersection(v.geom,r.geom),0.0)) as geometry
FROM lucie.raster_emprise as r
INNER JOIN lucie.vegetation as v
ON st_intersects(r.geom,v.geom)
WHERE Not ST_IsEmpty(ST_Buffer(ST_Intersection(r.geom,v.geom),0.0));

DROP TABLE IF EXISTS lucie.raster10;
CREATE TABLE lucie.raster10
AS
SELECT ST_Tile(ST_Union(ST_AsRaster(v.geometry,2.5,-2.5,'8BUI',v.prec_plani,NULL::int8,st_upperleftx(r.rast),st_upperlefty(r.rast),st_skewx(r.rast),st_skewy(r.rast))),50,50)
FROM lucie.import_raster6 as r, lucie.veget_intersection as v
WHERE st_intersects(v.geometry,r.rast);

Je n'ai plus le message d'erreur, mais je reviens au point de départ! La couche rasterisée ne comprend pas les polygones à cheval sur l'emprise import_raster6...

Je n'y comprends plus rien!!!

Help!

Merci beaucoup!

Bien cordialement,

Lucie D.

Dernière modification par Lucie D. (Fri 20 November 2015 11:52)

Hors ligne

 

#20 Mon 23 November 2015 15:35

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

Une question: Si votre process marche bien avec GDAL, pourquoi voulez-vous le refaire en PG ?
GDAL/OGR permet de faire tout ce que fait postgis (soit directement, soit avec une requete SQL Postgis passée à OGR)

Vous avez le choix du langage pour automatiser le tout: C, Python (ma préférence, on peut acceder a l'API complete de GDAL/OGR depuis python), Shell, etc.

Nicolas

Hors ligne

 

#21 Fri 27 November 2015 10:49

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour à tous,

Je suis trooooop heureuse après tout ce temps de recherches, voilà que j'ai enfin trouvé LA solution à mon problème! Voici la requête que j'ai tapée:

Code:

CREATE TABLE resultat4 AS
WITH resultat AS (
  SELECT rid, ST_MapAlgebra(
                ST_Union(ST_AsRaster(geom, rast, '8BUI', code, NULL::int8)),
                ST_AddBand(ST_MakeEmptyRaster(rast), '8BUI'::text, NULL::int8, NULL::int8), 
                '[rast1]', '8BUI', 'SECOND') as rast
  FROM vecteur, raster
  WHERE ST_Intersects(geom, rast)
GROUP BY rid, rast
)
SELECT a.rid,
       CASE
         WHEN b.rid IS NULL THEN ST_AddBand (ST_MakeEmptyRaster(a.rast), '8BUI'::text, NULL::int8, NULL::int8)
         ELSE b.rast
       END as rast
FROM raster as a LEFT OUTER JOIN resultat as b 
ON a.rid = b.rid;

Cette requête a tous les avantages :

- pour une même rasterisation qui a pris 3 heures avec ST_ExtractToRaster(), ça a mis 51 secondes avec cette requête
- J'obtiens bien la même emprise entre mon raster de référence et mon raster final (je pense que c'est dû au left join)
- Tous mes polygones ont bien été rasterisés et "clipés" lorsqu'ils étaient à cheval sur mon emprise (et non pas supprimés!)

C'est tout simplement parfait! Le tutoriel situé à l'adresse suivante m'a été d'une aide précieuse:

http://geospatialelucubrations.blogspot … ector.html

Merci beaucoup à Yves et Nicolas!

Pour vous répondre Nicolas, je ne maitrise pas encore Python ni ce genre de langage, mais je vais très certainement devoir m'y mettre...

Maintenant je vais devoir passer à la compilation de raster sous postgresql...

Je n'ai pas encore trouvé la solution...

Encore merci!

Bonne journée.

Bien cordialement,

Lucie D.

Hors ligne

 

#22 Fri 27 November 2015 11:03

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9853
Site web

Re: PostGis 2 : convertir table geometry en table raster

Bravo Lucie !

Et merci pour les remerciements que je ne mérite pas vraiment smile

L'article que tu as suivi a été rédigé par Pierre Racine, le concepteur de l'extension raster dans PostGIS smile

Une question pour terminer : qu'appelles tu la compilation de raster sous PostgreSQL ?

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#23 Fri 27 November 2015 11:31

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis 2 : convertir table geometry en table raster

Jolie requête !

Ah non, maintenant que vous maitrisez postgis et ses rasters, pas besoin de passer au python wink

Nicolas

Hors ligne

 

#24 Mon 30 November 2015 09:55

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Merci beaucoup! ^^"

Yves, pour répondre à ta question, je souhaiterais compiler plusieurs rasters entre eux, par ordre de priorité (si j'ai une valeur dans rasterA alors j’applique la valeur rasterA, sinon, si j'ai une valeur dans mon rasterB, alors valeur rasterB, sinon, si j'ai une valeur dans rasterC, alors valeur raster C, etc.).

Sous QGis, j'utilisais r.mapcalculator de GRASS pour faire ça et je tapais la formule suivante :

if(A>0,A,if(B>0,B,if(C>0,C,D)))

J'ai donc essayé de taper une requête du genre (sachant que raster1 est prioritaire par rapport à raster2):

Code:

CREATE TABLE lucie.compil
AS
SELECT
CASE
WHEN a.rast>0 THEN a.rast
ELSE b.rast 
END as rast
FROM lucie.raster1 as a join lucie.raster2 as b on st_intersects(a.geom,b.geom);

Bon je savais que ça ne marcherait pas sachant que je demande à une colonne de type raster si elle est supérieure à 0...

J'ai essayé quelque chose de ce type là aussi:

Code:

CREATE TABLE lucie.compil
AS
SELECT
CASE
WHEN st_intersects(a.rast,b.rast) THEN a.rast
ELSE b.rast
END as rast
FROM lucie.raster1 as a join lucie.raster2 as b on st_intersects(a.rast,b.rast);

Mais finalement je me rends compte que c'est pas bon car je peux très bien avoir des pixels sur mon raster1 qui n'intersectent pas mon raster2, mais je veux quand même que ces pixels du raster1 soient prioritaires par rapport à ceux de mon raster2...

Je ne sais pas si je suis claire... ^^"

En gros comment puis-je faire pour, dans ma requête, interroger les pixels >0 de mon raster1?

En vous remerciant à nouveau pour votre aide précieuse!!!

Bien cordialement,

Lucie D.

Hors ligne

 

#25 Mon 30 November 2015 10:08

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9853
Site web

Re: PostGis 2 : convertir table geometry en table raster

Lucie,

Ta première requête pourrait fonctionner si tu accèdes à la valeur. Il me semble que ta cellule raster est du type geomval (http://postgis.net/docs/manual-dev/geomval.html) et donc tu devrais accéder à la valeur par un

Code:

SELECT (rast).val FROM monraster;

(de mémoire).

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#26 Wed 02 December 2015 08:20

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour Yves et merci pour l'astuce.

Alors je pense que ma ma cellule raster n'était pas du type geomval...Mais voici comment j'ai procédé et les requêtes que j'ai lancées:

Code:

CREATE TABLE lucie.raster2
AS
SELECT rid,rast,ST_DumpAsPolygons(rast,1) FROM lucie.raster;

Si j'ai bien compris cette requête me permet justement de transformer ma cellule raster en type geomval...?

Code:

CREATE TABLE lucie.raster_final
AS
SELECT rid,rast,st_dumpaspolygons,(st_dumpaspolygons).val as valeur FROM lucie.raster2;

Cette manip me permet quant à elle d'ajouter une colonne à ma couche raster avec les valeurs de chaque pixel. Bien évidemment, le nombre de lignes dans mon raster_final est bien supérieur à mon raster de base...(le nombre de lignes ne correspond plus à des tiles mais à des pixels...).

Donc super merci beaucoup c'est bien ce que je cherchais à faire. Pour mon essai, j'applique la même méthode sur un deuxième raster que je veux compiler à l'autre. Tout est ok jusque là.

Sauf que quand je lance la requête suivante :

Code:

CREATE TABLE lucie.compil
AS
SELECT a.rast as rast_a, b.rast as rast_b,
CASE
WHEN a.valeur>0 THEN a.valeur
ELSE b.valeur
END as valeur
FROM lucie.essai as a join lucie.raster_final as b on st_intersects(a.rast,b.rast);

La requête s'effectue bien, mais je n'arrive pas à ouvrir le raster compil dans QGis (elle pèse visiblement 5432 Ko...)

Je crois que je me trompe dans ma requête (notamment au niveau des paramètres de ma clause SELECT et de ma clause THEN...), je vais continuer mes essais!

Merci beaucoup!!!

Lucie D.

Hors ligne

 

#27 Wed 02 December 2015 08:51

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Finalement voici la requête que j'ai lancée :

Code:

DROP TABLE IF EXISTS lucie.compil;
CREATE TABLE lucie.compil
AS
SELECT
CASE
WHEN a.valeur>0 THEN a.rast
ELSE b.rast
END as rast
FROM lucie.essai as a join lucie.raster_final as b on st_intersects(a.rast,b.rast);

Malheureusement je n'arrive toujours pas à l'ouvrir dans QGis (2632 Ko).

J'ai essayé de lancer un ST_Tile sur ma couche compil, mais ça me donne une couche vide (0 lignes estimées, 0 Ko)...

Je bloque encore une fois... =p

Merci pour votre aide!!!

Bien cordialement,

Lucie D.

Hors ligne

 

#28 Thu 10 December 2015 10:29

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour,

J'ai essayé de lancer la requête suivante :

Code:

DROP TABLE IF EXISTS lucie.compil2;
CREATE TABLE lucie.compil2
AS
SELECT ST_Tile(rast,50,50) as rast
FROM lucie.compil;

Mais finalement, au deuxième essai, je n'ai pas 0 lignes, mais 14276, le même nombre de lignes que compil...Je pensais que le st_tile() permettait de réduire le nombre de lignes d'une couche raster...

A moins que je ne commence à tout mélanger ce qui ne m'étonnerait pas... =p

Merci!

Bien cordialement,

Lucie

Hors ligne

 

#29 Wed 03 February 2016 10:11

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostGis 2 : convertir table geometry en table raster

Bonjour à tous,

Bon, je n'ai toujours pas trouvé de solution à mon problème, mais je pense que tout bêtement, ça ne doit pas être une méthode utilisée par beaucoup de monde. Merci malgré tout à ceux qui m'ont permis de bien progresser! smile

Un petit lien vers un site super sur le traitement et la gestion des rasters sous postgis, au cas où :

http://sigea.educagri.fr/tutoriels-de-l … stgis.html

Bonne continuation à tous dans le monde des SIG!

Bien cordialement,

Lucie D.

Hors ligne

 

#30 Wed 03 February 2016 11:11

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: PostGis 2 : convertir table geometry en table raster

Bonjour Lucie,

vous pouvez augmenter vos chances avec la liste anglophone postgis-users, sur laquelle répondent volontiers les contributeurs de postgis raster:

https://lists.osgeo.org/mailman/listinfo/postgis-users


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB