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 lun. 20 mars 2017 23:10

Ted
Membre
Date d'inscription: 16 janv. 2007
Messages: 126

[POSTGIS] fonction decoupage polygone par ligne (st_split)

Bonjour à tous,

Je souhaite découper des polygones par des lignes (chaque polygone sera découpé en plusieurs polygone via des lignes, voir pièce jointe).
Ne pouvant utiliser la fonction st_split à mon travail (à la différence de chez moi), j'ai trouvé une fonction sur le net (fonctionnant comme st_split).
Donc mon problème est que le découpage ne se passe comme je veux (pourquoi?).
Voici la requête :

Code:

CREATE OR REPLACE FUNCTION split_polygon(polygon geometry,split_line geometry) RETURNS SETOF geometry AS
$$
DECLARE

    v_geometry geometry;

BEGIN

    FOR v_geometry IN SELECT (ST_Dump((
        ST_Polygonize(ST_Union(ST_Boundary(polygon),split_line))
        ))).geom LOOP
        
        return next v_geometry;
        
    END LOOP;
END;

$$ LANGUAGE plpgsql;
create table test_interpo.tmppolyg as 
select distinct tl.id_triangle,tl.z1,tl.z2,
split_polygon(T.geometryexplose,Tl.geom)as geometry
From test_interpo.line_intertrianglestep2 Tl inner join test_interpo."7123_TRIANGLE_DISTINCT_test_interpo" T
        on Tl.id_triangle = T.id_triangle order by tl.id_triangle, tl.z1;

Que fais-je de mal?

D'avance merci pour votre aide.

Ted

Hors ligne

 

#2 mar. 21 mars 2017 09:56

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 janv. 2006
Messages: 944
Site web

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

Bonjour Ted,

je ne réponds pas à la question "Que fais-je de mal" mais une piste de solution ici (st_node  + st_polygonize) :

https://georezo.net/forum/viewtopic.php … 78#p250778

Mathieu


Mathieu BOSSAERT

Hors ligne

 

#3 mar. 21 mars 2017 21:13

Ted
Membre
Date d'inscription: 16 janv. 2007
Messages: 126

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

Bonsoir,

Merci du lien Mathieu.
J'ai regardé et adapté à mon cas. Malheureusement, le résultat est imparfait, il ne me crée pas tous les polygones. Je ne comprends pas pourquoi.
Voici ma requête :

Code:

create table test_interpo.Polygoniz as 
with bnd as (
    select  id_triangle, geom from test_interpo."7123_test_intervalle_Tr_segmt" union all
    select id_triangle,geom from test_interpo.line_intertrianglestep2
), col as (
    select st_collect(geom) as geom from bnd
) select  (st_dump(st_polygonize(st_node(geom)))).geom as geom 
    from col;

Je devrais avoir 72 polygones et je me retrouve seulement avec 52!

Une idée de l'oubli de ma part?

Up de ma part, je m'étais trompé de table d'entrée. Le résultat ne pouvait être bon. Avec la bonne table tout semble OK.

Un grand merci

Ted

Dernière modification par Ted (mar. 21 mars 2017 21:24)

Hors ligne

 

#4 mar. 21 mars 2017 22:09

Ted
Membre
Date d'inscription: 16 janv. 2007
Messages: 126

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

Par contre si je veux récupérer mon id_triangle, je fais comment.
J'ai beau ajouter l'entrée, il me dit qu'il faut l'ajouter dans la clause group by??

Ted

Hors ligne

 

#5 mer. 22 mars 2017 09:31

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 janv. 2006
Messages: 944
Site web

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

Bonjour Ted,

Avec un update de la couche créée avec la table initial ? De ce genre là :

Code:

UPDATE test_interpo.Polygoniz 
SET id_triangle = bnd.id_triangle 
FROM bnd WHERE st_within(bnd.geom, Polygoniz.geom)

Mathieu BOSSAERT

Hors ligne

 

#6 mer. 22 mars 2017 20:40

Ted
Membre
Date d'inscription: 16 janv. 2007
Messages: 126

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

Merci Mathieu pour ta réponse, mais le résultat n'est pas positif à 100%. De nombreux polygones ne récupèrent pas l'id du bon triangle ;-(.

C'est quand même étrange, qu'avec la requête avec le With, on ne puisse pas introduire cette information.

Je vais poursuivre mes recherches.

a+

Hors ligne

 

#7 mer. 22 mars 2017 21:41

Ted
Membre
Date d'inscription: 16 janv. 2007
Messages: 126

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

Bonsoir,

Si je fais la même requête que pour la géométrie et que j'exclue la-dite géométrie je peux récupérer les id_triangle
comme ceci

Code:

with bds as (
 select  id_triangle, geom from test_interpo."7123_ligne_segmentize_Tr2" union all
    select id_triangle,geom from test_interpo.line_intertrianglestep2 )
    , col as ( 
    select id_triangle from bds group by id_triangle) select id_triangle from col

Mais je ne peux pas faire de jointure entre les deux tables, car pas de point "commun".

??

Hors ligne

 

#8 jeu. 23 mars 2017 09:06

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 janv. 2006
Messages: 944
Site web

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

Ted a écrit:

Merci Mathieu pour ta réponse, mais le résultat n'est pas positif à 100%. De nombreux polygones ne récupèrent pas l'id du bon triangle ;-(.
a+

ST_WITHIN n'est peut-être pas l’opérateur spatial adéquat ?


Mathieu BOSSAERT

Hors ligne

 

#9 jeu. 23 mars 2017 10:43

Ted
Membre
Date d'inscription: 16 janv. 2007
Messages: 126

Re: [POSTGIS] fonction decoupage polygone par ligne (st_split)

J'en ai essayé plusieurs st_intersects, st_contains... et à chaque fois il y a des résultats "impropres".

Ted

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |