Cắt đa giác trong QGIS ở một khoảng cách cụ thể từ một tính năng trong lớp khác


8

Tôi muốn có thể cắt các đa giác như bên dưới, trong QGIS, ở một khoảng cách được đặt ở một bên của một tính năng được chỉ định trên một lớp khác, trong trường hợp này là một đường đi bộ từ OS Mastermap.

Theo cách này, sau đó tôi sẽ có một bộ đệm dọc theo các đường có thể đại diện cho một mạng lưới đi xe rừng chẳng hạn. Trong trường hợp này, nó là một tính năng tuyến tính rất đơn giản, nhưng chúng thường phức tạp hơn nhiều và có thể rất tốn thời gian để cắt bỏ. Lý tưởng nhất là tôi cần giữ lại đa giác ban đầu vì điều này cũng sẽ được sử dụng.

Có thể cắt đa giác theo cách này hay tôi sẽ phải tạo đa giác mới dưới dạng bộ đệm dọc theo đường và sau đó cắt chúng từ đa giác hiện có?

Screengrab của đa giác được cắt

Câu trả lời:


3

Trong quy trình làm việc này, bạn sẽ cần plugin refFifts , để sử dụng geomintersects().

  1. Mở bảng thuộc tính của lớp Đa giác của bạn.
  2. Kích hoạt Máy tính Trường.
  3. Đánh dấu vào Update existing fieldvà chọn <geometry>từ menu kéo xuống.
  4. Cung cấp biểu thức này: difference($geometry, buffer(geom_from_wkt(geomintersects( 'Your_LineLayerName', '$geometry')), 20))

Vui lòng sửa đổi Your_LineLayerNameđó là lớp (đường dẫn) của bạn và 20(kích thước bộ đệm) theo yêu cầu.

Lưu ý Vì thay đổi được thực hiện ngay lập tức và không thể đảo ngược, vui lòng cẩn thận và giữ một bản sao của tệp Đa giác gốc của bạn.


1
Cảm ơn Kazuhito, nó hoạt động rất tốt, nhưng dường như nó đã cắt VÀ loại bỏ dòng đệm ra khỏi đa giác hiện có - có thể giữ lại thay vào đó như một đa giác mới không?
JimS-W

@ JimS-W Nếu bạn sử dụng intersection()thay vì difference(), nó sẽ cung cấp cho bạn phần đệm. Nhưng tôi e rằng nó không giúp bạn có được cả hai hình học (khác biệt và giao nhau) trong một hành động.
Kazuhito

1
Điều đó tốt, tôi sẽ có thể có được những gì tôi cần bằng cách kết hợp cả 2 trong một lớp đầu tôi nghĩ. Cảm ơn một lần nữa
JimS-W

4

Bạn sẽ cần đến bufferđường đã chọn (đường dẫn) ở khoảng cách bạn yêu cầu và sau đó cắt chúng ra khỏi đa giác khác bằng cách sử dụng difference.

Nếu đó là một hoạt động bạn cần thực hiện rất thường xuyên thì sẽ đáng để viết một kịch bản python để thực hiện cả hai hoạt động cùng nhau.


Cảm ơn iant, tôi nghĩ rằng đó có thể là trường hợp. Tôi phải làm điều đó khá thường xuyên nhưng tôi thực sự không biết bắt đầu từ đâu với việc viết kịch bản, ngoài những truy vấn cơ bản. Bạn có nghĩ nó khá đơn giản không?
JimS-W

Tôi đã cố gắng lặp lại thao tác này bằng cách sử dụng sự khác biệt về biểu thức ($ hình học, bộ đệm (geom_from_wkt (geomintersects ('Your_LineLayerName', '$ hình học')), 20)), trong QGIS 3.2.1, nhưng dường như nó không còn hoạt động . Nó sẽ trả về lỗi "Lỗi Eval: đối tượng 'QssGeometry' không có thuộc tính 'exportToWkt'" hoặc chỉ cho tôi biết lớp tôi đang cố gắng cắt không tồn tại. Có gợi ý nào @Kazuhito không? Tôi đã cài đặt plugin refFifts.
JimS-W

Vui lòng đặt câu hỏi mới thay vì sử dụng nhận xét
Ian Turton

Sẽ làm @Ian Turton. Tôi đã tìm thấy chức năng Bật theo dõi -> chức năng bù đắp bao gồm hầu hết những gì tôi cần làm bây giờ trong mọi trường hợp.
JimS-W

0

Trong các phiên bản mới hơn của QGIS (Tôi đang sử dụng 3.2.1) giờ đây có thể thực hiện việc này nhanh chóng và dễ dàng hơn bằng cách sử dụng chức năng 'Offset' trong Thanh công cụ chụp (từ menu thả xuống bên cạnh 'Bật theo dõi'):

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.