Pages: 1
- Sujet précédent - [PostGIS] créer une ligne reliant un point au point le plus proche - Sujet suivant
#1 Sun 18 February 2018 14:03
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
[PostGIS] créer une ligne reliant un point au point le plus proche
Bonjour,
Je m'explique:
Je récupére des points depuis un formulaire dans une bdd postgreSQL, je veux créer un polygone a partir de ces points et le visualiser dans QGIS.
le problème est que la ligne (st_makeline) relie les points aléatoirement alors que je veux par exemple:
la ligne commence au point A et cherche quel point B est le plus proche du point A pour s'y attacher et ainsi de suite...
avez vous une solution?
Hors ligne
#2 Sun 18 February 2018 15:51
Re: [PostGIS] créer une ligne reliant un point au point le plus proche
Bonjour,
Je pense qu'il est nécessaire d'utiliser un ORDER BY dans ta requête pour dire à la fonction ST_MAKELINE() de suivre l'ordre désiré.
Exemple : http://www.bostongis.com/postgis_makeline.snippet
Dernière modification par Loic_GR (Sun 18 February 2018 18:06)
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#3 Mon 19 February 2018 09:38
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [PostGIS] créer une ligne reliant un point au point le plus proche
Bonjour,
il existe la fonction ST_ShortestLine(geometry1, geometry2) qui trace une ligne de plus court chemin entre deux objets géométriques. Pour ma part j'utilisais cette fonction pour tracé une ligne entre 1 point identifié et le point le plus proche parmi un ensemble de point.
voici un exemple de la requete:
Code:
create table "synoptique" as ( with noeud_proche_point as ( select p.id, (st_collect(n.the_geom)) as noeud_geom from "POINT_1" p, "POINT_2" n where st_dwithin(p.the_geom, n.the_geom, 500) group by p.id ) select p1.id, ST_ShortestLine(p1.the_geom,mp.noeud_geom) as the_geom from noeud_proche_point mp, "POINT_1" p1 where mp.id = p1.id)
Cette requete recherche le point le plus proche dans un rayon de 500 et trace le segment le plus proche vers un autre point d'une seconde table.
Si vous n'avez qu'une seule table, il vous faudra dans la requete faire un filtre pour ne pas avoir le même point de départ et de destination
A+
Nicolas GRANIER
Hors ligne
Pages: 1
- Sujet précédent - [PostGIS] créer une ligne reliant un point au point le plus proche - Sujet suivant