Memotong Poligon di QGIS pada jarak tertentu dari fitur di lapisan lain

8

Saya ingin dapat memotong poligon seperti yang di bawah ini, di QGIS, pada jarak yang ditentukan kedua sisi fitur yang ditentukan pada lapisan lain, dalam hal ini jalur jalur setapak dari OS Mastermap.

Dengan cara ini saya kemudian akan secara efektif memiliki penyangga di sepanjang garis yang dapat mewakili jaringan naik hutan, misalnya. Dalam hal ini ini adalah fitur linier yang sangat sederhana, tetapi mereka seringkali jauh lebih kompleks, dan dapat sangat memakan waktu untuk dihilangkan. Idealnya saya perlu mempertahankan poligon asli karena ini akan digunakan juga.

Apakah mungkin untuk memotong poligon dengan cara ini, atau apakah saya harus membuat poligon baru sebagai buffer di sepanjang garis dan kemudian memotongnya dari poligon yang ada?

Screengrab poligon yang akan dipotong

JimS-W
sumber

Jawaban:

3

Dalam alur kerja ini, Anda akan memerlukan plugin refFunctions , untuk digunakan geomintersects().

  1. Buka tabel atribut pada layer Polygon Anda.
  2. Aktifkan Kalkulator Bidang.
  3. Centang Update existing fielddan pilih <geometry>dari menu pull-down.
  4. Berikan ungkapan ini: difference($geometry, buffer(geom_from_wkt(geomintersects( 'Your_LineLayerName', '$geometry')), 20))

Silakan modifikasi Your_LineLayerNameyang mana (path) layer Anda, dan 20(ukuran buffer) sesuai kebutuhan.

NB. Karena perubahan dibuat secara instan dan tidak dapat dipulihkan, harap berhati-hati dan simpan salinan file Polygon asli Anda.

Kazuhito
sumber
1
Terima kasih Kazuhito, itu bekerja dengan baik, tetapi tampaknya memotong DAN menghapus garis buffer dari poligon yang ada - apakah mungkin untuk mempertahankannya sebagai poligon baru?
JimS-W
@ JimS-W Jika Anda menggunakan intersection()alih-alih difference(), itu akan memberi Anda bagian yang disangga. Tetapi saya khawatir itu tidak membantu Anda untuk mendapatkan kedua geometri (perbedaan dan persimpangan) dalam aksi tunggal.
Kazuhito
1
Tidak apa-apa, saya harus bisa mendapatkan apa yang saya butuhkan dengan menggabungkan 2 di lapisan awal yang saya pikir. Terima kasih lagi
JimS-W
4

Anda perlu ke bufferjalur (jalur) yang dipilih pada jarak yang Anda butuhkan dan kemudian memotongnya dari poligon lain yang digunakan difference.

Jika itu adalah operasi yang perlu Anda lakukan sangat sering maka ada baiknya menulis skrip python untuk melakukan kedua operasi bersama.

Ian Turton
sumber
Terima kasih sedikit, saya pikir itu mungkin terjadi. Saya harus melakukannya dengan cukup teratur tetapi saya tidak benar-benar tahu harus mulai dari mana dengan menulis skrip, lebih dari sekedar pertanyaan dasar. Apakah menurut Anda ini cukup jujur?
JimS-W
Saya telah mencoba mengulangi operasi ini menggunakan perbedaan ekspresi ($ geometry, buffer (geom_from_wkt (geomintersects ('Your_LineLayerName', '$ geometry')), 20)), di QGIS 3.2.1, tetapi sepertinya tidak lagi berfungsi . Entah mengembalikan kesalahan "Kesalahan Eval: objek 'QgsGeometry' tidak memiliki atribut 'exportToWkt'", atau hanya memberi tahu saya lapisan yang saya coba potong tidak ada. Ada saran @Kuhuhito? Saya telah menginstal plugin refFunctions.
JimS-W
Silakan ajukan pertanyaan baru daripada menggunakan komentar
Ian Turton
Akan melakukan @Ian Turton. Saya telah menemukan fungsi Enable tracing -> offset mencakup sebagian besar dari apa yang perlu saya lakukan sekarang dalam hal apa pun.
JimS-W
0

Dalam versi QGIS yang lebih baru (saya menggunakan 3.2.1) sekarang dimungkinkan untuk melakukan ini lebih cepat dan mudah menggunakan fungsi 'Offset' di dalam Snapping Toolbar (dari menu drop-down di sebelah 'Enable Tracing'):

masukkan deskripsi gambar di sini

JimS-W
sumber