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 !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Responsables de formations en géomatique,

merci d'actualiser vos données sur GeoFormations

#1 jeu. 16 février 2017 09:19

fassa222
Membre
Date d'inscription: 18 janv. 2012
Messages: 16

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 jeu. 16 février 2017 10:20

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 723
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 (jeu. 16 février 2017 10:24)


On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

#3 jeu. 16 février 2017 10:23

fassa222
Membre
Date d'inscription: 18 janv. 2012
Messages: 16

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 jeu. 16 février 2017 10:29

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 723
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


On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

#5 jeu. 16 février 2017 11:01

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 723
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

On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

#6 jeu. 16 février 2017 12:24

fassa222
Membre
Date d'inscription: 18 janv. 2012
Messages: 16

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 jeu. 16 février 2017 12:33

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 723
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 (jeu. 16 février 2017 12:33)


On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

#8 ven. 17 février 2017 09:01

Ben22
Membre
Date d'inscription: 11 mai 2016
Messages: 12

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 (ven. 17 février 2017 09:03)

Hors ligne

 

#9 ven. 17 février 2017 11:02

heretik25
Membre
Lieu: besancon
Date d'inscription: 12 mai 2011
Messages: 723
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.


On ne va jamais aussi loin que lorsque l'on ne sait pas où l'on va...
Perso ~ www.partir-en-vtt.com Pro ~ www.sigogne.org ~ Twitter : @partirenvtt

Hors ligne

 

#10 ven. 17 février 2017 14:36

fassa222
Membre
Date d'inscription: 18 janv. 2012
Messages: 16

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 ven. 17 février 2017 14:41

Ben22
Membre
Date d'inscription: 11 mai 2016
Messages: 12

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 (ven. 17 février 2017 14:41)

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |