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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Tue 27 November 2018 17:13

Renaud
Membre
Lieu: Ploemeur (56)
Date d'inscription: 9 Mar 2006
Messages: 2315

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: 1129

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
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

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: 1129

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: Ploemeur (56)
Date d'inscription: 9 Mar 2006
Messages: 2315

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