#1 Thu 23 November 2017 13:56
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Fonction ST_InterpolatePoint Postgis et multilinestring
Bonjour,
Je dispose d'une table de linéaire routier stockée sous la forme de multilinestring (certaines routes étant en plusieurs "parties" non contiguës).
J'utilise la fonction ST_InterpolatePoint pour calculer la distance entre le début de la route et un point donné. Cette fonction marche bien avec des géométries de type linestring mais pas avec des multilinestring.
J'ai tenté de transformer mes routes qui sont en plusieurs "parties" non contiguës en linestring avec ST_Dump mais j'obtiens ainsi plusieurs objets de type linestring pour une seule route et la fonction ST_InterpolatePoint n'accepte qu'un seul objet.
Est-ce que vous avez une piste dans l'utilisation de cette fonction avec des multilinestring ? Ou s'il y a une fonction pour transformer un linéaire de type multilinestring (plusieurs "parties" non contiguës) en linestring ?
Si certains ont des pistes je suis preneur.
PS : j'utilise Postgis 2.2.2
Pierre
Hors ligne
#2 Thu 23 November 2017 15:12
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: Fonction ST_InterpolatePoint Postgis et multilinestring
Si j'ai bien compris la problématique,
http://postgis.net/docs/ST_MakeLine.html
peut faire le travail, mais il va falloir trouver un moyen d'ordonner
les différentes composantes de chaque multi.
Hors ligne
#3 Thu 23 November 2017 15:43
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: Fonction ST_InterpolatePoint Postgis et multilinestring
J'avais vu cette fonction effectivement mais en fait je ne cherche pas à ajouter une portion de linéaire entre les différentes "parties" existantes, je souhaite juste transformer le type de multilinestring en linestring en conservant les géométries existantes.
Hors ligne
#4 Thu 23 November 2017 16:15
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: Fonction ST_InterpolatePoint Postgis et multilinestring
La seule transformation possible d'une MULTILS vers une LS,
c'est de connecter chaque extrémité des composantes de la MULTILS entre elles
ex:
MULTILINESTRING( (0 0, 0 1) , (0 2, 0 3) )
->
LINESTRING(0 0, 0 1, 0 2, 0 3)
puisque par définition, une LINESTRING est une suite de point connectés les uns aux autres.
Dernière modification par tumasgiu (Thu 23 November 2017 16:18)
Hors ligne
#5 Thu 23 November 2017 16:19
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: Fonction ST_InterpolatePoint Postgis et multilinestring
C'est ce qu'il me semblait mais je préférais demander au cas où j'ai raté une étape.
Je trouve juste étonnant qu'on puisse utiliser la fonction ST_AddMeasure avec une multilinestring et qu'on ne puisse ensuite utiliser ST_InterpolatePoint que sur des linestring.
Merci pour ton aide.
Hors ligne
#6 Thu 23 November 2017 17:04
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: Fonction ST_InterpolatePoint Postgis et multilinestring
AddMeasure agit sur une seule dimension qui n'est pas spatiale,
elle attribue des bornes aux extrémités de chaque linestring puis
donne a chaque point la valeur interpolée en fonction de son emplacement mesurée sur la linestring.
Dans le cas MULTILS, Les segments"manquants" entre chaque LS d'une MULTILS ne sont pas pris en compte
dans l'interpolation, alors que dans InterpolatePoint, il serait nécessaire de le faire,
et les développeurs de Postgis ont choisi de ne pas les considérer.
Je trouve que cela cohérent, et cela conserve la signification de ce qu'est une MULTILS.
Dernière modification par tumasgiu (Thu 23 November 2017 17:10)
Hors ligne
#7 Fri 24 November 2017 11:02
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Fonction ST_InterpolatePoint Postgis et multilinestring
Bonjour,
Je ne suis pas sur de comprendre votre probleme:
st_lineInterpolatePoint ne calcule pas de distance
st_dump() vous renvoie les linestrings, en dupliquant les id des lignes,
puis st_lineInterpolatePoint sur chaque objet, non ?
Nicolas
Hors ligne
#8 Fri 24 November 2017 13:50
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: Fonction ST_InterpolatePoint Postgis et multilinestring
Bonjour Nicolas,
Je ne parle pas de la fonction ST_LineInterpolatePoint mais de la fonction ST_InterpolatePoint, qui elle renvoie la valeur de la mesure d'une géométrie à un point donné, ce qui équivaut à donner une distance.
En fait en creusant un peu plus, il est possible d'utiliser ST_InterpolatePoint dans mon cas : une fois que j'ai ajouté la dimension M via ST_AddMeasure, je transforme les multilinestring en linestring avec ST_Dump. Je me retrouve potentiellement avec plusieurs objets pour une même route.
Ce que je n'avais pas saisi, c'est que la dimension M est toujours celle de la multilinestring donc depuis le point de départ de la route (sans distinction de "partie" de route).
Ainsi je peux requêter pour obtenir la distance depuis le point de départ pour chaque point (ST_LineInterpolatePoint couplé avec ST_Intersects entre les routes et les points).
Pierre
Dernière modification par Hydrolithe (Fri 24 November 2017 14:26)
Hors ligne