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 Fri 08 March 2019 11:31
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
PostGIS - ST_Difference => délais de traitement
Bonjour
Je dois faire la comparaison entre 2 couches de polygones (surfaces créées entre les 2 couches, environ 1400 polygones par couche).
J'ai lancé une requête qui me donne le résultat attendu, mais avec un délais de réalisation très long (plus ou moins 20mn).
Code:
WITH a19 AS ( SELECT st_makevalid(st_collect(xxx19.wkb_geometry)) AS wkb_geometry, FROM xxx19 ), a18 AS ( SELECT st_makevalid(st_collect(xxx18.wkb_geometry)) AS wkb_geometry, FROM xxx18) SELECT (st_dump(st_makevalid(st_difference(a18.wkb_geometry, a19.wkb_geometry)))).geom::geometry(Polygon,3944) AS wkb_geometry FROM a18,a19
je fais un st_collect pour faire une comparaison 1X1 et je suis obligé de faire un st_makevalid sur les st_collect et st_difference pour éviter les problèmes de topologie.
Question :
N'existe-t-il pas une méthode un peu plus rapide ?
Merci par avance de vos réponses.
JP
Hors ligne
#2 Fri 08 March 2019 12:12
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1129
Re: PostGIS - ST_Difference => délais de traitement
Salut,
Code:
SELECT (st_dump(st_makevalid(st_union(st_difference(x18.wkb_geometry, x19.wkb_geometry))))).geometry FROM x18 JOIN x19 ON x18.wkb_geometry && x19.wkb_geometry
avec un index sur une des deux tables ?
Hors ligne
#3 Fri 08 March 2019 12:17
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: PostGIS - ST_Difference => délais de traitement
Merci tumasgiu
Je teste lundi la méthode et fais un retour.
Cordialement
Hors ligne
#4 Wed 13 March 2019 11:11
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: PostGIS - ST_Difference => délais de traitement
Bonjour.
En effet avec votre requête (sans UNION) je passe de 20mn de traitements à .... 20 secondes !
Je dois par contre analyser les résultats car je passe de 27000 objets en sotie de ma requête à 31800.
J'ai aussi un doute sur le test && : je suppose qu'un objet de ma couche A qui n'existe plus dans B ne sera pas remonté par le st_difference(A.wkb_geometry , B.wkb_geometry) si A.wkb_geometry && B.wkb_geometry est null ?
Hors ligne
#5 Wed 13 March 2019 15:24
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3163
- Site web
Re: PostGIS - ST_Difference => délais de traitement
Bonjour,
un objet de ma couche A qui n'existe plus dans B
Comprend pas bien
A et B contiennent ils des polygones différents ? Tous ?
Si non mettre une id à chaque polygone différent et ajouter une clause WHERE a.id<>b.id
si A.wkb_geometry && B.wkb_geometry est null
En fait a.geom && b.geom renvoie Vrai ou Faux et c'est cette clause qui accélère le traitement car elle permet d'utiliser les index géométriques.
Ensuite l'utilisation de st_collectionextract(geomcol,3) ne permet de récupérer que les polygones résultant,il peut y avoir des polylines résiduelles.
Dernière modification par ChristopheV (Thu 14 March 2019 19:45)
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne