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

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

 

Pied de page des forums

Powered by FluxBB