Couper des polygones dans QGIS à une distance spécifique d'une entité dans une autre couche

8

Je voudrais pouvoir couper des polygones tels que celui ci-dessous, dans QGIS, à une distance définie de chaque côté d'une entité spécifiée sur une autre couche, dans ce cas, une ligne de sentier de OS Mastermap.

De cette façon, j'aurais alors effectivement un tampon le long des lignes qui pourrait représenter un réseau de balades en forêt, par exemple. Dans ce cas, il s'agit d'une fonction linéaire très simple, mais ils sont souvent beaucoup plus complexes et peuvent être très longs à découper. Idéalement, je dois conserver le polygone d'origine car il sera également utilisé.

Est-il possible de couper un polygone de cette façon, ou devrais-je créer les nouveaux polygones en tant que tampons le long de la ligne, puis les couper du polygone existant?

Capture d'écran du polygone à couper

JimS-W
la source

Réponses:

3

Dans ce workflow, vous aurez besoin du plugin refFunctions pour l'utiliser geomintersects().

  1. Ouvrez la table attributaire de votre couche Polygon.
  2. Activez le calculateur de champ.
  3. Cochez Update existing fieldet sélectionnez <geometry>dans le menu déroulant.
  4. Fournissez cette expression: difference($geometry, buffer(geom_from_wkt(geomintersects( 'Your_LineLayerName', '$geometry')), 20))

Veuillez modifier la Your_LineLayerNamecouche (chemin) et 20la taille de la mémoire tampon selon vos besoins.

NB. Étant donné que le changement est effectué instantanément et de manière irréversible, soyez prudent et conservez une copie de votre fichier Polygon d'origine.

Kazuhito
la source
1
Merci Kazuhito, cela fonctionne très bien, mais il semble couper ET supprimer la ligne tamponnée du polygone existant - est-il possible de le conserver à la place comme un nouveau polygone?
JimS-W
@ JimS-W Si vous utilisez intersection()au lieu de difference(), cela vous donnera la partie tamponnée. Mais je crains que cela ne vous aide pas à obtenir les deux géométries (différence et intersection) en une seule action.
Kazuhito
1
C'est bien, je devrais pouvoir obtenir ce dont j'ai besoin en combinant les 2 dans une couche scratch je pense. Merci encore
JimS-W
4

Vous aurez besoin de bufferla ligne sélectionnée (chemin) à la distance dont vous avez besoin, puis coupez ceux de l'autre polygone à l'aide difference.

S'il s'agissait d'une opération que vous deviez effectuer très souvent, il serait utile d'écrire un script python pour effectuer les deux opérations ensemble.

Ian Turton
la source
Merci iant, j'ai pensé que cela pourrait être le cas. Je dois le faire assez régulièrement mais je ne sais pas vraiment par où commencer avec l'écriture de script, au-delà des requêtes de base. Serait-ce assez simple, pensez-vous?
JimS-W
J'ai essayé de répéter cette opération en utilisant la différence d'expression ($ geometry, buffer (geom_from_wkt (geomintersects ('Your_LineLayerName', '$ geometry')), 20)), dans QGIS 3.2.1, mais cela ne semble plus fonctionner . Soit il renvoie l'erreur "Erreur Eval: l'objet 'QgsGeometry' n'a pas d'attribut 'exportToWkt'", soit il me dit simplement que la couche avec laquelle j'essaye de couper n'existe pas. Des suggestions @Kazuhito? J'ai installé le plugin refFunctions.
JimS-W
Veuillez poser une nouvelle question plutôt que d'utiliser un commentaire
Ian Turton
Fera @Ian Turton. J'ai trouvé que la fonction Activer le traçage -> offset couvre la plupart de ce que je dois faire maintenant dans tous les cas.
JimS-W
0

Dans les versions plus récentes de QGIS (j'utilise 3.2.1), il est maintenant possible de le faire beaucoup plus rapidement et facilement en utilisant la fonction 'Offset' dans la barre d'outils Snapping (dans le menu déroulant à côté de 'Enable Tracing'):

entrez la description de l'image ici

JimS-W
la source