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

GEODATA DAYS 2024

#1 Tue 18 June 2024 11:59

hugo mtda
Participant occasionnel
Date d'inscription: 11 Mar 2024
Messages: 10

R : St_intersection ne découpe pas tout les polygones

Bonjour à tous,

Je souhaite faire une auto-intersection de polygones (tampon de 100m), dans QGIS l'outil Self-intersection, me prend beaucoup trop de temps à tourner (plus de 32h).

Je suis donc passé sur R pour faire le traitement beaucoup plus rapidement. J'utilise le package sf et la fonction st_intersection pour faire mon auto-intersection.

Voici mon code :

Code:

# Charger le fichier GeoPackage
data = st_read("Tampons_100m.gpkg")

# Decouper les polygones a chaque intersection
intersection = st_intersection(data, data)

# Exporter des donnees 
st_write(intersection, "mon_fichier.gpkg", append = FALSE, layer_options = "OVERWRITE=true")

Seulement le résultat que j'obtient ne coupe pas tout mes polygones, certain ne sont pas découpés à chaque intersection.

Je vous joins un exemple de polygone qui n'est pas correctement coupé. Les lignes rouges c'est toutes les intersections de ma couche et en jaune c'est une entité qui a mal été découpée.

Je précise que j'ai vérifié les géométries et qu'il n'y a aucune erreur de géométrie dans ma couche.

Est ce que quelqu'un aurait une idée d’où peut venir le problème ?

Merci d'avance,
Bonne journée


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Tue 18 June 2024 14:33

hugo mtda
Participant occasionnel
Date d'inscription: 11 Mar 2024
Messages: 10

Re: R : St_intersection ne découpe pas tout les polygones

J'ai testé le même traitement en python et j'obtiens exactement le même fichier geopackage en sortie.

Donc visiblement le problème vient de ma couche en entrée. J'ai re-vérifié, mon geopackage n'a aucune erreur de géométrie, toutes mes entités sont bien des polygones. Il y a quelque chose qui m'échappe mais je n'arrive pas à savoir quoi.

Hors ligne

 

#3 Tue 18 June 2024 16:14

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 609

Re: R : St_intersection ne découpe pas tout les polygones

Bonjour,

En SQL sous PostGIS, on écrirait :

Code:

create table mon_resultat as 
select (st_dump(st_intersection(a.geom,st_union(b.geom)))).geom as geom
from data a, data b
where st_intersects(a.geom,b.geom)
group by a.geom
;

Même si je maitrise R, je ne connais pas bien la librairie sf. Mais peut-être que ca donne des pistes pour la rédaction sous R ou sous python.
De plus, si les polygones sont nombreux, il faudrait qu'ils soient indexés préalablement pour une meilleur performance.


Pascal PLUVINET

Hors ligne

 

#4 Tue 18 June 2024 17:05

bbk9
Participant occasionnel
Date d'inscription: 7 Jan 2022
Messages: 24

Re: R : St_intersection ne découpe pas tout les polygones

Avez vous essayé :
intersection <- st_intersection(data)

?

Hors ligne

 

#5 Wed 19 June 2024 11:24

hugo mtda
Participant occasionnel
Date d'inscription: 11 Mar 2024
Messages: 10

Re: R : St_intersection ne découpe pas tout les polygones

Merci pour vos réponses !

Pascal Merci pour ce code, j'ai essayé dans le gestionnaire DB de QGIS, mais je n'ai pas pu importer ma couche Geopackage. Donc il y a réellement un problème avec cette couche, je pense que je vais la refaire entièrement.

bbk9, j'avais d'abord essayé st_intersection(data) mais j'ai eu une erreur : GEOS exception

Hors ligne

 

#6 Fri 21 June 2024 11:47

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3173
Site web

Re: R : St_intersection ne découpe pas tout les polygones

Bonjour

Utiliser QGis pour ce genre de chose c'est pas la bonne solution.

Avec SQL sous postgresql-postgis c'est beaucoup plus facile et rapide en utilisant un LATERAL JOIN.

Je crois que vous travaillez sur le même sujet que moi smile
Cf. PJ

Et tout cela (à par la position des étiquettes) est généré automatiquement depuis SQL et un fichier de style QGis pour les couleurs.

EDIT : un petit extrait de code ou "blade" est une multipolyligne (vos arcs de cercle)

Code:

WITH p as (SELECT po.idparcelle,st_collectionextract((st_split(po.the_geom,bg.blade)),3) geomb

FROM old.parcelle_old_ext po JOIN LATERAL 
(SELECT blade FROM old.blade_groupe gl WHERE st_intersects(gl.blade,po.the_geom) ) bg ON TRUE
ORDER BY idparcelle),

Dernière modification par ChristopheV (Fri 21 June 2024 15:39)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#7 Mon 08 July 2024 15:52

hugo mtda
Participant occasionnel
Date d'inscription: 11 Mar 2024
Messages: 10

Re: R : St_intersection ne découpe pas tout les polygones

Désolé pour le délais de réponse, j'étais pris par d'autres dossiers.

Merci beaucoup pour vos retours, je suis passé sous postgis et c'est beaucoup plus efficace !

En effet Christophe, je crois que nous travaillons sur le même sujet smile

Dernière modification par hugo mtda (Mon 08 July 2024 15:53)

Hors ligne

 

#8 Tue 09 July 2024 10:06

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3173
Site web

Re: R : St_intersection ne découpe pas tout les polygones

Bonjour,

Il est des choses que j'aime lire :

je suis passé sous postgis et c'est beaucoup plus efficace !


La puissance du SQL et des fonctions spatiales de postgis m'étonne chaque jour depuis 15 ans.

Hugo nous travaillons sur le même sujet, j'ai posté quelques articles sur linkedin.

Bonne journée à tous.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB