Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


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

Annonce

Printemps des cartes 2024

#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: 1132

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: 3169
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

 

Pied de page des forums

Powered by FluxBB