#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: 1160
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: 1160
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: 1160
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: 3199
- 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