# La línea de comandos

# Introducción

La línea de comandos de SEXTANTE permite a los usuarios más avanzados hacer un uso mas ágil del programa y automatizar tareas mediante la creación de sencillos scripts.

# La interfaz

Para empezar a utilizar la línea de comandos en SEXTANTE haz clic en el icono correspondiente y podrás ver lo siguiente:

La línea de comandos de SEXTANTE está basada en BeanShell. BeanShell es un interprete de código de Java en modo script que permite ejecutar dinámicamente la sintaxis estándar de Java y comandos comunes, como los de Perl y JavaScript.

Si se quiere profundizar y conocer BeanShell puedes visitar tu página web. En este capítulo sólo haremos mención a los elementos de BeanShell relacionados con los algoritmos de análisis geográfico de SEXTANTE.

SEXTANTE añade nuevos comandos que permiten ejecutar los algoritmos y obtener nueva información geográfica de los datos que se estén usando, entre otras cosas.

Los usuarios de Java pueden crear pequeños scripts y programas combinando los elementos de Java con los comandos de SEXTANTE. Sin embargo, quien no este familiarizado con Java puede usar la línea de comandos de SEXTANTE para ejecutar un proceso o un conjunto de ellos, simplemente llamando al correspondiente método del algoritmo.

En las próximas líneas se puede encontrar una descripción detallada de todos los comandos de SEXTANTE.

## Obtener información sobre los datos

Todos los algoritmos necesitan datos para ser ejecutados con éxito. Las capas geográficas y tablas son identificadas usando el nombre que tienen en la tabla de contenidos de la aplicación SIG que se este usando.

El comando `data()` escribe una lista de todos los objetos de datos disponibles que pueden ser usados, junto con el nombre particular de cada uno de ellos. Llamando a un dato se obtendrá algo como esto:

    RASTER LAYERS
    -----------------
    mdt25.asc

    VECTOR LAYERS
    -----------------
    Curvas de nivel

    TABLES
    -----------------

Hay que tener en cuenta que algunos SIG permiten tener varias capas de información (datos) con el mismo nombre. SEXTANTE cogerá el primero de esos nombres, por tanto seria conveniente renombrar los datos para cada uno de ellos si tuvieran el mismo nombre.

El comando `describe` (nombre del objeto) permite obtener información sobre un objeto o dato concreto. Para referirnos a ese objeto, usamos el nombre que tiene en la tabla de contenidos. A continuación se muestra una serie de ejemplos con este comando donde se obtiene información sobre una capa vectorial, una capa raster y una tabla.

    >describe points.shp
    Type: Vector layer - Point
    Number of entities: 300
    Table fields: | ID | X | Y | SAND | SILT | CLAY | SOILTYPE | EXTRAPOLAT |

    >describe dem25.asc
    Type: Raster layer
    X min: 262846.525725
    X max: 277871.525725
    Y min: 4454025.0
    Y max: 4464275.0
    Cellsize X: 25.0
    Cellsize Y: 0.0
    Rows: 410
    Cols: 601

    >describe spatialCorrelation.dbf
    Type: TableNumber of records: 156
    Table fields: | Distance | I_Moran | c_Geary | Semivariance |

# Obtener información sobre los algoritmos de análisis geográfico

Una vez descritos los datos vamos a ver a continuación los algoritmos que se pueden usar para extraer el máximo provecho posible para el análisis.

Cuando se ejecuta un algoritmo con el gestor de extensiones de SEXTANTE, se usa la ventana de parámetros con varios campos, cada uno de ellos corresponden a un sólo parámetro. En SEXTANTE cada algoritmo de análisis espacial es identificado por un comando. Cuando se usa la línea de comandos de SEXTANTE, se debe conocer que parámetros son necesarios, para pasar los valores correctos y usar el método que haga correr el algoritmo. SEXTANTE posee un método para describir en detalle un algoritmo. Pero antes necesitamos conocer el nombre del algoritmo, y para ello utilizamos el comando `algs()`. Se muestra a continuación una parte de los algoritmos de SEXTANTE.

    bsh % algs();
    acccost-------------------------------: Accumulated cost(isotropic)
    acccostanisotropic--------------------: Accumulated cost (anisotropic)
    acccostcombined-----------------------: Accumulated cost (combined)
    accflow-------------------------------: Flow accumulation
    acv-----------------------------------: Anisotropic coefficient of variation
    addeventtheme-------------------------: Points layer from table
    aggregate-----------------------------: Aggregate
    aggregationindex----------------------: Aggregation index
    ahp-----------------------------------: Analytical Hierarchy Process (AHP)
    aspect--------------------------------: Aspect
    buffer--------------------------------: Buffer

En la izquierda hay una lista con el nombre de cada algoritmo. Este nombre es el que se tiene que usar para hacer referencia en la línea de comandos. En la derecha se puede ver el nombre del algoritmo en el actual lenguaje, el cual es el mismo nombre que identifica el algoritmo en el Gestor de extensiones. Sin embargo, el nombre no es el mismo ya que depende del lenguaje actual en la aplicación SIG, y por lo tanto puede ser usado para llamar al algoritmo.

A continuación vamos a ver como obtener una lista de parámetros que un algoritmo necesita para que se ejecute con éxito. Para ver la descripción de los parámetros que requiere un algoritmo usa el comando `describealg(nombre_del_algoritmo)`. Recordar que se debe usar el nombre del algoritmo (lado izquierdo), no la descripción del algoritmo (lado derecho).

Por ejemplo, si queremos calcular la acumulación de flujo desde un MDE, necesitamos ejecutar el correspondiente modulo, el cual, de acuerdo a la lista de algoritmos `ags()`, es identifacado como `accflow`. Una descripción de las entradas y salidas de dicho algoritmo podemos ver a continuación:

    >describealg("accflow")
    Usage: accflow(DEM[Raster Layer]
                   WEIGHTS[Optional Raster Layer]
                   METHOD[Selection]
                   CONVERGENCE[Numerical Value]
                   FLOWACC [output raster layer])

# Ejecutando algoritmos

Para ejecutar los algoritmos utilizamos el comando `runalg`. La sintaxis es la siguiente:

    > runalg{name_of_the_algorithm, param1, param2, ..., paramN)

La lista de parámetros para añadir depende del algoritmo que quieras ejecutar. Para ver una lista de parámetro debemos utilizar el comando `describealg`.

Los valores se introducen de manera diferente, dependiendo del tipo de parámetro. Veamos los diferentes tipos de parámetros y cómo deben introducirse sus valores correspondientes para ejecutar con éxito el algoritmo.

Si se quiere utilizar un valor por defecto de un parámetro de entrada hay que escribir una almohadilla (#). En los parámetros opcionales, el uso del valor por defecto es equivalente a no utilizar entrada alguna.

- Raster Layer, Vector Layer o Table. Simplemente introduce el nombre que identifica el objeto a usar. Si la entrada es opcional y no se quiere añadir ningún objeto, escribir ``#''.
- Numerical value. Valor numérico.
- Selection. Escribe el número correspondiente a la opción deseada, como muestra el comando `options`.
- String. Cadena de texto.
- Boolean. Escribe cualquier de los dos valores true o false (incluidas comillas).
- Multiple selection - tipo_datos. Se necesita un grupo de objetos como parámetro para ejecutar el modulo, separados por comas y encerrados entre comillas.

  Por ejemplo, para el algoritmo `maxvaluegrid`:

      Usage: runalg("maxvaluegrid",
                         INPUT[Multiple Input - Raster Layer]
                         NODATA[Boolean],
                         RESULT[Output raster layer])

  La siguiente línea muestra un ejemplo de uso:

      > runalg("maxvaluegrid", "lyr1, lyr2, lyr3", "false", "#")

  Por supuesto, lyr1, lyr2, lyr3 deben ser una capas raster válidas ya cargadas. En el caso de [`Multiple Input - Band`] (múltiples bandas), cada parámetro es definido por un par de valores (capa, banda). Por ejemplo, para el algoritmo `cluster`.

      Usage: runalg( "cluster",
                     INPUT[Multiple Input - Band],
                     NUMCLASS[Numerical Value],
                     RESULTLAYER[output raster layer],
                     RESULTTABLE[output table],
                     );

  Un ejemplo válido es la siguiente línea:

      > runalg("cluster, "lyr1, 1, lyr1, 2, lyr2, 2", 5, "#", "#")

  El algoritmo usará 3 bandas, dos de ellas de lyr1 (bandas 1 y 2), y una de lyr2 (banda 2).

- Table Field from XXX . Escribe el nombre del campo de una capa vectorial o una tabla.
- Fixed Table Tabla fija. Simplemente introduce todos los valores de las celdas de la tabla, separados por comas y entre comillas. Primero los valores de la fila superior, de izquierda a derecha, luego los de la segunda, y así sucesivamente. La siguiente línea muestra un ejemplo de uso de tabla fija con la extensión Filtro 3 X 3 definido por el usuario:

      runalg("kernelfilter", mdt25.asc, "-1, -1, -1, -1, 9, -1, -1, -1, -1", "#")

- Point . Las dos coordenadas de un punto deben estar separadas por comas y encerradas entre comillas. Ejemplo: ``220345, 4453616''

Los parámetros de entrada como las cadenas de texto o los valores numéricos tiene valores por defecto. Para usar estos, escribir ``#'' en la entrada correspondiente en lugar del valor de expresión.

Los objetos de salida, como la ruta de salida, pueden ser salvadas a un fichero temporal usando el signo ``#''. Si lo que quieres es salvar la capa de salida a un fichero permanente, escribe el nombre del fichero de salida.

# Ajustar las características de la capa raster de salida

Si intentas ejecutar cualquier algoritmo que genere nuevas capas raster, las creará con un tamaño de celda y una extensión automática calculada a partir de la capa raster de entrada. Este funcionamiento puede ser modificado usando el comando `autoextent`.

    > autoextent("true"/"false)

Por defecto, tiene valor verdadero (`true`). Sin embargo, si quieres definir una extensión y tamaño de celda en particular para todas las capas raster de salida, debes usar el comando `extent`.

    Usage: extent(raster layer[string])
           extent(vector layer[string], cellsize[double])
           extent(x min[double], y min[double],
                  x max[double], y max[double],
                  cell size[double])
    Type "autoextent" to use automatic extent fitting when possible

Al establecer una extensión fija, automáticamente se desactiva el ajuste automático (es decir, como si ejecutaras un comando `autoextent false`).

# Ejecutando modelos

Para ejecutar un modelo desde la línea de comandos debe utilizarse el comando `model`, con una sintaxis similar al comando `runalg`. En este caso, en lugar del nombre del algoritmo como primer parámetro, debe introducirse el nombre del fichero donde está almacenado el modelo, que obligatoriamente debe encontrarse en la carpeta de modelos establecida en la configuración de SEXTANTE. Los restantes parámetros son los correspondientes en cada caso al propio modelo, del mismo modo que en el caso de ejecutar un algoritmo con el comando `runalg`;

# Manejo de capas desde la consola

Puedes realizar algunas operaciones de gestión de capas desde la interfaz en línea de comandos, como por ejemplo:

- Cerrar una capa. Utiliza el comando `close(nombre_capa)`
- Cambiar el valor de sin datos de una capa raster. Utiliza el comando `setnodata(nombre_capa, nuevo_valor)`
- Cambiar el nombre de una capa. Utiliza el comando `rename(nombre_capa,nuevo_nombre_capa)`