Hòa tan đa giác trong QGIS (GEOS) với dung sai


11

Tôi có một lớp vectơ đa giác đại diện cho khu vực ngập trong một trận lụt. Lớp này đã được tạo ra theo cách mà một số khu vực được tạo thành từ nhiều đa giác chạm nhỏ hơn (xem ảnh chụp màn hình bên dưới, được gắn nhãn "dữ liệu gốc").

Tôi muốn hòa tan các đa giác nơi chúng chạm vào. Nếu tôi sử dụng công cụ xử lý địa lý hòa tan trong fTools của QGIS, sử dụng thư viện GEOS, tôi sẽ nhận được một số kết quả không mong muốn (xem "hòa tan với QGIS fTools"). Có vẻ như GEOS không sử dụng ngưỡng trong việc xác định xem đa giác có chạm vào nhau không, như đã đề cập trong các vấn đề này:

http://trac.osgeo.org/qgis/ticket/3126

http://trac.osgeo.org/qgis/ticket/3184

http://hub.qgis.org/issues/2806

Cách tiếp cận tương tự trong ArcGIS cho kết quả như mong đợi (xem "hòa tan với ArcGIS 10.1").

Rõ ràng đây là một "tính năng" của GEOS, chứ không phải là một lỗi. Có cách nào để sửa dữ liệu tôi phải tạo ra kết quả như mong đợi không? Một sự mất mát nhỏ của độ chính xác (một vài cm?) Có thể được chấp nhận đối với tôi. Lý tưởng nhất là giải pháp tôi có thể viết vào plugin QGIS, như một bước xử lý trước.

Câu hỏi liên quan (không có câu trả lời): Làm cách nào để đặt giá trị dung sai của công cụ Geoprocessing trong QGIS?

Liên kết với dữ liệu mẫu dưới dạng shapefile: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip

hòa tan đa giác v.dissolve


Một cách giải quyết sẽ là đầu tiên phát triển và sau đó thu nhỏ đa giác hòa tan fTools (bằng cách đệm trước tiên với một dương và sau đó với một bộ đệm âm).
Jake

Tôi đã thử điều này, nhưng tôi kết thúc với các vấn đề khác (ví dụ: i.stack.imgur.com/LnFJy.png ). Ở đây, vùng màu xanh được tạo khi tôi đệm / hòa tan / phủ định vùng đệm, nơi không nên có. Điều này không tốt hơn nhiều so với vấn đề ban đầu. Tôi không thể thấy làm thế nào tôi có thể phục hồi góc "sắc nét" ban đầu.
Snorfalorpagus

Câu trả lời:


14

Trong trường hợp này, có vẻ như bạn cần trợ giúp công cụ hòa tan bằng cách sửa cấu trúc liên kết trước. Đây là cách bạn có thể làm điều này trong GRASS.

Khi bạn tải shapefile, đây là cách GRASS nhìn thấy nó:

Mỗi chữ thập đánh dấu một khu vực. Bạn có thể thấy rằng có một số đường chéo trên các đường biên: Đây là các đa giác cúi do độ lệch nhỏ giữa các đường biên.

  1. Loại bỏ các đa giác mảnh được hình thành bởi các khoảng trống giữa các đa giác thực:

    v.clean input=sample output=tempA --o tool=rmarea thresh=0.001
  2. Chụp các đường biên:

    v.clean input=tempA output=tempB --o tool=snap thresh=0.001
  3. Phá vỡ các đường ranh giới tại các giao lộ mới:

    v.clean input=tempB output=tempA --o tool=break thresh=0.001
  4. Xóa các đường biên bây giờ trùng lặp:

    v.clean input=tempA output=tempB --o tool=rmdupl thresh=0.001
  5. Hòa tan các đa giác

    v.dissolve input=tempB output=cleaned --o column=ID

Et voilà:


Cảm ơn @Jake. Đây là một câu trả lời rất rõ ràng. Thật không may khi tôi cố gắng áp dụng quy trình cho toàn bộ tập dữ liệu của mình (bao gồm 2500km2), tôi gặp lỗi từ công cụ snap "ERROR: G_realloc: không thể phân bổ 144720024 byte bộ nhớ tại snap.c: 186". Tôi đoán tôi sẽ phải chia nó thành nhiều phần nhỏ hơn. Mặc dù vậy cũng không sao, vì tôi đã chia nó thành 0,2 km2 để tăng tốc độ giao lộ / lập chỉ mục không gian (đây là trường "ID" trong dữ liệu mẫu).
Snorfalorpagus

7

Sử dụng lệnh GRASS GIS v.dissolve (trong plugin Sextante -> Lệnh GRASS -> Vector)

Nếu tôi nhanh chóng sao chép ví dụ của bạn: nhập mô tả hình ảnh ở đây

Kết quả với v.dissolve:

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

Giải trình

Vấn đề rất dễ hiểu. Một shapefile không có cấu trúc liên kết, nếu hai khu vực có chung đường viền chung thì đường viền sẽ được số hóa hai lần và cũng được lưu trữ trùng lặp.

Bạn thấy rõ điều này khi bạn cố gắng chỉnh sửa shapefile:

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

GRASS GIS (như ArcGIS) là một gis tô pô. Khi bạn nhập shapefile trong GRASS, lớp kết quả có cấu trúc liên kết: đường viền chung giữa hai khu vực tồn tại một lần và được chia sẻ.

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

Vì lý do này, khi bạn muốn hòa tan một shapefile ( hòa tan hai ranh giới ), bạn có thể gặp phải các vấn đề (trong QGIS, GvSIG, OpenJUMP hoặc ArcView 3.x cũ), xem ArcUserI: Hiểu về cấu trúc liên kết và Shapefiles .

Trong GRASS, v.dissolve được thiết kế để xóa tan ranh giới chung giữa các khu vực có cùng số danh mục


1
Tôi đoán rằng đây là một vấn đề về số và tôi tự hỏi nếu bản sao hình học khá tốt của OP, có bắt được các thuộc tính số tương tự không?
Châu

@Chau: v.dissolvecó tham số dung sai, giải quyết vấn đề của OP.
Jake

Chi tiết đó nên được đưa vào câu trả lời ở trên, cảm ơn vì đã làm rõ :)
Chau

Tôi đã thêm một liên kết đến dữ liệu gốc dưới dạng shapefile trong câu hỏi. Khi tôi sử dụng, v.dissolvenó dường như hoạt động, ngoại trừ việc nó "lấp đầy" hình vuông nhỏ ở giữa các tính năng. i.stack.imgur.com/AA59l.png
Snorfalorpagus

1
Tôi đề xuất một lời giải thích
gen
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.