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

#1 mar 03 novembre 2009 13:30

nawak
Membre
Date d'inscription: 11 sep 2007
Messages: 56

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 mar 03 novembre 2009 14:37

Lionel B
Membre
Lieu: Macon
Date d'inscription: 5 sep 2005
Messages: 58

Re: Postgres/postgis requête sql

where not (a.the_geom && b.the_geom)

cordialement

Hors ligne

 

#3 mar 03 novembre 2009 14:39

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

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.

Hors ligne

 

#4 mar 03 novembre 2009 14:42

Lionel B
Membre
Lieu: Macon
Date d'inscription: 5 sep 2005
Messages: 58

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 (mar 03 novembre 2009 14:45)

Hors ligne

 

#5 mar 03 novembre 2009 15:26

nawak
Membre
Date d'inscription: 11 sep 2007
Messages: 56

Re: Postgres/postgis requête sql

yes merci Lionel ta soluce marche..pour yves merci aussi mais ça ne fonctionne pas

Hors ligne

 

#6 mar 03 novembre 2009 15:45

Thomas KOCHERT
Membre
Lieu: Nancy
Date d'inscription: 7 nov 2005
Messages: 10
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

Hors ligne

 

#7 mar 03 novembre 2009 17:10

vincentp
Membre
Lieu: Paris
Date d'inscription: 18 jui 2006
Messages: 29

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 ven 06 novembre 2009 14:38

Christophe Brun
Membre
Lieu: Bois-Colombes
Date d'inscription: 19 avr 2006
Messages: 6

Re: Postgres/postgis requête sql

Bonjour,

Juste une petite précision à propos de  :

Thomas KOCHERT a écrit:

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 (ven 06 novembre 2009 14:41)

Hors ligne

 

#9 ven 06 novembre 2009 16:23

Thomas KOCHERT
Membre
Lieu: Nancy
Date d'inscription: 7 nov 2005
Messages: 10
Site web

Re: Postgres/postgis requête sql

Merci pour cette précision !


--
Thomas Kochert
Responsable SIG DT Lorraine - Office National des Forêts

Hors ligne

 

Pied de page des forums

Powered by FluxBB