Pages: 1
- Sujet précédent - [postgis] Fusionner deux tables avec des objets se superposant - Sujet suivant
#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: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
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: 1554
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: 1554
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
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
Pages: 1
- Sujet précédent - [postgis] Fusionner deux tables avec des objets se superposant - Sujet suivant