#1 Tue 29 October 2019 22:11
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Afficher distances
Bonjour à tous,
Je dispose d'une base de donnée spatiale sur PostGre représentant les maisons dans une grande ville. Je souhaiterais créer un champ qui afficherait "COLLE" si une maison est situé à moins de 20m d'une autre, et "SEPARE" dans le cas inverse.
J'ai réussi à m'approcher de la solution, en calculant la distance la plus courte qui sépare 2 maisons avec le code :
Code:
select a.id_rte500, b.id_rte500, st_distance(a.geom, b.geom) as distance from gare a, gare b where st_distance(a.geom, b.geom) < 500 and (a.id_rte500 != b.id_rte500) order by distance
Cependant, je n'ai que les distances les plus courtes d'affichées.
Merci à vous.
Hors ligne
#2 Wed 30 October 2019 09:25
- Ben22
- Participant actif
- Lieu: 33
- Date d'inscription: 11 May 2016
- Messages: 96
Re: Afficher distances
Bonjour,
Vous pouvez essayer st_clusterDBSCAN qui semble faire le job par rapport à votre demande.
Voici un exemple testé sur une de mes bases, à adapter :
Code:
WITH hello as (SELECT * FROM (SELECT id, ST_ClusterDBSCAN(the_geom, eps:=19.99999, minpoints := 2) OVER () as cid, the_geom FROM batiment ) t1 WHERE t1.cid IS NOT NULL) SELECT *, CASE WHEN id IN (SELECT id FROM hello ) THEN 'collé' ELSE 'separé' END as relation FROM batiment
Hors ligne
#3 Tue 05 November 2019 22:16
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Re: Afficher distances
Merci à vous
Hors ligne
#4 Wed 06 November 2019 09:34
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: Afficher distances
Bonjour
Vous pouvez aussi pour régler la distance utiiser la fonction st_clusterwithin(geometryset,distance)
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne