Pages: 1
- Sujet précédent - [POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump) - Sujet suivant
#1 Thu 21 April 2016 22:50
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
[POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump)
Bonjour,
Je reviens vers vous, car je n'arrive pas à faire via postgis ce que openjump fait facilement (enfin le résultat, je ne sais pas ce qu'il fait en background).
J'ai des triangles adjacents que j'ai décomposé en fonction de leurs arêtes, j'obtiens ainsi des lignes sur chaque arête. Sauf que j'ai des arêtes en double sur tous les côtés adjacents, or moi je ne veux conserver qu'une arête sur les deux. Openjump dispose d'une fonction qui permet de ne pas conserver les doublons lors de la création de ces lignes.
Ma question est la suivant, est-ce que Postgis le permet? et si non, comment faire pour enlever les doublons, sachant qu'un coup ma ligne est saisie Nord-Sud pour l'arête 1 et son doublon est saisie Sud-Nord.
J'arrive à visualiser les doublons via
Code:
select * from matable as t1, matable as t2 where st_equals(t1.geom,t2.geom)and t1.id<>t2.id
mais comment ensuite supprimer les éléments en doublon et en conserver un?
D'avance merci
Ted
Hors ligne
#2 Fri 22 April 2016 13:12
- guil31
- Participant actif
- Date d'inscription: 22 Jan 2013
- Messages: 79
Re: [POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump)
Bonjour,
Voici une requête pour trouver les identifiants à supprimer
Code:
select mon_id from (SELECT *, row_number() OVER (PARTITION BY id_geom) as row FROM( SELECT DISTINCT *, LEAST(st_astext(geom), st_astext(st_reverse(geom))) || '_' || greatest(st_astext(geom), st_astext(st_reverse(geom))) AS id_geom FROM ma_table as T1 WHERE EXISTS (SELECT * FROM ma_table T2 WHERE T1.mon_id <> T2.mon_id AND T1.geom && T2.geom AND (st_astext(T1.geom) = st_astext(T2.geom) OR st_astext(T1.geom) = st_astext(st_reverse(T2.geom))) ) ORDER BY id_geom ) as S1 ) as S2 where row > 1
Claire
Hors ligne
#3 Sat 23 April 2016 15:42
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump)
Bonjour Claire,
JE teste ça le plus tôt possible.
Merci
Hors ligne
#4 Tue 26 April 2016 10:15
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump)
Merci Claire,
Ca fonctionne parfaitement
Ted
Hors ligne
#5 Wed 27 April 2016 09:24
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3941
Re: [POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump)
Bonjour,
Pas testé mais que donne
Code:
select * from matable as t1, matable as t2 where st_equals(t1.geom,t2.geom)and t1.id<t2.id
Hors ligne
#6 Mon 02 May 2016 10:13
- guil31
- Participant actif
- Date d'inscription: 22 Jan 2013
- Messages: 79
Re: [POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump)
Bonjour,
Effectivement cette dernière requête est beaucoup plus simple !
Cependant, petite précision, elle ne prend pas en compte les objets qui sont en triples ou plus.
Pour donner une réponse complète, dans la requête qui utilise une partition, il est également possible de donner un ordre qui permet de privilégier les tronçons qu’on souhaite garder de préférence (avec un order by dans la partition).
Ainsi par exemple:
Code:
select mon_id from (SELECT *, row_number() OVER (PARTITION BY id_geom order by taille desc) as row FROM( SELECT DISTINCT *, LEAST(st_astext(geom), st_astext(st_reverse(geom))) || '_' || greatest(st_astext(geom), st_astext(st_reverse(geom))) AS id_geom FROM ma_table as T1 WHERE EXISTS (SELECT * FROM ma_table T2 WHERE T1.mon_id <> T2.mon_id AND T1.geom && T2.geom AND (st_astext(T1.geom) = st_astext(T2.geom) OR st_astext(T1.geom) = st_astext(st_reverse(T2.geom))) ) ORDER BY id_geom ) as S1 ) as S2 where row > 1
permet d’obtenir les identifiants des objets en double (ou en triple ou plus) dont la valeur du champ taille est la moins importante.
Claire
Hors ligne
Pages: 1
- Sujet précédent - [POSTGIS] supprimer les doublons de lignes adjacente (cd Openjump) - Sujet suivant