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 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?

En ligne

 

#2 Sun 18 February 2018 15:51

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

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

 

Pied de page des forums

Powered by FluxBB