#1 Tue 18 June 2024 11:59
- hugo mtda
- Participant occasionnel
- Date d'inscription: 11 Mar 2024
- Messages: 19
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
Hors ligne
#2 Tue 18 June 2024 14:33
- hugo mtda
- Participant occasionnel
- Date d'inscription: 11 Mar 2024
- Messages: 19
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: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 611
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: 19
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: 3191
- 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
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)
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: 19
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
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: 3191
- 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