Chamando módulos GRASS em pyQGIS?


9

Desejo usar um módulo Grass (v.to.db) no QGis, sem a caixa de ferramentas grama.

Eu tentei com o console Python, mas sem sucesso:

  • Usando o plugin Sextante, mas obviamente ele não conhecia todos os módulos de grama.

de sextante.core.Sextante import Sextante

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

-> Algoritmo não encontrado

  • Outro teste:

grass.run_command ("v.to.db", map = 'bl @ PERMANENT', layer = '2', opção = 'start', units = 'meters', colunas = 'X, Y, Z')

-> Traceback (última chamada mais recente):

Arquivo "", linha 1, no módulo

NameError: o nome 'grass' não está definido

Você sabe se existe outra maneira de usar o módulo de grama? Não quero usá-lo na caixa de ferramentas grama porque posso selecionar apenas uma coluna no "campo de atributo" e gostaria de escolher várias colunas.


Respostas:


3

Para usar as funções grass de um plug-in ou do console, você deve primeiro importar o módulo grass assim:

import grass.script as grass

Esquecer a importação causará o NameError grass.

Siga instruções detalhadas sobre o uso de grama no python

Se você estiver executando no Windows e receber um erro de Maçaneta ao tentar importar grama, isso é resultado de um bug python não resolvido que ocorre em alguns sistemas de janelas. Para contornar o problema, coloque o código que importa e chama grama em um script separado. Em seguida, execute esse script como um processo independente de dentro do seu plugin.

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 

Boa sorte!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.