Schneiden von Polygonen in QGIS in einem bestimmten Abstand von einem Feature in einer anderen Ebene

8

Ich möchte in der Lage sein, Polygone wie das folgende in QGIS in einem festgelegten Abstand zu beiden Seiten eines bestimmten Features auf einer anderen Ebene zu schneiden, in diesem Fall eine Fußweglinie von OS Mastermap.

Auf diese Weise hätte ich dann effektiv einen Puffer entlang der Linien, der zum Beispiel ein Waldfahrnetz darstellen könnte. In diesem Fall handelt es sich um ein sehr einfaches lineares Merkmal, das jedoch häufig viel komplexer ist und das Ausschneiden sehr zeitaufwändig sein kann. Idealerweise muss ich das ursprüngliche Polygon beibehalten, da dieses ebenfalls verwendet wird.

Ist es möglich, ein Polygon auf diese Weise zu schneiden, oder müsste ich die neuen Polygone als Puffer entlang der Linie erstellen und diese dann aus dem vorhandenen Polygon ausschneiden?

Screengrab des zu schneidenden Polygons

JimS-W
quelle

Antworten:

3

In diesem Workflow benötigen Sie das RefFunctions- Plugin, um es verwenden zu können geomintersects().

  1. Öffnen Sie die Attributtabelle Ihrer Polygon-Ebene.
  2. Feldrechner aktivieren.
  3. Kreuzen Sie an Update existing fieldund wählen Sie <geometry>aus dem Pulldown-Menü.
  4. Geben Sie diesen Ausdruck an: difference($geometry, buffer(geom_from_wkt(geomintersects( 'Your_LineLayerName', '$geometry')), 20))

Bitte ändern Your_LineLayerNameSie 20nach Bedarf Ihre (Pfad-) Ebene und (Puffergröße).

NB. Da die Änderung sofort und irreversibel vorgenommen wird, seien Sie bitte vorsichtig und bewahren Sie eine Kopie Ihrer ursprünglichen Polygon-Datei auf.

Kazuhito
quelle
1
Danke Kazuhito, das funktioniert großartig, aber es scheint die gepufferte Linie aus dem vorhandenen Polygon herauszuschneiden UND zu entfernen - ist es möglich, sie stattdessen als neues Polygon beizubehalten?
JimS-W
@ JimS-W Wenn Sie intersection()anstelle von verwenden difference(), erhalten Sie den gepufferten Teil. Aber ich fürchte, es hilft Ihnen nicht, beide Geometrien (Differenz und Schnittmenge) in einer einzigen Aktion zu erhalten.
Kazuhito
1
Das ist in Ordnung, ich sollte in der Lage sein, das zu bekommen, was ich brauche, indem ich die 2 in einer Kratzschicht kombiniere, denke ich.
Nochmals vielen
4

Sie müssen bufferdie ausgewählte Linie (Pfad) in der gewünschten Entfernung auswählen und diese dann mit aus dem anderen Polygon ausschneiden difference.

Wenn es sich um eine Operation handelt, die Sie sehr oft ausführen müssen, lohnt es sich, ein Python-Skript zu schreiben, um beide Operationen zusammen auszuführen.

Ian Turton
quelle
Danke, ich dachte, das könnte der Fall sein. Ich muss es ziemlich regelmäßig tun, aber ich weiß nicht wirklich, wo ich mit dem Schreiben von Skripten anfangen soll, abgesehen von einfachen Abfragen. Wäre es ziemlich einfach, denkst du?
JimS-W
Ich habe versucht, diesen Vorgang mit dem Ausdruck Unterschied ($ Geometrie, Puffer (geom_from_wkt (geomintersects ('Your_LineLayerName', '$ Geometrie')), 20)) in QGIS 3.2.1 zu wiederholen, aber es scheint nicht mehr zu funktionieren . Entweder wird der Fehler "Eval Error: 'QgsGeometry' Objekt hat kein Attribut 'exportToWkt'" zurückgegeben oder es wird mir nur mitgeteilt, dass die Ebene, mit der ich schneiden möchte, nicht vorhanden ist. Irgendwelche Vorschläge @Kazuhito? Ich habe das refFunctions-Plugin installiert.
JimS-W
Bitte stellen Sie eine neue Frage, anstatt einen Kommentar zu verwenden
Ian Turton
Wird @ Ian Turton tun. Ich habe festgestellt, dass die Funktion "Ablaufverfolgung aktivieren -> Versatz" auf jeden Fall das meiste abdeckt, was ich jetzt tun muss.
JimS-W
0

In neueren Versionen von QGIS (ich verwende 3.2.1) ist dies jetzt viel schneller und einfacher mit der Funktion "Versatz" in der Snapping-Symbolleiste (im Dropdown-Menü neben "Ablaufverfolgung aktivieren") möglich:

Geben Sie hier die Bildbeschreibung ein

JimS-W
quelle