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

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

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

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

 

Pied de page des forums

Powered by FluxBB