Message posté par : Alexandre HEURION
----------------------------------------
Bonjour,
Je me suis penché sur ce sujet que je trouve super intéressant, et j'ai trouvé un
moyen (avec Qgis natif, un plugin et aucun script ni SQL) de découper un polygone par une
couche de points, les lignes de découpe étant équidistantes aux points proches. Voici ma
démarche :
disposer au préalable d'une couche de points (appelée par la suite
'couche_points_ini') et d'une couche de polygone(s)
('couche_polygone_ini')
1- "Matrice des distances" de 'couche_points_ini' vers elle-même (la
couche doit avoir un ID unique) => le résultat est une couche multipoints composées des
noeuds de départ et d'arrivée pour chaque distance
2- "De morceaux multiples à morceaux uniques" avec le résultat précédent
3- "Points vers lignes" (champs de tri sans importance, champs de regroupement :
distance)
4- "Supprimer les géométries dupliquées" car le traitement précédent va relier
chaque points aux autres dans un sens et dans l'autre
5- "Centroïdes" des lignes précédentes
6- installer le plugin "Water Network Tools" et utiliser le traitement
"Split lines at points" avec les centroïdes pour les points et les lignes
nettoyées de ses doublons pour les lignes
7- sélectionner et supprimer un demi-chemin sur deux (par exemple ceux qui partent
d'un noeud initial) :
aggregate(
'id_de_la_couche_points_ini',
'count',
"champs_quelconque",
intersects(buffer($geometry,0.01),start_point(geometry(@parent)))
)>0
7- "Transect" (500m, les deux côtés)
8- sélectionner et supprimer les transect qui intersectent pile (avec un buffer de 0.01
pour que l'intersection fonctionne) les points de couche_points_ini :
aggregate(
'id_de_la_couche_points_ini',
'count',
"champs_quelconque",
intersects($geometry,buffer(geometry((a)parent),0.01))
or
intersects($geometry,buffer(geometry((a)parent),0.01))
)
0
7- "Couper avec des lignes" : découper 'couche_polygone_ini' avec les
lignes transect restantes
8- sélectionner et supprimer les polygones découpés ayant une aire < 0.1 ou nulle :
$area is null or $area<0.1
9- "Accrocher les géométries à la couche" : de la couche résultat précédente
vers elle-même, tolérance : 0.1m
10- créer un ID unique pour chaque polygone
11- "Distance au plus proche centre (points)" avec en couche source la couche de
polygones obtenue précédemment et en destination 'couche_points_ini' (attribut nom
de la couche des centres l'id unique créé précédemment)
12- "Joindre les attributs par valeur de champs" : en entrée la couche de
polygones et en entrée 2 la couche de centres créée précédemment. Indiquer l'id unique
pour les deux et choisir uniquement l'atttribut "HubName" à ajouter à la
couche source
13- "Regrouper" en utilisant le champs "HubName" comme champs de
regroupement
14- "Géométrie d'emprise minimale" : choisir "HubName" comme
champ de regroupement et enveloppe convexe comme type de géométrie. ça permet de supprimer
les artéfacts liés au regroupement de plein de petits polygones
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=347619#p347619
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net