9 votos

Cómo llamar a HIERBA módulos en pyQGIS?

Si desea utilizar una Hierba módulo (v. a.db) en QGis, sin la caja de herramientas de grass.

He probado con la consola de Python, pero fue en vano :

  • El uso de Sextante plugin, pero obviamente no saben toda la hierba de los módulos.

de sextante.núcleo.Sextante de importación Sextante

Sextante.alghelp("hierba": v. a.db")

--> El algoritmo no encuentra

  • Otra prueba :

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

-->Traceback (la mayoría de llamada reciente pasado):

File "", line 1, en el módulo

NameError: name 'hierba' no está definido

¿Sabes si hay otra manera de utilizar la hierba módulo ? No quiero usar en la caja de herramientas de grass porque me puede seleccionar sólo uno columnas en el atributo "campo", y me gustaría elegir varias columnas.

Gracias por su ayuda

Marie

3voto

Gant Puntos 9920

El uso de la hierba de las funciones de un plugin o desde la consola, primero debe importar la hierba módulo como este:

import grass.script as grass

Olvidar la importación hará que el NameError para grass.

Siga las instrucciones detalladas sobre el uso de la hierba de dentro de python

Si se ejecuta en windows y recibe una Mala Identificador de error cuando intenta importar la hierba, este es un resultado de un no resuelto en python error que se produce en algunos de los sistemas de ventanas. Para evitar el problema, poner el código que las importaciones y las llamadas de la hierba en una secuencia de comandos independiente. A continuación, ejecute esta secuencia de comandos como un proceso independiente desde dentro de tu 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 

Buena Suerte!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X