Memanggil modul GRASS di pyQGIS?

9

Saya ingin menggunakan modul Grass (v.to.db) di QGis, tanpa toolbox rumput.

Saya mencoba dengan konsol Python, tetapi tidak berhasil:

  • Menggunakan plugin Sextante tetapi jelas tidak tahu semua modul rumput.

dari sextante.core.Sextante mengimpor Sextante

Sextante.alghelp ("rumput: v.to.db")

-> Algoritma tidak ditemukan

  • Tes lain:

grass.run_command ("v.to.db", map = 'bl @ PERMANENT', layer = '2', option = 'start', units = 'meter', kolom = 'X, Y, Z')

-> Traceback (panggilan terakhir terakhir):

File "", baris 1, dalam modul

NameError: nama 'rumput' tidak didefinisikan

Apakah Anda tahu jika ada cara lain untuk menggunakan modul rumput? Saya tidak ingin menggunakannya di kotak alat rumput karena saya hanya dapat memilih satu kolom di "bidang atribut", dan saya ingin memilih beberapa kolom.

MarieA
sumber
gis.stackexchange.com/questions/21867/… menunjukkan cara mengimpor rumput
underdark

Jawaban:

3

Untuk menggunakan fungsi rumput dari plugin atau dari konsol, Anda harus terlebih dahulu mengimpor modul rumput seperti ini:

import grass.script as grass

Lupa impor akan menyebabkan NameError untuk grass.

Ikuti instruksi terperinci tentang penggunaan rumput dari dalam python

Jika Anda menjalankan pada windows dan Anda mendapatkan kesalahan Bad Handle ketika Anda mencoba mengimpor rumput, ini adalah hasil dari bug python yang tidak terselesaikan yang terjadi pada beberapa sistem windows. Untuk mengatasi masalah, masukkan kode yang mengimpor dan memanggil rumput dalam skrip terpisah. Kemudian, jalankan skrip ini sebagai proses independen dari dalam plugin Anda.

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 

Semoga berhasil!

MonsterMushroom
sumber