#1 Tue 03 November 2009 13:30
- nawak
- Participant assidu
- Date d'inscription: 11 Sep 2007
- Messages: 216
Postgres/postgis requête sql
salut,
Petite question sur une requête sql sous postgres/postgis :
j'ai une entrée dans une table qui possède la géométrie de la france et de la corse : je souhaite n'avoir plus que la france je dessine donc un polygone contourant la france et je fais :
Code:
CREATE TABLE AS SELECT intersection(b.the_geom,a.the_geom) as the_geom FROMfrance a,limite b WHERE a.the_geom && b.the_geom;
mais comment puis-je inverser cette selection et n'avoir que les coordonnées de la Corse sans bien sur recréer un polygone contourant la corse...
Merci
Hors ligne
#2 Tue 03 November 2009 14:37
- Lionel B
- Participant actif
- Lieu: Macon
- Date d'inscription: 5 Sep 2005
- Messages: 83
Re: Postgres/postgis requête sql
where not (a.the_geom && b.the_geom)
cordialement
Hors ligne
#3 Tue 03 November 2009 14:39
Re: Postgres/postgis requête sql
Bonjour,
Quelque chose comme cela :
Code:
CREATE TABLE AS SELECT GeomUnion(a.the_geom) AS the_geom FROM france a,limite b WHERE !ST_Contains(b.the_geom,a.the_geom);
Par contre je ne sais plus si le symbole "!" fonctionne pour les fonctions SQL-MM dans postgis. Il faudra peut être mettre
Code:
ST_Contains(b.the_geom,a.the_geom)=false
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
#4 Tue 03 November 2009 14:42
- Lionel B
- Participant actif
- Lieu: Macon
- Date d'inscription: 5 Sep 2005
- Messages: 83
Re: Postgres/postgis requête sql
oups, erreur d'interprétaton de ma part.
tu peux faire une différence entre ton premier résultat et les données de départ.
Code:
CREATE TABLE AS SELECT difference(c.the_geom,d.the_geom) as the_geom FROM france c, (SELECT intersection(b.the_geom,a.the_geom) as the_geom FROM france a,limite b WHERE a.the_geom && b.the_geom) as d
Dernière modification par Lionel B (Tue 03 November 2009 14:45)
Hors ligne
#5 Tue 03 November 2009 15:26
- nawak
- Participant assidu
- Date d'inscription: 11 Sep 2007
- Messages: 216
Re: Postgres/postgis requête sql
yes merci Lionel ta soluce marche..pour yves merci aussi mais ça ne fonctionne pas
Hors ligne
#6 Tue 03 November 2009 15:45
- Thomas KOCHERT
- Participant occasionnel
- Lieu: Nancy
- Date d'inscription: 7 Nov 2005
- Messages: 11
- Site web
Re: Postgres/postgis requête sql
Bonjour, pour aller au plus simple, j'aurais fait
SELECT * FROM france INNER JOIN limite ON _st_contains(limite.the_geom,france.the_geom)
et ... ON NOT _st_contains....
pour avoir respectivement la France ou la Corse.
Attention à bien mettre le _ devant l'opérateur st_contains sinon l'analyse se fait sur les rectangles englobants et non sur les géométries.
Thomas Kochert
Responsable SIG DT Lorraine - Office National des Forêts
Une petite carte vaut mieux qu'un long discours... alors... au travail !
Hors ligne
#7 Tue 03 November 2009 17:10
Re: Postgres/postgis requête sql
Bonjour,
Si tu n'as que la france et la corse dans ton multipolygone, tu peux simplement utiliser
Code:
st_geometryn(the_geom, 2)
pour récupérer la corse si tant est qu'elle est en deuxième.
Si tu as d'autres iles ou polygones dans ton multipoly, je tenterais plutot qu'une intersection ou une différence complexe de faire un dump du multipolygone et de faire le contains des polygones récupérés avec ton rectangle :
Code:
select * from ( select st_dump(the_geom) as the_geom2 from france ) as t1 , limite as t2 where not st_contains(t2.the_geom, t1.the_geom2)
@thomas : st_contains fait bien le test sur les géométries, mais dans un deuxième temps. Dans un premier temps il utilise les BBox (et leurs indexes), et pour les positifs une vérification est faite sur les géométries.
Hors ligne
#8 Fri 06 November 2009 14:38
- Christophe Brun
- Juste Inscrit !
- Lieu: Bois-Colombes
- Date d'inscription: 19 Apr 2006
- Messages: 6
Re: Postgres/postgis requête sql
Bonjour,
Juste une petite précision à propos de :
Bonjour, pour aller au plus simple, j'aurais fait
Attention à bien mettre le _ devant l'opérateur st_contains sinon l'analyse se fait sur les rectangles englobants et non sur les géométries.
Dans les 2 cas l'analyse se fait bien sur les géométries et non sur les bbox comme le fait l'opérateur &&. La subtilité est que avec ST_Contains l'index spatial est utilisé, donc les bbox sont utilisées pour la recherche; avec _St_Contains, l'analyse se passe de l'index.
Bon week-end,
Christophe
PS: oups j'avais pas vu la fin du message de vincentp ! Désolé pour la redite.
Dernière modification par Christophe Brun (Fri 06 November 2009 14:41)
Hors ligne
#9 Fri 06 November 2009 16:23
- Thomas KOCHERT
- Participant occasionnel
- Lieu: Nancy
- Date d'inscription: 7 Nov 2005
- Messages: 11
- Site web
Re: Postgres/postgis requête sql
Merci pour cette précision !
Thomas Kochert
Responsable SIG DT Lorraine - Office National des Forêts
Une petite carte vaut mieux qu'un long discours... alors... au travail !
Hors ligne