Sử dụng Plugin QGIS Zonal Stats từ Python Console?


9

Tôi đang sử dụng plugin Zonal Stats trong QGIS để trích xuất số liệu thống kê raster từ các đa giác chồng chéo (Tôi có hình dạng phân bố loài và tôi muốn trích xuất dữ liệu môi trường từ trong phạm vi của từng loài). Tôi có 300 tệp hoặc hơn tôi cần để lấy dữ liệu và vì vậy tôi muốn viết một tập lệnh để chạy trong bảng điều khiển python, tuy nhiên tôi là người mới hoàn toàn với python và không biết làm thế nào để làm điều này.



Chad - vâng, đó là một câu hỏi tương tự nhưng cụ thể hơn. Không ai trả lời được câu hỏi khác, thay vào đó họ đề xuất những cách khác để giải quyết vấn đề. Tôi không biết cách xóa bài đăng khác
Thomas

Trong câu hỏi khác, tôi đã chỉ cho bạn một tập lệnh r có khả năng những gì bạn muốn và Sylvester Sneekly đặt tên cho bạn phương pháp chính xác trong python. Nếu bạn không sử dụng mã trong python hoặc r hơn tất cả các gợi ý khác sẽ không giúp bạn. Bạn cần một kịch bản tự mã hóa hoặc rất nhiều mouseclicks. Tìm hiểu một số mã hóa, thử các ví dụ và báo cáo lại, nếu một cái gì đó không hoạt động.
Curlew

@Curlew - Phương pháp của Sylvester, mặc dù nghe có vẻ rất hay, sẽ đại diện cho một đường cong học tập lớn đối với tôi và tôi không có thời gian để làm điều này vào lúc này. Tôi đánh giá cao sự giúp đỡ của Sylvester nhưng đó không phải là câu trả lời thẳng thắn mà tôi có sau đó. Tôi mặc dù tôi đã có hầu hết các mã mà tôi đã có sau bài đăng mà tôi đã đề cập trong câu hỏi khác của tôi ( gis.stackexchange.com/questions/23203/ Lỗi ). Nếu phương pháp của Sylvester là cách duy nhất để làm điều này ở trăn thì có lẽ tôi đã đánh giá thấp mức độ khó của nó.
Thomas

@Curlew - Kịch bản R của bạn thực sự hoạt động, cảm ơn bạn. Điều duy nhất tôi chưa làm được là làm thế nào để nối các kết quả được trả lại trong R vào tệp .dbf cho các shapefiles của tôi (bất kỳ trợ giúp nào về điều này sẽ được đánh giá cao).
Thomas

Câu trả lời:


13

Các mã dưới đây làm việc cho tôi QGis 1.8.0

Bạn có thể sửa đổi điều này để chứa nhiều tệp với một số vòng lặp ..

from qgis.analysis import QgsZonalStatistics

#specify polygon shapefile vector
polygonLayer = QgsVectorLayer('F:/temp/zonalstat/zonePoly.shp', 'zonepolygons', "ogr") 

# specify raster filename
rasterFilePath = 'F:/temp/zonalstat/raster1.tif'

# usage - QgsZonalStatistics (QgsVectorLayer *polygonLayer, const QString &rasterFile, const QString &attributePrefix="", int rasterBand=1)
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

Tuyệt quá. Cảm ơn bạn rất nhiều vinayan, đó chính xác là những gì tôi đã sau.
Thomas

Cũng xem tại đây để biết giải pháp thay thế bằng R
Thomas

rất vui vì nó đã giúp bạn
vinaya

@vinayan QProTHERDialog rất hữu ích cho các môi trường trực quan nơi bạn muốn xem các tính toán đã tiến triển đến đâu. Nó không có sử dụng từ dòng lệnh. Bạn có thể sử dụng Nonenhư tham số và nó hoạt động tốt. Sau đó, bạn không cần từ PyQt4..dòng hoặc progressDialog = dòng. Xem bài tương tự tại gis.stackexchange.com/questions/23203/ từ
rudivonstaden

@rudivonstaden - điều đó có ý nghĩa ngay
bây giờ..tôi đã

2

Đây là cách để có được những gì bạn muốn trong SAGA GIS. Đây có thể không phải là giải pháp bạn muốn, nhưng nó hoạt động. Tôi sẽ xem xét lý do tại sao các plugin của tôi không thành công và cập nhật nó càng sớm càng tốt.

Cài đặt SAGA GIS (cũng nên có sẵn thông qua apt-get hoặc aptitudbe trong bản phân phối linux của bạn).

  • Bắt đầu SAGA, tải hình dạng Raster và vector của bạn (Mô-đun Menu -> Tệp -> nhập GDAL / OGR). Bạn có thể xem quá trình dưới đây.
  • Thực thi Mô-đun "Thống kê lưới cho đa giác" (Mô-đun Menu -> Hình dạng -> Lưới -> Giá trị lưới). Các giá trị được thêm trực tiếp vào bảng. Hộp thoại sẽ trông như thế nàynhập mô tả hình ảnh ở đây
  • Chuyển đến tab "Dữ liệu" trong không gian làm việc, nhấp chuột phải vào lớp vectơ của bạn và chọn " lưu dưới dạng " để xuất hình dạng với các thuộc tính được thêm vào. Bạn cũng có thể hiển thị bảng thuộc tính thông qua rightclick và sau đó nhấp vào bảng hiển thị

Điều này làm việc cho các tập dữ liệu bạn gửi cho tôi. Cũng có thể gọi các mô-đun SAGA trong QGIS thông qua SEXTANTE là một quy trình BATCH. Để làm điều này, chỉ cần kích hoạt các mô-đun SAGA trong các tùy chọn SEXTANTE.


cảm ơn vì lời đề nghị nhưng tôi đã thử dùng saga - kết quả mà nó tạo ra không nhất quán tức là làm cùng một việc hai lần cho kết quả khác nhau. Tôi biết plugin ZonalStats trong QGIS hoạt động, do đó tôi sau một cách để tự động hóa ZonalStats.
Thomas

@vinayan tôi có mã mà bạn đã đưa ra cho thống kê khu vực nhưng nó đang tạo các cột trong lớp vectơ đa giác nhưng không cập nhật các giá trị được tính toán. Tại sao nó như vậy?
dùng99

2
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

tính toán theo mặc định chỉ là Đếm, Tổng và Trung bình (như bạn có thể biết Raster -> Zonal Statisticstrong Bàn làm việc của QGIS, nó có thể làm được nhiều hơn thế).

Ví dụ: nếu bạn muốn tính toán Chỉ số trung bình bạn phải sử dụng:

zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean)
zoneStat.calculateStatistics(None)

xem API cho tất cả các tùy chọn.


Bất cứ ai cũng có thể giúp với cú pháp để có được hai thống kê lựa chọn, nói Min & Max, cùng một lúc? Tôi đã thử nhiều cách khác nhau nhưng không thành công
dorakiara

Trong Qgis 3, bạn cần thay thế đường dẫn tệp raster bằng chính tệp raster! Do đó, rasterFilePath = 'F: /temp/zonalstat/raster1.tif' trở thành: rasterFile = QgsRasterLayer ('F: /temp/zonalstat/raster1.tif', 'raster') Sau đó, bạn thay đổi rasterFile lệnh areaStat = QssZonalStatistic (polygonLayer, rasterFile, 'pre-', 1) zoneStat.calculateStatistic (Không có)
philsch
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.