4 votos

GRASS 6.5 o 7.0 - ¿Necesita ayuda con el script de bucle

Soy nuevo en Python y de secuencias de comandos en general. Esta es también la primera vez que una publicación de que se trate.

Mi objetivo general es crear un script que me puede pasar a través de todos los mapas raster en un conjunto de mapas y, a continuación, guarde el univariado de las estadísticas .archivo csv para cada mapa raster. Estoy trabajando en la primera parte: el ciclismo a través de todos los mapas y la impresión de las estadísticas en la ventana de terminal. Más tarde, voy a probar y guardar los datos .archivo csv. Tengo siete mapas en mi práctica de conjunto de mapas y tengo siete errores, pero mi problema es que no sé qué variable a asignar al parámetro MAPA (con suerte, me dijo que correctamente).

Aquí es lo que tengo hasta ahora:

import sys
import os
import grass.script as grass
import grass.script.setup as gsetup
gisbase = os.environ['GISBASE']
gisdb="/Users/kc/GrassData"
location="Data_2013"
mapset="methods_check"
gsetup.init(gisbase, gisdb, location, mapset)
grass.run_command("g.list", _type="rast") 
mymaps = grass.parse_command("g.list", _type="rast") 
print len(mymaps) 
for items in mymaps:
    grass.run_command('r.univar', map='items', separator=",")

¿Qué debo poner para el mapa = 'elementos' para que circula a través de todos los mapas raster de un conjunto de mapas?

Estoy usando la HIERBA 7.0, pero lo mismo sucede en el CÉSPED 6.5. En la Hierba 6.5, el parámetro separador debe ser cambiado a fs. Ambas versiones de la etiqueta del archivo de entrada "mapa".

Cualquier ayuda sería muy apreciada. Gracias.

7voto

GreyCat Puntos 146

Usted necesita entender la diferencia entre:

  • la hierba.run_command que realiza una HIERBA comando
grass.run_command('g.remove', raster="raster1")
  • la hierba.read_command que se utiliza para recibir un resultado (generalmente una cadena, mismo resultado que el comando en GRASS GIS, de poco interés para Python, usted necesita usar el re (Expresión Regular) módulo para procesar el resultado)
grass.read_command("g.region",flags="p")  
'projection: 99 (Lambert Conformal Conic)\nzone:       0\ndatum:      bel72\nellipsoid:  international\nnorth:      112990.07863053\nsouth:      108258.30027318\nwest:       227552.40388837\neast:       235027.97855494\nnsres:      6.35138035\newres:      6.35138035\nrows:       745\ncols:       1177\ncells:      876865\n'
  • la hierba.parse_command que analizar el resultado de Python (en general, un diccionario)
grass.parse_command("g.region",flags="p")  
{'ellipsoid:  international': None, 'zone:       0': None, 'nsres:      6.35138035': None, 'south:      108258.30027318': None, 'ewres:      6.35138035': None, 'west:       227552.40388837': None, 'rows:       745': None, 'east:       235027.97855494': None, 'projection: 99 (Lambert Conformal Conic)': None, 'cells:      876865': None, 'north:      112990.07863053': None, 'cols:       1177': None, 'datum:      bel72': None}

Así que, en su caso, no lo es:

grass.run_command("g.list", _type="rast")

cuyo resultado es 0

pero:

rasters = grass.read_command("g.list",_type="rast")

cuyo resultado es una cadena con todas las capas en la variable rásteres

type(raster)
<type 'str'>

Pero no es interesante en absoluto aquí, ya que sólo necesita los nombres de las capas:

rasters = grass.parse_command("g.list", _type="rast")

cuyo resultado es un diccionario de Python y para más, ver secuencias de comandos de Python Para GRASS GIS: el Uso de "parse_command()"

El resultado es una lista con los nombres de capa:

['raster1', 'raster2', 'raster3']

por lo que el procesamiento es:

for items in mymaps:
     grass.parse_command('r.univar', map=items) 

.

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