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 16 February 2017 09:19

fassa222
Participant occasionnel
Date d'inscription: 18 Jan 2012
Messages: 36

Intersection lines et points hormis les extrémités

Bonjour,

J'ai une couche linestring et une couche point, mon objectif est de voir les points qui coupent mon linestring sans pour autant tenir en compte les extrémités de mon linestring. J'ai essayé le st_intersect mais ils me donnent les points en extrémités et c'est pas çà que je souhaite avoir.

Je travaille avec Postgresql sous postgis.

Merci pour vos réponses

Hors ligne

 

#2 Thu 16 February 2017 10:20

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Intersection lines et points hormis les extrémités

Salut, si les points des extrémités ne sont pas intersectés complétement par ton linestring peut être que tu peux regarder du côté d'un différent de st_touches() ?

Un super tuto sur ces fonctions ici :

http://www.postgis.fr/chrome/site/docs/ … ships.html

Sinon une autre idée serait de couper ton linestring par le point et faire un test sur la longueur du morceau intersecté pour ensuite exclure les points touchants des sections trop petites ?

Dernière modification par heretik25 (Thu 16 February 2017 10:24)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#3 Thu 16 February 2017 10:23

fassa222
Participant occasionnel
Date d'inscription: 18 Jan 2012
Messages: 36

Re: Intersection lines et points hormis les extrémités

Bonjour heretik25,

Merci pour ta réponse. Par contre, les extrémités sont complètements intersectées avec mon mon linestring

Hors ligne

 

#4 Thu 16 February 2017 10:29

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Intersection lines et points hormis les extrémités

Salut,

Apparemment, il faudrait creuser du côté de la fonction ST_DumpPoints()

A voir si elle peut exclure les points des extrémités


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#5 Thu 16 February 2017 11:01

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Intersection lines et points hormis les extrémités

Peut être quelque chose comme ça ? smile

Code:

with temp as(
SELECT  row_number() over () as rn,count(*) over () as total_count, edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode

FROM (SELECT 1 As edge_id
    , ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dp
     UNION ALL
     SELECT 2 As edge_id
    , ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp
   ) As foo)

   select * from temp where rn != 1 AND rn <> total_count

Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#6 Thu 16 February 2017 12:24

fassa222
Participant occasionnel
Date d'inscription: 18 Jan 2012
Messages: 36

Re: Intersection lines et points hormis les extrémités

C'est ca que je souhaite.je ne souhaite pas extraire les points de mon ligne mais plutôt les extrémités de mon ligne

Hors ligne

 

#7 Thu 16 February 2017 12:33

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Intersection lines et points hormis les extrémités

Dans ce cas il faut modifier la clause where de cette manière

Code:

select * from temp where rn = 1 OR rn = total_count

Dernière modification par heretik25 (Thu 16 February 2017 12:33)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#8 Fri 17 February 2017 09:01

Ben22
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 96

Re: Intersection lines et points hormis les extrémités

Vous pouvez également regarder du côté de ST_Line_Locate_Point.

Voici un exemple pour extraire tous les vertex qui ne sont pas des extrémités :

Code:

(WITH bran_p as (SELECT gckey,  (st_dumppoints(geometrie)).geom  as geometrie, ST_Line_Locate_Point(st_linemerge(geometrie), (st_dumppoints(geometrie)).geom) as rank FROM MultiLinestring )
    SELECT t2.geometrie FROM  bran_p as t2 WHERE t2.rank NOT IN (1,0) )

Dernière modification par Ben22 (Fri 17 February 2017 09:03)

Hors ligne

 

#9 Fri 17 February 2017 11:02

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: Intersection lines et points hormis les extrémités

Hello Ben22,

ST_Line_Locate_Point() retourne les vertex de la ligne moi j'avais cru comprendre que la demande c'était de récupérer des points intersectés par la ligne et non les points de la ligne elle même mais je peux me tromper smile

En tout cas la requête est intéressante, merci pour le partage.


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#10 Fri 17 February 2017 14:36

fassa222
Participant occasionnel
Date d'inscription: 18 Jan 2012
Messages: 36

Re: Intersection lines et points hormis les extrémités

Bonjour heretik25 et Ben22,

Merci encore pour vos réponses. Je reprécise ma demande. En fait j'ai une couche ligne (linestring) et une couche point. Mon besoin est de voir quelle point de ma couche point coupe ma ligne. J'ai déjà tester l’intersecte, le résultat prend en compte les points en extrémité de la couche point qui intersectent les lignes de la couche ligne(ce que je ne souhaite pas). Donc je veux une méthode qui permet de supprimer les points en extrémité de la couche point qui intersectent la couche ligne. De mon coté j'ai réfléchis en décomposant les requêtes:
table: t_point ;
table:t_ligne;
---extraction des extrémités de t_ligne correspondants aux t_point
create table noeudextrem as
    select distinct(nd.nd_code), cbl.cm_code, nd.geom from t_ligne cbl join t_point nd on st_dwithin(st_startpoint(cbl.geom),nd.geom,.01) union all
    select distinct(nd.nd_code), cbl.cm_code, nd.geom from t_ligne cbl join t_point nd on st_dwithin(st_endpoint(cbl.geom),nd.geom,.01);
---Suppression des extrémités des lignes correspondants aux points
DELETE FROM t_point as t WHERE t.nd_code in (select nd_code from noeudextrem) RETURNING *;
---t_point qui coupent t_ligne
select * from t_point as pc join t_ligne cbl on ST_intersects (pc.geom,cbl.geom)

J'ai essayer de faire tout ça dans une requête récursive mais ca bloque au niveau du DELETE FROM. Si quelqu'un peut faire tout ça dans une seule requête,je suis preneur.

Cordialement.

Hors ligne

 

#11 Fri 17 February 2017 14:41

Ben22
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 96

Re: Intersection lines et points hormis les extrémités

yikes effectivement heretik, je pensais qu'il s'agissait d'une découpe par les vertex, mea culpa  big_smile

Dernière modification par Ben22 (Fri 17 February 2017 14:41)

Hors ligne

 

Pied de page des forums

Powered by FluxBB