ST_DIFFERENCE

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

ST_DIFFERENCE

KatiaC
Bonjour,

je souhaite créer une couche de végétation qui ne soit pas superposée à du bâti. Voici alors le script que j'ai utilisé

CREATE TABLE ocs_2004_veg_bati2 AS SELECT ST_DIFFERENCE(b.the_geom,a.the_geom) as the_geom, b.thematiq FROM bati_unifie a, ocs_2004_veg b;

Il est très très long à s'éxécuter, il crée des fichiers énormes. Je pense donc qu'il y a une erreur dans ma demande.  Car la table bati_unifie comporte 14327 lignes et ocs_2004_veg 21665.
J'ai essayé avec la contrainte where st_intersects(b.the_geom,a.the_geom) mais ça ne me renvoie évidemment que les zones de végétation qui intersectent du bâti. Ce n'est donc pas ce que je veux...

Pouvez-vous m'aider à trouver mon erreur ou à améliorer ma commande? J'ai l'impression d'avoir tout essayé...

Merci de votre aide

Katia
Reply | Threaded
Open this post in threaded view
|

Re: ST_DIFFERENCE

KatiaC
Bonjour Katia,

voici la solution à ton problème:
tes tables comportent trop d'objets. Il faut donc faire ceci avant ta commande (qui est parfaite, soit dit en passant!)
CREATE TABLE uni as SELECT ST_UNION(the_geom) as the_geom FROM bati_unifie;
CREATE TABLE veg_uni as SELECT ST_UNION(the_geom) as the_geom, thematiq from ocs_2004_veg GROUP BY thematiq;
CREATE TABLE ocs_2004_veg_bati2 AS SELECT ST_DIFFERENCE(b.the_geom,a.the_geom) as the_geom, b.thematiq FROM uni a, veg_uni b;

Katia
Reply | Threaded
Open this post in threaded view
|

Re: ST_DIFFERENCE

KatiaC
Merci Katia!

T'es vraiment trop forte!!!

Katia
Reply | Threaded
Open this post in threaded view
|

Re: ST_DIFFERENCE

Gwendall Petit
Administrator
La classe Katia. Tu arrives maintenant à poser des problèmes et à les résoudre juste après.

Il est vrai que la fonction ST_DIFFERENCE a un fonctionnement particulier. Elle n'est optimale que si tu l'utilises entre 1 objets de la table A et n objets de la table B.

Merci pour l'animation de cette liste de diffusion !

Gwendall