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

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

 

Pied de page des forums

Powered by FluxBB