¿Llamando a módulos GRASS en pyQGIS?


9

Deseo utilizar un módulo Grass (v.to.db) en QGis, sin la caja de herramientas grass.

Intenté con la consola de Python, pero fue en vano:

  • Usando el complemento Sextante pero obviamente no conocía todos los módulos de hierba.

de sextante.core.Sextante import Sextante

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

-> Algoritmo no encontrado

  • Otra prueba:

grass.run_command ("v.to.db", mapa = 'bl @ PERMANENTE', capa = '2', opción = 'inicio', unidades = 'metros', columnas = 'X, Y, Z')

-> Traceback (última llamada más reciente):

Archivo "", línea 1, en el módulo

NameError: el nombre 'grass' no está definido

¿Sabes si hay otra forma de usar el módulo de césped? No quiero usarlo en la caja de herramientas de hierba porque puedo seleccionar solo una columna en el "campo de atributos", y me gustaría elegir varias columnas.


Respuestas:


3

Para usar las funciones grass desde un complemento o desde la consola, primero debe importar el módulo grass de esta manera:

import grass.script as grass

Olvidar la importación provocará el NameError para grass.

Siga las instrucciones detalladas sobre el uso del césped desde Python

Si está ejecutando en Windows y obtiene un error de Bad Handle cuando intenta importar grass, esto es el resultado de un error de Python no resuelto que ocurre en algunos sistemas de Windows. Para solucionar el problema, coloque el código que importa y llama grass en un script separado. Luego, ejecute este script como un proceso independiente desde su complemento.

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 

¡Buena suerte!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.