Gọi mô-đun GRASS trong pyQGIS?


9

Tôi muốn sử dụng mô-đun Grass (v.to.db) trong QGis, không có hộp công cụ cỏ.

Tôi đã thử với bảng điều khiển Python, nhưng không có kết quả:

  • Sử dụng plugin Sextante nhưng rõ ràng là nó không biết tất cả các mô-đun cỏ.

từ sextante.core.Sextante nhập Sextante

Sextante.alghelp ("cỏ: v.to.db")

-> Không tìm thấy thuật toán

  • Một thử nghiệm khác:

grass.run_command ("v.to.db", map = 'bl @ PERMANENT', layer = '2', tùy chọn = 'start', units = 'mét', Cột = 'X, Y, Z')

-> TracBack (cuộc gọi gần đây nhất vừa qua):

Tệp "", dòng 1, trong mô-đun

TênError: tên 'cỏ' không được xác định

Bạn có biết nếu có một cách khác để sử dụng mô-đun cỏ? Tôi không muốn sử dụng nó trong hộp công cụ cỏ vì tôi chỉ có thể chọn một colums trong "trường thuộc tính" và tôi muốn chọn một số cột.


Câu trả lời:


3

Để sử dụng các chức năng của cỏ từ một plugin hoặc từ bảng điều khiển, trước tiên bạn phải nhập mô-đun cỏ như thế này:

import grass.script as grass

Việc quên nhập sẽ gây ra NameError cho grass.

Thực hiện theo các hướng dẫn chi tiết về cách sử dụng cỏ từ bên trong trăn

Nếu bạn đang chạy trên windows và gặp lỗi Bad Xử lý khi bạn cố gắng nhập cỏ, đây là kết quả của một lỗi python chưa được giải quyết xảy ra trên một số hệ thống cửa sổ. Để khắc phục sự cố, đặt mã nhập và gọi cỏ vào một tập lệnh riêng. Sau đó, chạy tập lệnh này như một quy trình độc lập từ bên trong plugin của bạn.

callgrass.py:

if __name__ == '__main__':

import grass.script as grass
grass.run_command("v.to.db", map='bl@PERMANENT', layer='2', option='start', units='meters', columns='X,Y,Z')

print "Grass OUtput"

From Console/Plugin:

import subprocess

p1=subprocess.Popen(['callgrass.py', 'arg1', ...], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p1.stdin.close()
ret= p1.communicate()[1] # grab grass output  
print ret 

Chúc may mắn!

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.