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 !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres des Utilisateurs Francophones de QGIS 2019 à Montpellier

12 et 13 décembre 2019 à Montpellier.

Cet événement est organisé en partenariat entre Montpellier SupAgro et l’OSGeo-fr.

http://conf.qgis.osgeo.fr/

 

#1 Tue 27 November 2018 17:13

Renaud
Membre
Lieu: Olivet (45)
Date d'inscription: 9 Mar 2006
Messages: 2271

PostGIS - Plus proche voisin

Bonjour,

Nous cherchons à déterminer le cours d'eau sur lequel se situent un ensemble de points de mesure.
Je m'attendais à trouver une fonction du genre ST_nearestneighbour, mais impossible de mettre la main dessus.

On s'en sort par un calcul de la matrice des distances point-rivière suivi d'un "row_number() + partition by", suivi d'un filtre.
Mais c'est un peu laborieux.

Est-ce que vous auriez une solution plus élégante ?

Merci

Dernière modification par Renaud (Tue 27 November 2018 17:19)


Renaud Mouche

Hors ligne

 

#2 Tue 27 November 2018 17:28

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 975

Re: PostGIS - Plus proche voisin

Utilisation d'une requête latérale ?

Code:

SELECT id_point, 
( SELECT id_riviere FROM
    (SELECT st_distance(point.geom, riviere.geom) d,  id_riviere 
     FROM riviere ORDER BY point.geom <-> riviere.geom LIMIT 10) foo
  ORDER BY d LIMIT 1
)
FROM point

Dernière modification par tumasgiu (Tue 27 November 2018 17:32)

Hors ligne

 

#3 Tue 27 November 2018 17:53

Nicolas Ribot
Moderateur
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1162

Re: PostGIS - Plus proche voisin

Bonsoir,

Et comme on me le faisait remarquer sur le forum Postgis,  avec un postgis récent, pas besoin d'utiliser st_distance: geom <-> geom renvoie la vraie distance:

SELECT id_point,
( SELECT id_riviere FROM
    (SELECT point.geom <-> riviere.geom d,  id_riviere
     FROM riviere ORDER BY point.geom <-> riviere.geom LIMIT 10) foo
  ORDER BY d LIMIT 1
)
FROM point


Nicolas

Hors ligne

 

#4 Tue 27 November 2018 18:09

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 975

Re: PostGIS - Plus proche voisin

Super, j'ai du le lire mais j'ai aussi du l'oublier !
A ce moment là, la sous-requête de l'expression latérale est superflue non ?

Dernière modification par tumasgiu (Tue 27 November 2018 18:10)

Hors ligne

 

#5 Wed 28 November 2018 09:53

Renaud
Membre
Lieu: Olivet (45)
Date d'inscription: 9 Mar 2006
Messages: 2271

Re: PostGIS - Plus proche voisin

Bonjour,

Merci pour le retour,

Je teste la solution


Renaud Mouche

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |