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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Tue 14 May 2019 22:20

Julien Gondellon
Participant actif
Date d'inscription: 17 Apr 2014
Messages: 67

Question sur ST_LineInterpolatePoint

Bonsoir,
Je voudrais savoir si avec cet outil nous pouvons creer des points à une distance donnée depuis l'extrémité d'une polyligne.
Merci

Hors ligne

 

#2 Wed 15 May 2019 07:29

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

Re: Question sur ST_LineInterpolatePoint

Bonjour,

Si l'extrémité est le dernier sommet de la polyligne (par opposition au premier, l'origine),  et d la distance, la syntaxe serait :

Code:

ST_LineInterpolatePoint(geom, 1 - (d / st_Length(geom))

Plus de détails :
http://postgis.net/docs/ST_LineInterpolatePoint.html


Christophe Damour (SIGéal)

Hors ligne

 

#3 Fri 17 May 2019 00:03

Julien Gondellon
Participant actif
Date d'inscription: 17 Apr 2014
Messages: 67

Re: Question sur ST_LineInterpolatePoint

Merci pour le retour.
Je connaissais le lien que tu m'as transmis.
Trois dernières questions :
1. Qu'elle serait la formule si je fais la même chose en partant de l'origine ? Est-ce que c'est ça  : T_LineInterpolatePoint(geom, (d / st_Length(geom))
2. Comment faire si je veux créer plusieurs points sur cette même ligne à partir de cette fonction ?
3. Comment faire avec cette fonction, dans le cas où j'ai plusieurs tronçons, et que mes points ne sont associés qu'à certains tronçons. Je présume que ma base de données qui correspondra à mes points doit contenir le numéro du tronçon et la distance. Et comment lui signifier dans la fonction

(Je pense que je ne suis pas du tout clair sur le troisième point.

Merci du retour.

Hors ligne

 

#4 Fri 17 May 2019 10:07

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

Re: Question sur ST_LineInterpolatePoint

1. Qu'elle serait la formule si je fais la même chose en partant de l'origine ? Est-ce que c'est ça  : T_LineInterpolatePoint(geom, (d / st_Length(geom))


Oui.


2. Comment faire si je veux créer plusieurs points sur cette même ligne à partir de cette fonction ?


Si vous voulez interpoler plusieurs points avec la même distance entre eux :
https://postgis.net/docs/ST_LineInterpolatePoints.html

Si vous voulez avoir plusieurs champs représentant plusieurs points, vous pouvez juste répéter l'appel à la fonction.

Si vous voulez créer un multipoint, vous utilisez une fonction telle que st_collect ou st_union,
qui possèdent toutes deux une définition ayant comme un argument un tableau de geometries :

Code:

St_Collect(ARRAY[ST_LineInterpolatePoint(geom, 1 - (d / st_Length(geom)), ST_LineInterpolatePoint(geom, 1 - (e / st_Length(geom)), ...])

3. Comment faire avec cette fonction, dans le cas où j'ai plusieurs tronçons, et que mes points ne sont associés qu'à certains tronçons. Je présume que ma base de données qui correspondra à mes points doit contenir le numéro du tronçon et la distance. Et comment lui signifier dans la fonction


Il faut joindre vos deux tables pour créer l'ensemble des points dans une sous requête
puis utiliser la version agrégat de st_collect pour collecter tout les points par tronçon.

Avec un schema comme suit :

Code:

CREATE TABLE tronçon(numero_tronçon int, geom geometry);
CREATE TABLE point(distance d double, numero_tronçon int);

La requête

SELECT
    numero_tronçon,
    st_collect(the_point) AS multi_points
FROM(
    SELECT
         t.numero_tronçon,
         ST_LineInterpolatePoint(geom, 1 - (d / st_Length(geom)) AS the_point
    FROM
        tronçon AS t
    JOIN
        point AS p
    ON
        t.numero_tronçon = p.numero_tronçon
    ) AS sous_requete
GROUP BY
    numero_tronçon
;

Hors ligne

 

#5 Tue 21 May 2019 12:46

Julien Gondellon
Participant actif
Date d'inscription: 17 Apr 2014
Messages: 67

Re: Question sur ST_LineInterpolatePoint

Bonjour,

Et merci pour ces récents retour. J'ai un problème avec cette ligne de code. Elle me donne du fil à retordre.

Pour rappel, j'ai :
- un shape de tronçon :
          ¤ Champ 1 : idtroncon

- et un csv de point :
          ¤ Champ 1 : IDTroncon (commun avec le shape),
          ¤ Champ 2 : distance
          ¤ Champ 2 : du texte.

Et voici notre ligne de code :

Code:

Create table resultat as (
select
 idtroncon,
distance p,
 st_collect(pointanomalie) AS multi_points
 FROM(
    SELECT
         t.idtroncon
         ST_LineInterpolatePoint (geom,(p.distance / st_Length(geom))) AS pointanomalie
    FROM
        troncon AS t
    JOIN
        pointanomalie AS p
    ON
        t.idtroncon = p.idtroncon 
    ) AS sous_requete
GROUP BY
    idtroncon)
;

Mais ca ne marche pas.

Quelqu'un à une réponse. Je pense que c'est dans la dénomination des couches ou données.

Merci de votre retour

Hors ligne

 

#6 Tue 21 May 2019 13:52

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

Re: Question sur ST_LineInterpolatePoint

Dans votre requête principale, vous incluez le champ distance
dans votre clause SELECT.
Ca coince pour deux raisons :


distance n'est pas inclus dans la clause SELECT de la sous-requête,
donc la requête principale doit vous indiquez que la colonne distance
n'existe pas dans l'expression sous_requête.

2° Votre requête principale comporte une clause GROUP BY.
Quand celle ci est présente, vous ne pouvez pas utiliser des
colonnes dans la clause SELECT autres que celles spécifiées
dans la clause GROUP BY, exception faite quand celles-ci sont
utilisées dans une fonction d'agrégat (ici la fonction st_collect).

Vous avez aussi une erreur de syntaxe à la ligne 8, il manque une
virgule pour séparer vos deux expressions.

Dernière modification par tumasgiu (Tue 21 May 2019 13:55)

Hors ligne

 

Pied de page des forums

Powered by FluxBB