Chuyển đổi raster thành đa giác đường viền trơn tru trong QGIS


14

Tôi đã hạn chế thành công khi tạo các đa giác đường viền mịn từ các lớp raster.

Tôi đã tạo các đường đồng mức và đường bao biên giới và sau đó sử dụng Liên minh QGIS. Sau đó, tôi sử dụng QGIS Polygonize. Sau đó sử dụng số liệu thống kê khu vực cho raster ban đầu để lấy giá trị trên đa giác.

Phương pháp thứ 2 tôi đã thử là chuyển đổi raster thành đa giác. Sau đó tạo một cột thuộc tính mới được làm tròn theo đường viền mà tôi mong muốn. Sau đó, tôi hòa tan các dòng giữa cùng một giá trị. Sau đó sử dụng v.generalize. Phương pháp này nhanh hơn một chút, nhưng nó sẽ để lại một số đa giác lởm chởm / không phẳng.

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

Có một phương pháp dễ dàng hơn mà thực sự làm việc tất cả các thời gian. Có vẻ như nên có một lệnh đơn giản thực hiện toàn bộ quá trình.


2
Tại sao bạn sử dụng Polygonize? raster đầu vào của bạn có liên tục (như DEM dấu phẩy động) không? QGIS có một công cụ đường viền, là một lối tắt đến GDAL_Contour .. qgistutorials.com/en/docs/usiness_with_terrain.html Bạn đang cố gắng để có được các đường viền hoặc các khu vực đo độ cao?
Michael Promotionson

Tệp đầu vào là một tif và tệp đầu ra cần thiết là một tệp hình dạng chỉ có đa giác ở các mức tăng cụ thể. Tôi đã tìm thấy nhiều công cụ để tạo ra polylines, nhưng không phải là đa giác.
Rx_

Đủ công bằng, bạn đang cố gắng để có được các khu vực đo độ cao. Tôi sử dụng (hầu hết) Esri có một tùy chọn để đơn giản hóa các đa giác được tạo bởi raster thành đa giác nhưng điều đó sẽ không giúp ích ở đây. Nó sẽ trông như thế nào nếu bạn tạo các đường viền từ DEM, thêm một hộp giới hạn và sau đó đa giác hóa? Sau đó, bạn có thể tạo các điểm nhãn, giao nhau / lấy mẫu các giá trị và gắn nhãn đa giác với các thuộc tính ... có thể bạn có thể nhận được một vài đa giác giá trị tương tự có thể được giải quyết nhưng vấn đề lớn hơn là nhảy nhiều hơn một khoảng. Tôi có mã để thuộc tính hypso từ các đường viền nhưng nó hoạt động trên vùng phủ sóng ArcInfo
Michael Promotionson

Những gì bạn mô tả là những gì tôi nghĩ rằng tôi đang làm trong phương pháp đầu tiên của tôi. Nó cồng kềnh. Cần đảm bảo mỗi tệp có thuộc tính id và sau đó xóa đa giác không chứa diện tích trên 0 khi đa giác. Tôi đã không nhận được nhãn chính xác nhất quán của dòng để chuyển sang đa giác. Phương pháp thứ hai rất gần với những gì tôi muốn, nhưng v.generalize dường như không hoạt động 100% thời gian. Tôi muốn ESRI đơn giản hóa đa giác là một tùy chọn trong QGIS như bạn đã chỉ ra.
Rx_

Câu trả lời:


12

Tôi đã trải qua những vấn đề tương tự mà bạn gặp phải trong phương pháp thứ hai của mình. Tôi đã xuất Raster sang Vector và thử và sử dụng v.generalise và tôi nhận được hầu hết các đa giác trơn tru với ranh giới 'bước' thỉnh thoảng dường như không bị ảnh hưởng bởi thuật toán.

Tôi đã tìm thấy một quy trình hoạt động cho nhiệm vụ của mình, không chắc đó có phải là cách tốt nhất hay không nhưng tôi nghĩ tôi sẽ chia sẻ nó trong trường hợp nó giúp được bạn.

Những gì tôi bắt đầu là một lưới ascii từ BoM trông như thế này: nhập mô tả hình ảnh ở đây

Những gì tôi muốn một cái gì đó tương tự như những gì BoM sản xuất như thế này: nhập mô tả hình ảnh ở đây

Tôi đã có thể đi đến một kết quả (mà tôi hài lòng) bằng các bước sau.

  • Tải lưới (trong trường hợp của tôi là ASCII Grid từ BoM) vào QGIS.
  • Được mã hóa thành các lớp rời rạc. (Hộp công cụ xử lý> Cỏ> Raster> r.recode)
  • Chạy bộ lọc đa số để 'dọn sạch'. (Hộp công cụ xử lý> SAGA> Bộ lọc raster> Bộ lọc đa số)
  • Tạo các đường viền từ lưới được lọc trong các khoảng 1 và lưu trữ chúng trong một 'lớp' thuộc tính (vì các lớp của tôi là 1,2,3,4, v.v.). (Raster 'Menu'> Trích xuất> Đường viền)
  • Các đường viền đầu ra có phần khái quát, nhưng tôi đã sử dụng v.generalised với thuật toán 'rắn' để làm mịn chúng. (Hộp công cụ xử lý> Cỏ> Vector> v.generalize)
  • Sau đó, tôi đã chuyển đổi các dòng thành đa giác. (Hộp công cụ xử lý> Thuật toán địa lý QGIS> Công cụ hình học vectơ> Dòng thành Đa giác)
  • Cuối cùng tôi đã phải chuyển đổi các đa giác một phần thành nhiều phần, để tất cả các đa giác được vẽ độc đáo. (Hộp công cụ xử lý> Thuật toán địa lý của QGIS> Công cụ hình học vectơ> Singleparts to Mulitpart).

Sau khi tạo kiểu, đầu ra của tôi ở bên dưới: nhập mô tả hình ảnh ở đây

Tôi cũng sẽ thích nghe nếu ai đó biết một cách đơn giản hơn. Ban đầu tôi đã suy nghĩ tương tự như @Rx_ rằng tôi chỉ có thể chuyển đổi raster của mình thành vector sau đó khái quát hóa và tôi sẽ hoàn thành. Những gì tôi phải làm là lâu hơn nhiều.


3

Tôi thích câu trả lời ở đây nhưng tôi không thể tin rằng QGIS vẫn không có cách nhanh chóng và dễ dàng để làm điều này. MapInfo có thể tạo các đường viền dưới dạng đa giác hoặc đường với bất kỳ khoảng nào bạn có thể chỉ định.

Có vẻ như một nhiệm vụ cơ bản như vậy và cũng quan trọng để có được phạm vi. Nếu bất cứ ai có một cách cập nhật hoặc nhanh hơn để làm điều này xin vui lòng chia sẻ!


1

Một cách trực tiếp hơn là sử dụng gdal_countourtrực tiếp (như một chương trình dòng lệnh) trong "chế độ đa giác" (nghĩa là với -ptùy chọn).

Thí dụ:

gdal_contour -p -amin min_val -amax max_val -i 1 input_raster.tif output_shape.shp

Tài liệu: https://gdal.org/programs/gdal_contour.html

Tùy chọn này chỉ khả dụng trong phiên bản> = 2.4 (có thể được kiểm tra với gdalinfo --version). Nếu bạn đang sử dụng Ubuntu 18.4, bạn có thể phải cài đặt nó từ UbuntuGIS


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.