#1 Mon 08 October 2018 16:17
- benoit111
- Participant actif
- Date d'inscription: 20 Jan 2008
- Messages: 102
selection de ligne
bonjour,
je cherche à sélectionner des lignes à proximité des routes par rapport à une distance....
j'ai choisit de réaliser un buffer sur la route puis une intersection avec la table ligne
Code:
SELECT route.IDtopo,ligne.id,ST_Intersection(ligne.geom, ST_Buffer(route.geom, 10)) as geom FROM tableligne as ligne join bd_topo.route as route on st_intersects(ligne.geom, route.geom)
mais je me rends compte que certaines lignes devrait être sélectionné , généralement c'est des cas ou j'ai des lignes de part et d'autre de la route..si quelqu'un peut m'éclairer sur mon erreur..
merci d'avance
Hors ligne
#2 Mon 08 October 2018 16:38
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: selection de ligne
Salut,
votre requête ne renvoie pas les bons résultats car c'est dans votre prédicat
de jointure (partie après le mot clef ON)
que vous devriez appliquer le buffer à la géométrie de la route.
Actuellement votre requête renvoie pour chaque ligne intersectant une route,
l'identifiant et l'intersection entre cette même ligne et le buffer de la route.
Cependant, je pense que vous pourriez utiliser la fonction st_dwithin.
Celle ci renvoie vrai si les deux opérandes sont distante d'au maximum
une distance quelconque.
https://postgis.net/docs/ST_DWithin.html
N'oubliez pas de filtrer vos résultats car il est possible qu'une même ligne puisse
être renvoyée plusieurs fois si elle se trouvent à distance voulue de plusieurs routes.
Dernière modification par tumasgiu (Mon 08 October 2018 16:39)
Hors ligne
#3 Tue 09 October 2018 10:11
- benoit111
- Participant actif
- Date d'inscription: 20 Jan 2008
- Messages: 102
Re: selection de ligne
ok..merci..
ST_DWithin est trés bien mais j'aimerais que les lignes soit decoupé dans le resultat...
j'avais essayer
Code:
SELECT route.IDtopo,ligne.id,ST_Intersection(ligne.geom, route.geom) as geom FROM tableligne as ligne join bd_topo.route as route on st_intersects(ligne.geom, ST_Buffer(route.geom, 10))
mais cela me renvoyait des points avec une dimension 3d ??
Hors ligne
#4 Tue 09 October 2018 11:15
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: selection de ligne
SI le résultat est une géométrie 3D,
c'est qu'il y a certainement un des deux opérandes qui l'est.
Il faut que vous conserviez le st_buffer dans votre clause select,
sinon lest lignes intersectant le buffer des routes mais pas les
routes elle mêmes renverront une intersection nulle.
Vous pouvez aussi utiliser st_dwithin et quand même découper
les lignes en résultat.
Code:
SELECT route.IDtopo,ligne.id,ST_Intersection(ligne.geom, st_buffer(route.geom, 10)) as geom FROM tableligne as ligne join bd_topo.route as route on st_dwithin(ligne.geom, route.geom, 10)
Dernière modification par tumasgiu (Tue 09 October 2018 11:15)
Hors ligne
#5 Tue 09 October 2018 11:20
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: selection de ligne
Vous pouvez tester le nombre de dimension d'une géométrie avec ST_CoordDim,
et forcer le nombre de dimension avec st_Force2D.
Hors ligne
#6 Tue 09 October 2018 11:47
- benoit111
- Participant actif
- Date d'inscription: 20 Jan 2008
- Messages: 102
Re: selection de ligne
merci tumasgiu
SI le résultat est une géométrie 3D,
c'est qu'il y a certainement un des deux opérandes qui l'est.
oui mes routes..et je l'ai réglé...
merci pour le coup de main
la requête est correcte mais par contre les lignes ne sont pas découpé en fonction du buffer.???
Dernière modification par benoit111 (Tue 09 October 2018 16:39)
Hors ligne