Pages: 1
- Sujet précédent - [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre - Sujet suivant
#1 Mon 20 July 2015 17:33
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
[PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
Je cherche à créer une vue correspondant à un ensemble de polygones contenus sur une zone prédéfinie.
En gros, j'ai une couche A qui correspond à un territoire d'étude (sous forme de polygone) et une autre couche B composée de plusieurs polygones.
J'aimerai récupérer les polygones de la couche B découpés selon les limites de la couche A.
Normalement, au final, je dois récupérer l'ensemble de mon territoire de la couche A recouvert par des morceaux de polygones de la couche B.
J'imagine que c'est une requête assez basique mais je n'ai pas du utiliser les bons mots clés dans la recherche pour trouver...
Merci et bonne journée
Hors ligne
#2 Mon 20 July 2015 21:49
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonsoir,
Chercher st_intersection et st_intersect.
Quelque chose comme : SELECT st_intersects(a.the_geom,b.the_geom) FROM a, b WHERE st_intersection(a.the_geom, b.thegeom);
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
#3 Tue 21 July 2015 08:41
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
Quelque chose comme : SELECT st_intersects(a.the_geom,b.the_geom) FROM a, b WHERE st_intersection(a.the_geom, b.thegeom);
ne serait pas plutôt l'inverse...
Code:
SELECT st_intersection(a.the_geom,b.the_geom) FROM a, b WHERE st_intersects(a.the_geom, b.thegeom)
Hors ligne
#4 Tue 21 July 2015 08:55
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Salut,
Merci à tous les 2 : la 2e requête est effectivement la bonne.
Bonne journée
Hors ligne
#5 Tue 21 July 2015 09:58
- Martin Bocquet
- Participant occasionnel
- Date d'inscription: 4 Mar 2015
- Messages: 22
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
De manière générale, mieux vaut utiliser l'opérateur normalisé JOIN que WHERE pour faire des jointures.
Ca donnerait donc :
Code:
SELECT st_intersection(a.the_geom,b.the_geom) FROM a JOIN b ON st_intersects(a.the_geom, b.thegeom)
Hors ligne
#6 Tue 21 July 2015 10:09
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Martin,
Peux tu m'expliquer pourquoi est ce mieux ? Pour des performances ou pour une meilleur lecture ?
Merci,
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
#7 Tue 21 July 2015 10:51
- Martin Bocquet
- Participant occasionnel
- Date d'inscription: 4 Mar 2015
- Messages: 22
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
Les performances sont exactement les mêmes sur les deux requêtes. Cependant, lors de requêtes multiples, les clauses JOIN explicites permettent d'orienter les requêtes :
http://docs.postgresql.fr/9.1/explicit-joins.html
La jointure avec WHERE est aujourd'hui dépréciée (https://msdn.microsoft.com/en-us/librar … 00%29.aspx), et on conseille d'utiliser le JOIN pour :
- des raisons de lisibilité, notamment lors des jointures multiples
- pour éviter de confondre le WHERE « traditionnel » qui filtre les données et le WHERE de jointure
Bonne journée,
Hors ligne
#8 Tue 21 July 2015 11:02
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
Alors je suis d'accord mais j'ai du mal à perdre ma mauvaise habitude.
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
#9 Tue 21 July 2015 11:38
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
Les performances sont exactement les mêmes sur les deux requêtes. Cependant, lors de requêtes multiples, les clauses JOIN explicites permettent d'orienter les requêtes :
http://docs.postgresql.fr/9.1/explicit-joins.html
La jointure avec WHERE est aujourd'hui dépréciée (https://msdn.microsoft.com/en-us/librar … 00%29.aspx), et on conseille d'utiliser le JOIN pour :
- des raisons de lisibilité, notamment lors des jointures multiples
- pour éviter de confondre le WHERE « traditionnel » qui filtre les données et le WHERE de jointure
Bonne journée,
Bonjour,
j'ai du mal à voir la simplicité dans les JOIN par rapport au WHERE quand il y a 4 ou 5 jointures à faire.
Je pense que JOIN est intéressant pour récupérer tous les enregistrements d'une table et les enregistrements de l'autre table correspondants au critère de jointure (LEFT JOIN ou RIGHT JOIN).
Cordialement,
Jean-François Behm, formateur SIG, jf.behm@, idgeo.frformations@ idgeo.fr
IDGEO, www.idgeo.fr
Institut de Développement de la Géomatique 42, avenue de Général de Croutte - 31100 toulouse
Hors ligne
#10 Tue 21 July 2015 14:08
- Martin Bocquet
- Participant occasionnel
- Date d'inscription: 4 Mar 2015
- Messages: 22
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
Voici pour exemple deux codes différents, qui renvoient la même chose.
Sur le deuxième, on fait mieux la différence entre les tables jointes, les critères de jointure et les critères de tri.
Code:
SELECT * FROM a, b, c, d WHERE st_intersects(a.the_geom, b.thegeom) AND st_intersects(a.the_geom, c.thegeom) AND st_intersects(a.the_geom, d.thegeom) AND a.id > 10 AND b.idcom = '59350'
Code:
SELECT * FROM a JOIN b ON st_intersects(a.the_geom, b.thegeom) JOIN c ON st_intersects(a.the_geom, c.thegeom) JOIN d ON st_intersects(a.the_geom, d.thegeom) WHERE a.id > 10 AND b.idcom = '59350'
Après, il s'agit d'un gout personnel, mais aussi d'une anticipation : aujourd'hui la syntaxe avec WHERE est dépréciée, c'est à dire marche encore, mais est non conseillée. A l'avenir, cette syntaxe pourrait être supprimée.
Dernière modification par Martin Bocquet (Tue 21 July 2015 14:12)
Hors ligne
#11 Tue 21 July 2015 15:01
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
C'est effectivement une affaire de goût et d'habitude de travail.
Mais si la tendance est à la mise à l'écart de la syntaxe WHERE pour les jointures, il faut effectivement changer ses habitudes !
Cependant, comment fera-t-on pour les critères de sélection si la syntaxe WHERE disparaît ?
Jean-François Behm, formateur SIG, jf.behm@, idgeo.frformations@ idgeo.fr
IDGEO, www.idgeo.fr
Institut de Développement de la Géomatique 42, avenue de Général de Croutte - 31100 toulouse
Hors ligne
#12 Tue 21 July 2015 15:45
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
Ce qui a été dit c'est que la syntaxe WHERE pour les jointures est dépréciée. Les filtres passeront toujours via cette syntaxe.
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
#13 Wed 22 July 2015 14:51
Re: [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre
Bonjour,
pour ma part, je privilégie l’expression des critères de jointure avec JOIN pour bien les distinguer des critères de sélection dans le WHERE.
Je trouve cela plus lisible et plus logique : on créée son pool de tuples dans les jointures, puis on filtre les lignes qui répondent au critères exprimés dans le WHERE.
Les recommandations de syntaxe ont souvent une cause valable ;-)
Dernière modification par MathieuB (Wed 22 July 2015 14:55)
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
Pages: 1
- Sujet précédent - [PostGreSQL 9.3/PostGIs 2] Découpage d'une couche par une autre - Sujet suivant