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 Wed 10 October 2012 15:22

jpsurf
Participant occasionnel
Date d'inscription: 11 Jun 2008
Messages: 23

[postgis] Fusionner deux tables avec des objets se superposant

Bonjour à tous,
je débute sur Postgis et je bute sur un problème qui semble relativement simple. J'ai deux tables de polygones disons table1 et table2 avec des objets qui peuvent se superposer par endroit. Je souhaite fusionner ces deux tables tout en fusionnant les objets qui se superposent pour ne pas avoir de surface en double compte.

Bref après pas mal d'effort je n'y arrive pas.

J'ai testé ça :

Code:

SELECT tmp, ST_UNION(geom) INTO resultat FROM ((SELECT '1' as tmp, geom from table1)UNION(SELECT '1' as tmp, geom from table2)) AS t GROUP BY tmp

mais ça me donne une erreur : GEOSUnaryUnion: TopologyException: found non-noded intersection between LINESTRING (676451 6.17124e+006, 676581 6.17127e+006) and LINESTRING (676451 6.17124e+006, 676581 6.17127e+006) at 676513.53127927624 6171255.1455583079

En parcourant les forums, j'ai vu que ce type d'erreur pouvait venir d'erreur de topologie, j'ai donc fait une mise à jour de mes objets avec un ST_Buffer(geom,0). Mais quand je relance rien n'y fait. J'ai toujours la même erreur.

Donc  si quelqu'un a une idée, je serai preneur.

Merci d'avance pour votre aide

Cordialement

Dernière modification par jpsurf (Wed 10 October 2012 15:24)

Hors ligne

 

#2 Wed 10 October 2012 15:28

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: [postgis] Fusionner deux tables avec des objets se superposant

Bonjour,
Il semble que tu aies des erreurs topologiques.
Certaines fonctions peuvent réparer automatiquement certains bug
telle que st_buffer(geom,0)
ou encore st_cleangeometry(geom)

à utiliser avec précaution


Ainsi ta requête pourrait être :

Code:

SELECT tmp, ST_UNION(geom) INTO resultat FROM ((SELECT '1' as tmp, st_buffer(geom,0) from table1)UNION(SELECT '1' as tmp, st_buffer(geom,0) from table2)) AS t GROUP BY tmp

Ah! il semble que tu as déjà essayé....

Dernière modification par ppluvinet (Wed 10 October 2012 15:30)


Pascal PLUVINET

Hors ligne

 

#3 Wed 10 October 2012 15:42

jpsurf
Participant occasionnel
Date d'inscription: 11 Jun 2008
Messages: 23

Re: [postgis] Fusionner deux tables avec des objets se superposant

Oui j'ai déjà essayé et cela m'a donné le même résultat d'erreur. J'ai vérifié la topologie de mes deux tables avec un st_isvalidreason avant de relancer la requete. LE ST_buffer(geom,0) a réparé les erreurs de topologie.

Hors ligne

 

#4 Wed 10 October 2012 16:12

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: [postgis] Fusionner deux tables avec des objets se superposant

Bonjour,

Les objets sont-ils valides ? (st_isValid) vous nous dites avoir lancé st_isValidReason, mais sans nous dire le résultat.

Vous devez etre sur une postgis 2.0, donc vous pouvez essayer de rendre vos geometries valides en appelant:
st_makeValid();

Si ca ne marche tjs pas, vous pouvez réduire la précision des coordonnées de vos objets: Si vous en projection metrique par exemple, inutile de conserver des chiffres apres la virgule dans les coordonnées: un st_snapToGrid(geom, 1) peut alors rendre les objets plus faciles a manipuler avec les operations topologiques.

Si vous avez tjs des problemes apres ces etapes, identifiez la ou les geometries responsables de l'erreur et créer un ticket pour decrire le probleme aupres de la communauté PostGIS.

Nicolas

Hors ligne

 

#5 Wed 10 October 2012 16:46

jpsurf
Participant occasionnel
Date d'inscription: 11 Jun 2008
Messages: 23

Re: [postgis] Fusionner deux tables avec des objets se superposant

Les objets sont valides. st_isValid ne retourne que la valeur true
j'ai essayé en faisant un arrondi des coordonnées avec st_snapToGrid(geom, 1) et j'ai le même résultat.

Je pense que je vais reprendre du début depuis l'importation des données pour voir si je ne me suis pas planté quelque part.

Hors ligne

 

#6 Wed 10 October 2012 17:05

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: [postgis] Fusionner deux tables avec des objets se superposant

Les algos de Postgis ne sont pas encore tous robustes. Il y a encore des cas ou les données, bien que valides indépendamment les unes des autres, créent des conflits qui provoquent ces messages d'erreur.

Nicolas

Hors ligne

 

#7 Wed 10 October 2012 17:12

jpsurf
Participant occasionnel
Date d'inscription: 11 Jun 2008
Messages: 23

Re: [postgis] Fusionner deux tables avec des objets se superposant

ok. merci pour votre aide. Je recommence donc dès le début lorsque j'aurai plus de temps. Et si cela ne marche toujours pas j'ouvrirai un ticket aupres de la communauté postgis.

Hors ligne

 

#8 Tue 08 October 2013 18:15

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: [postgis] Fusionner deux tables avec des objets se superposant

Bonsoir à tous,

je viens d'avoir ce problème. L'erreur est renvoyée si 21 objets identiques sont fusionnés.

L'utilisation de la clause "distinct dans l'aggrégation a résolu mon problème.

Code:

st_union(DISTINCT geometrie)

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB