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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 30 November 2018 19:00

Rlucas
Participant occasionnel
Date d'inscription: 20 Apr 2018
Messages: 31

PostGis / PostgreSQL - Supprimer les doublons à partir des géométries

Bonjour,

J'ai essayé de faire une requête pour supprimer les doublons géométriques issus de la fusion des startpoints / endpoints générés à partir d'une table de polylignes. Comme certains lignes sont jointives, on obtient des doublons géométriques.
J'ai donc écrit la requête suivante :

Code:

WITH start_point AS (
SELECT id, ST_Startpoint(ST_Linemerge(geom)) AS geom
FROM lignes
),
end_point AS (
SELECT id, ST_Endpoint(ST_Linemerge(geom)) AS geom
FROM lignes
),
end_point_left_outer AS (
SELECT DISTINCT end_point.* FROM end_point
LEFT OUTER JOIN start_point ON ST_EQUALS(end_point.geom, start_point.geom)
WHERE start_point.id ISNULL
),
start_point_right AS (
SELECT DISTINCT start_point.* FROM start_point
RIGHT JOIN end_point ON ST_EQUALS(start_point.geom, end_point.geom)
),
start_endpoint AS (
SELECT * FROM end_point_left_outer
UNION
SELECT * FROM start_point_right

Malheureusement certains des points disparaissent. J'ai donc dû me tromper, mais j'ai beau tourner la requête dans tous les sens je ne vois pas où.

Plus largement j'essaie de concevoir un format de requête pour détecter les doublons géométriques à partir des géométries seules.
Pour ce qui est des doublons, je parle bien des géométries se situant "au même endroit", et pas forcément dans le même ordre (cf. http://www.postgis.fr/chrome/site/docs/ … ity.html).
Et j'aimerai éviter autant que possible de passer par des strings (fonctions ST_AsText(geom) ou autres...).

Quelqu'un a-t'il déjà écrit une requête de ce genre?

Hors ligne

 

#2 Fri 30 November 2018 19:18

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

Re: PostGis / PostgreSQL - Supprimer les doublons à partir des géométries

Zut nos messages se croisent...

cf ici:  https://georezo.net/forum/viewtopic.php?id=113391

Hors ligne

 

#3 Fri 30 November 2018 19:23

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

Re: PostGis / PostgreSQL - Supprimer les doublons à partir des géométries

Un autre moyen très puissant pour comparer des géométries est de comparer leur représentation geohash, avec st_geoHash (https://postgis.net/docs/manual-2.3/ST_GeoHash.html).
Pareil, cela ne marche que si deux geom ne peuvent pas se trouver dans la meme bounding box, car le centre de la bbox est pris pour générer le geohash.


(perso, apres pas mal de tests sur pleins de datasets variés, je me suis rendu compte que la probabilité d'avoir deux geom avec exactement la meme bbox est proche de null, sauf si ces geom sont issues de découpages sur elles-memes, ou de découpages réguliers. J'utilise donc tres souvent "group by geom" pour virer les doublons.)

Nicolas

Dernière modification par Nicolas Ribot (Fri 30 November 2018 19:25)

Hors ligne

 

Pied de page des forums

Powered by FluxBB