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 Mon 15 October 2018 16:13

benoit111
Participant actif
Date d'inscription: 20 Jan 2008
Messages: 102

creation de ligne avec ST_ShortestLine

bonjour,

j'essaye de créer une ligne qui relie deux entités linéaire sur le chemin le plus court avec la fonction ST_ShortestLine...

Code:

create table schema.reseau as
select ligne.id,route.id as idbdtopo, ST_ShortestLine(ligne.geom,route.geom) as the_geom
from ligne , bd_topo.route route

mon soucis est que j'ai le message "Query returned successfully in 40 min 48 secs." mais dans l'onglet query history j'ai "-1Rows Affected" si bien que la table n'est pas créée.. mais je tourne en rond n'ayant pas plus de message d'erreur...

si quel qu 'un peut m'orienter ou me donner un lien vers ce type de problème...

merci d'avance

Hors ligne

 

#2 Mon 15 October 2018 16:48

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

Re: creation de ligne avec ST_ShortestLine

Salut,

actuellement votre requête va créer pour chaque
élément de votre table ligne la plus petite ligne possible
pour chaque élément de la table route.

C'est ce que vous désirez ? ou bien voulez vous, pour
chaque ligne la plus petite ligne avec la route la plus proche ?

Hors ligne

 

#3 Tue 16 October 2018 08:39

benoit111
Participant actif
Date d'inscription: 20 Jan 2008
Messages: 102

Re: creation de ligne avec ST_ShortestLine

bonjour,

je veux récupérer pour chaque ligne la plus petite ligne avec la route la plus proche.....du coup il faudrait une sous requête avec un st_distance??

merci

Hors ligne

 

#4 Tue 16 October 2018 09:32

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

Re: creation de ligne avec ST_ShortestLine

Oui, ou avec l'opérateur <->

Hors ligne

 

#5 Tue 16 October 2018 09:33

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: creation de ligne avec ST_ShortestLine

Bonjour,

Regardez plutot du coté de l'opéréteur <-> pour trouver les voisins les plus proches (KNN)

Nicolas

Hors ligne

 

#6 Tue 16 October 2018 09:58

benoit111
Participant actif
Date d'inscription: 20 Jan 2008
Messages: 102

Re: creation de ligne avec ST_ShortestLine

ok donc avec  un

Code:

ORDER BY (ligne.geom <-> route.geom)

cela devrait suffire?

si je comprends bien ma première requête.. elle devait être très lourde et l’information "query history j'ai "-1Rows Affected" " doit signifier que je n'ai pas assez de place sur ma base??

merci pour l aide

Dernière modification par benoit111 (Tue 16 October 2018 09:58)

Hors ligne

 

#7 Tue 16 October 2018 10:08

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

Re: creation de ligne avec ST_ShortestLine

C'est un message assez étrange,
mais oui votre requête devait prendre un certain temps
vu le nombre d'opération demandé.

Pour utiliser l'opérateur, vous devrez utiliser ce qu'on appelle
une jointure latérale.

Code:

SELECT idroute, idligne, st_shortestline(ligne.geom, route.geom)
FROM ligne CROSS JOIN LATERAL (SELECT idroute, geom FROM route 
                                       ORDER BY ligne.geom <-> route.geom
                                       LIMIT 1) foo

qui peut être raccourcie en :

Code:

SELECT idroute, idligne, st_shortestline(ligne.geom, route.geom)
FROM ligne, (SELECT idroute, geom FROM route 
                                       ORDER BY ligne.geom <-> route.geom
                                       LIMIT 1) foo

Une sous requête latérale permet d'utiliser des éléments de la requête
ou table avec laquelle on essaie de la joindre,
et est évaluée pour chaque ligne de cette même table ou requête.
On peut dire que cette sous requête est corrélée avec la requête principale.

Ici pour chaque élément de ligne,
on utilisera la sous requête pour trouver la route la plus proche,
en triant route par distance croissante avec la ligne et en
ne recuperant que la première ligne.

Dernière modification par tumasgiu (Tue 16 October 2018 10:12)

Hors ligne

 

#8 Tue 16 October 2018 11:07

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: creation de ligne avec ST_ShortestLine

Bonjour,

Faites attention à votre version de Postgis et de postgresql pour l'utilisation de KNN.

https://postgis.net/docs/geometry_distance_knn.html


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB