<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E2%9A%A0%EF%B8%8FDat</id>
	<title>GRASS-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E2%9A%A0%EF%B8%8FDat"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/wiki/Special:Contributions/%E2%9A%A0%EF%B8%8FDat"/>
	<updated>2026-05-25T01:05:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Analytical_data_visualizations_at_ICC_2017/es&amp;diff=24737</id>
		<title>Analytical data visualizations at ICC 2017/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Analytical_data_visualizations_at_ICC_2017/es&amp;diff=24737"/>
		<updated>2017-08-27T03:28:24Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Spanish translation of &amp;quot;Analytical data visualizations at ICC 2017&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:icc2017 logo.png|300px|right|none]]&lt;br /&gt;
[[File:Grassgis logo colorlogo text whitebg.png|250px|right|none]]&lt;br /&gt;
[[File:Blender-plain.png|300px|right|none]]&lt;br /&gt;
&lt;br /&gt;
Este es un material para dos sesiones en del taller [[GRASS GIS at ICC 2017|ICC 2017]] SDI-Open (Spatial data infrastructures, standards, open source and open data for geospatial) llamado ''Analytical data visualizations with GRASS GIS and Blender'' y ''Mapping open data with open source geospatial tools'' que se dio en Washington, DC el 1-2 de Julio, 2017. Estas dos sesiones dan una introducción a GRASS GIS y Blender, ejemplos de sus capacidades de procesamiento y técnicas de visualización. Los participantes visualizan datos abiertos y diseñan mapas con diferentes herramientas geoespaciales, incluyendo el sistema de Tangible Landscape.&lt;br /&gt;
&lt;br /&gt;
Autores: [[User:Wenzeslaus|Vaclav Petras]], [[User:Annakrat|Anna Petrasova]], Payam Tabrizian, Brendan Harmon, y Helena Mitasova&lt;br /&gt;
&lt;br /&gt;
Pruebas y revisión: Garrett Millar&lt;br /&gt;
&lt;br /&gt;
Empezamos el taller con una [https://ncsu-geoforall-lab.github.io/ICC-workshop-presentation/index.html#/ presentación] sobre las herramientas geoespaciales que se usan en este taller.&lt;br /&gt;
&lt;br /&gt;
== Datos ==&lt;br /&gt;
&lt;br /&gt;
=== Datos preparados ===&lt;br /&gt;
[http://fatra.cnr.ncsu.edu/icc2017/ICC_workshop_data.zip Datos para el taller], contiene:&lt;br /&gt;
* modelo digital de superficie (1m de resolución) realizado a partir del lidar publicamente accesible de North Carolina Flood Plain Mapping&lt;br /&gt;
* ortofoto (0.5 m de resolución) de la USGS&lt;br /&gt;
&lt;br /&gt;
=== Descargar datos de OpenStreetMap ===&lt;br /&gt;
Vamos a usar [http://overpass-turbo.eu/ overpass turbo] (una herramienta de filtrado basada en la web (web-based)) para crear y correr una consulta en la [http://wiki.openstreetmap.org/wiki/Overpass_API Overpass API] para obtener los datos de [https://en.wikipedia.org/wiki/OpenStreetMap OpenStreetMap].&lt;br /&gt;
&lt;br /&gt;
Puede usar el Asistente para crear consultas simples en la extensión que está visualizando. Por ejemplo, haga zoom a un área pequeña y pegue esto en el Asistente y corra la consulta:&lt;br /&gt;
 highway=* and type:way&lt;br /&gt;
&lt;br /&gt;
La consulta fue construida en el editor y corrida de tal manera que ahora puede ver los resultados en el mapa.&lt;br /&gt;
&lt;br /&gt;
Ahora pegue esta consulta en la ventana editor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[out:json][timeout:25];&lt;br /&gt;
// gather results&lt;br /&gt;
(&lt;br /&gt;
  // query part for: “highway=*”&lt;br /&gt;
  way[&amp;quot;highway&amp;quot;](35.76599,-78.66249,35.77230,-78.65261);&lt;br /&gt;
);&lt;br /&gt;
// print results&lt;br /&gt;
out body;&lt;br /&gt;
&amp;gt;;&lt;br /&gt;
out skel qt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Encuentra los caminos en su área de estudio. Cuando corre una consulta, los caminos aparecen en el mapa y podemos exportarlos como GeoJSON (Exportar - Datos - como GeoJSON). Nombre el archivo vectorial &amp;lt;tt&amp;gt;roads.geojson&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a descargar todos los edificios y exportarlos como GeoJSON. Nombre el archivo vectorial &amp;lt;tt&amp;gt;buildings.geojson&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[out:json][timeout:25];&lt;br /&gt;
// gather results&lt;br /&gt;
(&lt;br /&gt;
  // query part for: “building=*”&lt;br /&gt;
  way[&amp;quot;building&amp;quot;](35.76599,-78.66249,35.77260,-78.65261);&lt;br /&gt;
  relation[&amp;quot;building&amp;quot;](35.76599,-78.66249,35.77260,-78.65261);&lt;br /&gt;
);&lt;br /&gt;
// print results&lt;br /&gt;
out body;&lt;br /&gt;
&amp;gt;;&lt;br /&gt;
out skel qt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos vamos a importar los datos a GRASS GIS.&lt;br /&gt;
&lt;br /&gt;
== Sesión 1: Introducción a GRASS GIS ==&lt;br /&gt;
Aquí brindamos una introducción a [https://grass.osgeo.org GRASS GIS]. Para este ejercicio no es necesario tener un entendimiento entero de cómo usar GRASS GIS. Sin embargo, va a necesitar saber cómo colocar sus datos en un directorio de bases de datos GRASS GIS correcto, así como algunas funcionalidades básicas de GRASS GIS.&lt;br /&gt;
&lt;br /&gt;
==== Estructura de la base de datos espacial de GRASS GIS ====&lt;br /&gt;
GRASS usa una terminología y estructura de la base de datos única ([https://grass.osgeo.org/grass71/manuals/grass_database.html base de datos GRASS]) que es importante entender para correr este tutorial, ya que es posible que necesite colocar los datos (ej. Localización en una base de datos específica de GRASS. En lo que sigue revisaremos la terminología y se dan las direcciones paso a paso de cómo descargar y colocar sus datos en el lugar correcto.&lt;br /&gt;
&lt;br /&gt;
* Una '''Base de datos espacial de GRASS GIS''' (''GRASS database'') consiste de un directorio con  Localizaciones (proyectos) específicos donde los datos (datos capas/mapas) se guardan.&lt;br /&gt;
* '''Localización''' es un directorio con datos relacionados a una localidad geográfica o a un proyecto. Todos los datos dentro de una Localización tienen el mismos sistema de coordenadas de referencia.&lt;br /&gt;
* '''Directorio de mapas''' es una colección de mapas dentro de una Localización, contiene los datos relacionados a una tarea específica, usuario o subproyecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=1 widths=500 heights=250&amp;gt;Image:Grass database.png|GRASS GIS Spatial Database structure&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Creando una base de datos de GRASS para este tutorial ====&lt;br /&gt;
Inicie GRASS GIS, debe aparecer una pantalla de inicio.&lt;br /&gt;
A menos que tenga un directorio llamado &amp;lt;tt&amp;gt;grassdata&amp;lt;/tt&amp;gt; en su carpeta de &amp;lt;tt&amp;gt;Documentos&amp;lt;/tt&amp;gt; (en MS Windows), o en su carpeta home (en Linux), cree una. Puede usar el botón Explorar del cuadro de diálogo de la pantalla de inicio de GRASS GIS para realizar esto.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear una nueva ''Localización'' para nuestro proyecto con un SCR (sistema de coordenadas de referencia) de NC State Plane Meters cuyo código EPSG es 3358.&lt;br /&gt;
&lt;br /&gt;
Abra el Asistente de Localizaciones con el botón ''Nueva'' en la parte izquierda de la pantalla de bienvenida. Seleccione el nombre de la nueva Localización, seleccione el método EPSG y el código 3358.&lt;br /&gt;
Cuando el Asistente haya terminado, la nueva Localización estará enlistada en la pantalla de bienvenida. Seleccione la nueva Localización y el Directorio de mapas PERMANENT y presione ''Iniciar sesión de GRASS''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
Image:GRASS_startup_ncspm.png|Cuadro de diálogo de GRASS GIS 7.2&lt;br /&gt;
Image:ICC_workshop_location_wizard_define_7.2.png| Iniciar Asistente de Localización e ingrese el nombre de la nueva Localización&lt;br /&gt;
Image:Location_wizard_method_7.2.png| Seleccione el método para describir el SCR&lt;br /&gt;
Image:Location_wizard_EPSG3358_7.2.png| Encontrar y seleccionar el EPSG 3358&lt;br /&gt;
Image:ICC_workshop_location_wizard_summary_7.2.png| Revisar la paǵina de resumen y confirmar&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Directorio (entorno) de trabajo actual ====&lt;br /&gt;
&lt;br /&gt;
El directorio (entorno) de trabajo actual es un concepto separado de la base de datos GRASS, la Localización y el Directorio de mapas discutidos más arriba. El directorio (entorno) de trabajo actual el directorio (o carpeta) donde cualquier programa (no solo GRASS GIS) escribe y lee archivos a menos se le de una ruta para el archivo. Cuando se use GRASS GIS GUI, el directorio de trabajo actual normalmente no se usa. Sin embargo, cuando se usa la línea de comando o se hace un script, el directorio de trabajo es importante.&lt;br /&gt;
&lt;br /&gt;
Cambie su directorio (entorno) de trabajo actual a algún lugar en donde tenga permisos de lectura y escritura. Por ejemplo, puede crear un directorio &amp;lt;tt&amp;gt;ICC&amp;lt;/tt&amp;gt; en &amp;lt;tt&amp;gt;Documentos&amp;lt;/tt&amp;gt;. El directorio de trabajo actual puede ser cambiado desde la GUI usando ''Configuraciones → Entorno de trabajo de GRASS → Cambiar entorno de trabajo'' o desde la consola usando el comando &amp;lt;tt&amp;gt;cd&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Importando los datos ====&lt;br /&gt;
[[File:Import_raster_7.2.1.png|400px|thumb|right|Importado datos ráster]]&lt;br /&gt;
En este paso vamos a importar los datos a GRASS GIS. En el menú ''Archivo - Importar datos ráster'' seleccione ''Formatos comunes de importación'' y en el diálogo explore a encontrar &amp;lt;tt&amp;gt;dsm.tif&amp;lt;/tt&amp;gt; y de click en el botón ''Importar''. Repita esto para el archivo ráster  &amp;lt;tt&amp;gt;ortho.tif&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De manera similar, vaya a ''Archivo - Importar datos vectoriales - Formatos comunes de importación'' e importe los archivos &amp;lt;tt&amp;gt;roads.geojson&amp;lt;/tt&amp;gt; y &amp;lt;tt&amp;gt;buildings.geojson&amp;lt;/tt&amp;gt;. '''Note que en este caso necesitamos cambiar el nombre de la salida desde el predeterminado &amp;lt;tt&amp;gt;OGRGeoJSON&amp;lt;/tt&amp;gt; a &amp;lt;tt&amp;gt;roads&amp;lt;/tt&amp;gt; y &amp;lt;tt&amp;gt;buildings&amp;lt;/tt&amp;gt;, respectivamente. '''Estos datos vectoriales tienen un SCR diferente, así que aparecerá un cuadro de diálogo informando que necesita reproyectar los datos y le damos confirmar.&lt;br /&gt;
&lt;br /&gt;
Todas las capas importadas deberán aparecer en la GUI, si no es así, añádalas manualmente (ver abajo).&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mostrar y explorar los datos ====&lt;br /&gt;
&lt;br /&gt;
La interfaz GUI le permite mostrar datos vectoriales y ráster, así como navegar acercandose o alejándose (zoom). Es posible tener explpraciones y visualización más avanzada, usando por ejemplo, consultas o añadiendo leyendas. Las capturas de pantalla de más abajo muestran cómo añadir diferentes capas de mapas (izquierda) y mostrar los metadatos de las capas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=2  widths=500 heights=250&amp;gt;&lt;br /&gt;
Image:Wxgui_add_elev_lid.png|Añadir capa de mapa ráster &lt;br /&gt;
Image:Wxgui_add_legend_elev_lid.png|Añadir leyenda ráster&lt;br /&gt;
Image:GRASS FUTURES wxGUI display.png|Administrador de capas y Visualizador de mapas. Las anotaciones muestran cómo añadir capas ráster, hacer consultas y añadir leyendas.&lt;br /&gt;
Image:wxGUI_metadata_rinfo.png|Mostrar metadatos de mapa ráster haciendo click derecho en la capa&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resumen de los módulos GRASS GIS ===&lt;br /&gt;
Una de las ventajas d eGRASS es la diversidad y cantidad de módulos que le permiten analizar los diferentes aspectos espaciales y temporales. GRASS GIS tiene más de  [https://grass.osgeo.org/grass70/manuals/full_index.html 500 módulos distintos] en la distribución núcleo y más de  [https://grass.osgeo.org/grass70/manuals/addons/ 230 módulos de extensión addon] que pueden ser usados para preparar y analizar capas de datos.&lt;br /&gt;
&lt;br /&gt;
La funcionalidad de GRASS está disponible a través de ''módulos'' (herramientas, funciones). Existe en GRASS una convención de nombrar a los módulos de acuerdo a su función, de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Prefijo !! Función !! Ejemplo&lt;br /&gt;
|-&lt;br /&gt;
| r.* || procesamiento ráster || ''{{cmd|r.mapcalc}}'': álgebra de mapas&lt;br /&gt;
|-&lt;br /&gt;
| v.* || procesamiento vectorial  || ''{{cmd|v.clean}}'': limpieza topológica&lt;br /&gt;
|-&lt;br /&gt;
| i.* || procesamiento de imágenes  || ''{{cmd|i.segment}}'': reconocimiento de objetos&lt;br /&gt;
|-&lt;br /&gt;
| db.* || administración de bases de datos || ''{{cmd|db.select}}'': seleccionar valores de una tabla&lt;br /&gt;
|-&lt;br /&gt;
| r3.* || procesamiento ráster 3D   || ''{{cmd|r3.stats}}'': estadísticas de ráster 3D&lt;br /&gt;
|-&lt;br /&gt;
| t.* || procesamiento de datos temporales  || ''{{cmd|t.rast.aggregate}}'': agregación temporal&lt;br /&gt;
|-&lt;br /&gt;
| g.* || administración general de datos || ''{{cmd|g.rename}}'': renombrar mapa&lt;br /&gt;
|-&lt;br /&gt;
| d.* || pantalla ||''{{cmd|d.rast}}'': mostrar mapa ráster&lt;br /&gt;
|}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos son los grupos de módulos principales. Hay algunos otros que son específicos. Note también que algunos módulos tienen varios puntos dentro del nombre. Esto sugiere otro agrupamiento. Por ejemplo, los módulos que inician con ''v.net.'' tienen que ver con análisis de redes vectoriales.&lt;br /&gt;
&lt;br /&gt;
El nombre del módulo ayuda a entender su función, por ejemplo ''v.in.lidar'' inicia con ''v'' así que tiene que ver con mapas vectoriales, el nombre continúa con ''in'' lo que indica que el módulo es para importar datos a la Base de datos espacial de GRASS GIS y finalmente ''lidar'' indica que tiene que ver con nubes de puntos lidar.&lt;br /&gt;
&lt;br /&gt;
=== Finding and running a module ===&lt;br /&gt;
&lt;br /&gt;
Para encontrar un módulo para su análisis, escriba el término en la caja de búsqueda en la pestaña ''Módulos'' (''Modules'') en el ''Administrador de capas'' (''Layer manager''), luego presione Enter hasta que encuentre el módulo.&lt;br /&gt;
&lt;br /&gt;
De manera alternativa, puede buscar a través de el árbol de módulos en la pestaña ''Módulos'' (''Modules''). Puede también buscar en el menú principal. Por ejemplo, para encontrar información sobre un mapa ráster, use:''Ráster → Reportes y estadísticas → Metadatos básicos del ráster'' (''Raster → Reports and statistics → Basic raster metadata'').&lt;br /&gt;
&lt;br /&gt;
Si ya conoce el nombre del módulo, puede simplemente usar la línea de comandos. La GUI ofrece una pestaña de Consola con una línea de comandos específicamente costruida para los módulos de GRASS GIS. Si teclee el nombre del módulo, va a recibir sugerencias para el autocompletado del nombre. Luego, si presiona Enter le saldrá el cuadro de diálogo del módulo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:wxGUI_module_search.png|Buscar un módulo en el árbol de módulos (nombre, descripciones o palabras clave)&lt;br /&gt;
Image:wxGUI_menu_rinfo.png|Los módulos pueden ser encontrados en el menú principal&lt;br /&gt;
Image:wxGUI_console_completion.png|Sugerencia automática cuando teclea el nombre del módulo: ingresando el prefijo r. tenemos la lista de módulos que empiezan con este prefijo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puede también usar la línea de comandos para completar los comandos, i.e. módulo y lista de parámetros. Esto módulos son lo que usualmente se encuentra en la documentación o en este material. Puede usarlos directamente en la pestaña de Consola o puede usarlos como instrucciones rellenando el cuadro de diálogo de la GUI.&lt;br /&gt;
&lt;br /&gt;
=== Línea de comandos vs. interfaz GUI ===&lt;br /&gt;
[[File:Wxgui_module_parameters_r_neighbors.png|400px|thumb|right| Cuadro de diálogo de un módulo]]&lt;br /&gt;
Los módulos GRASS pueden ser ejecutados tanto a través de la GUI o en la interfaz de línea de comandos. La GUI ofrece una aproximación más amigable para ejecutar los módulos donde el usuario navega en las capas de datos que quiere anañizar y modifica las opciones seleccionandolas. La GUI ofrece un manual fácilmente accesible de cómo ejecutar el módulo. La interfaz de la línea de comandos permite a los usuarios ejecutar un módulo usando opciones para ese módulo (prompts specific to that module). Esto es útil cuando haga análisis similares con modificaciones menores o ya está familiarizado con los comandos del módulo para un procesamiento más eficiente. En este taller proveemos lasllamadas de los módulos y estas pueden ser copiadas y pegadas e la línea de comandos para seguir el flujo de trabajo, pero también puede usar la GUI y la interfaz de la línea de comandos, dependiendo de su preferencia personal. Vea cómo la {{cmd|wxGUI.modules|version=71|desc=GUI y la interfaz de la línea de comandos}} representa la misma herramienta.&lt;br /&gt;
&lt;br /&gt;
El mismo análisis puede ser realizado usando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 r.neighbors -c input=elevation output=elev_smooth size=5&lt;br /&gt;
&lt;br /&gt;
De manera análoga, puede rellenar los parámetros de la GUI, modificando parámetro por parámetro cuando tiene el comando.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Región computacional ===&lt;br /&gt;
&lt;br /&gt;
Antes de usar un módulo para calcular un nuevo mapa ráster, debemos definir de una manera adecuada la región computacional. Todos los cálculos ráster se realizarán en la extensión especificada y con la resolución dada.&lt;br /&gt;
&lt;br /&gt;
La región computacional es un concepto importante en GRASS GIS. En GRASS se puede definir la región computacional en una parte pequeña de una extensión mayor de los datos para realizar pruebas de un análisis o para analizar regiones específicas basadas en las unidades administrativas. Vamos a proveer algunos puntos que debe tener en mente cuando use la función de la región computacional:&lt;br /&gt;
* definida por la extensión y resolución ráster&lt;br /&gt;
* aplica a todas las operaciones ráster&lt;br /&gt;
* persiste entre sesiones de GRASS, puede ser diferente para distintos Directorios de mapas&lt;br /&gt;
* ventajas: mantiene consistencia en resultados, evita el recorte, para cálculos computacionalmente demantantes se puede definir una región de extensión menor y revisar si el resultado es correcto para luego realizar en toda la región o área de estudio.&lt;br /&gt;
* corra &amp;lt;code&amp;gt;g.region -p&amp;lt;/code&amp;gt; o en el menú ''Configuraciones'' - ''Región'' - ''Mostrar región'' para ver la configuración actual de la región&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Computational_region_two_rasters.png|Concepto de región computacional: un ráster con una extensión grade (azul) se muestra junto con otro más pequeño (verde). La región computacional (rojo) se define para que sea igual al ráster pequeño, así los cálculos estarán limitados a la región que ocupa el ráster menor aún cuando la entrada sea el ráster mayor. (No se muestra en la imagen: también la resolución, no solo la extensión, es igual a la resolución del ráster menor.) &lt;br /&gt;
Image:WxGUI set region.png|Modos sencillos para definir la región computacional desde la GUI. A la izquierda, definir la región para que sea igual a un mapa ráster. A la derecha, seleccionar la opción señalada y luego defina la región dibujando un rectángulo. &lt;br /&gt;
Image:Wxgui_computational_region_set_from_raster.png|Definir la región computacional (extensión y resolución) para que sea igual a un ráster (pestaña de'' Capas'' en el ''Administrador de capas'')&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los valores numéricos de la región computacional pueden ser revisados usando:&lt;br /&gt;
&lt;br /&gt;
 g.region -p&lt;br /&gt;
&lt;br /&gt;
Luego de ejecutar el comando, obtendrá algo como esto:&lt;br /&gt;
&lt;br /&gt;
 norte:      220750&lt;br /&gt;
 sur:      220000&lt;br /&gt;
 oeste:       638300&lt;br /&gt;
 este:       639000&lt;br /&gt;
 nsres:      1&lt;br /&gt;
 eores:      1&lt;br /&gt;
 rows:       750&lt;br /&gt;
 columnas:       700&lt;br /&gt;
 celdas:      525000&lt;br /&gt;
&lt;br /&gt;
La región computacional puede ser definida usando un mapa ráster:&lt;br /&gt;
&lt;br /&gt;
 g.region raster=dsm -p&lt;br /&gt;
&lt;br /&gt;
=== Running modules ===&lt;br /&gt;
&lt;br /&gt;
Encuentre el módulo para calcular el área visible (''viewshed'') en el menú o en el árbol de módulos en ''Ráster → Análisis de terreno → Visibilidad'', o simplemente en la ''Consola'' corra {{cmd|r.viewshed}}.&lt;br /&gt;
&lt;br /&gt;
 r.viewshed input=dsm output=dsm_viewshed coordinates=640167,223907 observer_elevation=1.72 target_elevation=1 max_distance=400&lt;br /&gt;
&lt;br /&gt;
=== Vista 3D ===&lt;br /&gt;
[[File:ICC_workshop_3Dview_ortho.png|800px|thumb|right| Visualización 3D de un MDS (DSM) con una ortofoto superpuesta]]&lt;br /&gt;
Podemos explorar nuestra área de estudio en la vista 3D (use la imagen si necesita clarificar los siguientes pasos):&lt;br /&gt;
# Añadir ráster &amp;lt;tt&amp;gt;dsm&amp;lt;/tt&amp;gt; y deseleccionar o remover cualquier otra capa. Note que el deseleccionar (o remover) cualquier otra capa es importante porque cualquier otra capa cargada en ''Capas'' es interpretada como un suerficie en la vista 3D.&lt;br /&gt;
# Cambie a la vista 3D (en la esquina derecha del Visualizador de Mapas).&lt;br /&gt;
# Ajuste la vista (perspectiva, altura).&lt;br /&gt;
# En la pestaña ''Data'', defina ''Modo de resolución fina'' a 1 y defina &amp;lt;tt&amp;gt;ortho&amp;lt;/tt&amp;gt; como superficie de color (la ortofoto será mostrada sobre el DSM).&lt;br /&gt;
# Regrese a la pestaña ''Vista'' y explore las diferentes direcciones de vista usando el controlador verde.&lt;br /&gt;
# Vaya a la pestaña ''Apariencia''y cambie las condiciones de luz (mejor altura de la luz, cambio de dirección).&lt;br /&gt;
# Trate también usando el ráster &amp;lt;tt&amp;gt;landforms&amp;lt;/tt&amp;gt;  como la superficie de colores.&lt;br /&gt;
# Cuando termine, cambie de nuevo a la vista 2D.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Session 1: Introduction to scripting in GRASS GIS with Python ==&lt;br /&gt;
&lt;br /&gt;
La manera más sencilla de ejecutar el código de Python que usa los paquetes de GRASS GIS es usar el ''Editor simple de Python'' integrado a GRASS GIS (accesible desde la barra de herramientas o la pestaña Python en el ''Administrador de capas''). Otra opción es usar su editor de texto favorito y luego correr el script de GRASS GIS usando el menú principal ''Archivo → Lanzar script''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Simple python editor v buffer.png|''Editor simple de Python'' integrado en GRASS GIS (desde la versión 7.2) con la pestaña ''Python'' de fondo, que contiene una consola interactiva de Python.&lt;br /&gt;
Image:GRASS GUI Python shell.png|Pestaña ''Python'' con una consola interactiva de Python&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La librería GRASS GIS 7 Python Scripting Library provee funciones para llamar módulos de GRASS dentro de scripts como subprocesos. Las funciones más frecuentes incluyen:&lt;br /&gt;
* {{pyapi|script|script.core|run_command}}: usada para módulos cuya salida es un vectorial o ráster y no se espera salida de texto&lt;br /&gt;
* {{pyapi|script|script.core|read_command}}: usada cuando interesa la salida de texto, que se obtiene como un texto de Python (string, cadena)&lt;br /&gt;
* {{pyapi|script|script.core|parse_command}}: usada con módulos que producen texto como pares clave=valor y que son procesados automáticamente como diccionarios de Python&lt;br /&gt;
* {{pyapi|script|script.core|write_command}}: para módulos que esperan ingreso de texto, ya sea de un archivo o de la entrada estándar&lt;br /&gt;
&lt;br /&gt;
Vamos a usar el Editor Python simple de GRASS GUI para correr los comandos. Puede abrirlo desde la pestaña Python.&lt;br /&gt;
Para scripts más largos, puede crear un archivo de texto, salvarlo en el directorio de trabajo actual y correrlo con &amp;lt;tt&amp;gt;python myscript.py&amp;lt;/tt&amp;gt; desde la consola de comandos de la GUI o desde la terminal.&lt;br /&gt;
&lt;br /&gt;
Cuando abra el Editor simple de Python, primero encontrará un pequeño código.&lt;br /&gt;
Empieza importando la librería GRASS GIS Python Scripting Library:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la función principal llamamos {{cmd|g.region}} para ver la configuración de la región computacional acual:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('g.region', flags='p')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que la sintaxis es similar a la sintaxis de la consola (linux) (&amp;lt;code&amp;gt;g.region -p&amp;lt;/code&amp;gt;), solamente que la bandera (flag) se especifica como un parámetro. Ahora podemos correr el script presionando el botón Correr de la barra de herramientas. En el Administrador de capas podemos obtener la salida de g.region.&lt;br /&gt;
&lt;br /&gt;
Antes de correr cualquier módulo GRASS de ráster, necesitamos definir la región computacional. En este ejemplo, definimos la extensión y resolución de a la capa ráster &amp;lt;tt&amp;gt;elevation&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Reemplace el comando g.region anterior con la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('g.region', raster='dsm')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La función run_command() es la más usada. Vamos a usarla para calcular la viewshed usando el comando {{cmd|r.viewshed}}.&lt;br /&gt;
Añada la siguiente línea luego del comando g.region:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('r.viewshed', input='dsm', output='python_viewshed', coordinates=(640645, 224035), overwrite=True)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;overwrite&amp;lt;/code&amp;gt; se necesita si queremos volver a correr el script y reescribir el ráster.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver qué tan grande es la viewshed usando el comando {{cmd|r.univar}}. Aquí usamos &amp;lt;code&amp;gt;parse_command&amp;lt;/code&amp;gt; para obtener las estadísticas como un diccionario Python&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
univar = gscript.parse_command('r.univar', map='python_viewshed', flags='g')&lt;br /&gt;
print univar['n']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El resultado mostrado es la cantidad de celdas de la vista (viewshed).&lt;br /&gt;
&lt;br /&gt;
La librería GRASS GIS Python Scripting Library también tiene varias funciones atajo (wrapper functions) para algunos módulos que se llaman frecuentemente. La lista de funciones atajo junto con ejemplos incluyen:&lt;br /&gt;
* Metadatos ráster usando {{pyapi|script|script.raster|raster_info}}: &amp;lt;code&amp;gt;gscript.raster_info('viewshed_python')&amp;lt;/code&amp;gt;&lt;br /&gt;
* Metadatos vectoriales usando {{pyapi|script|script.vector|vector_info}}: &amp;lt;code&amp;gt;gscript.vector_info('roads')&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lista de datos ráster incluyendo la Localización usando {{pyapi|script|script.core|list_grouped}}: &amp;lt;code&amp;gt;gscript.list_grouped(type=['raster'])&amp;lt;/code&amp;gt;&lt;br /&gt;
* Obtener la región computacional actual usando {{pyapi|script|script.core|region}}: &amp;lt;code&amp;gt;gscript.region()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí hay dos comandos (a ejecutarse en la ''Consola'') usados frecuentemente cuando se trabaja con scripts. Lo primero es definir la región computacional. Queremos hacerlo en un script, pero es mejor y más general el hacerlo antes de ejecutar el script (así que script puede usar diferentes configuraciones de la región computacional):&lt;br /&gt;
&lt;br /&gt;
 g.region raster=dsm&lt;br /&gt;
&lt;br /&gt;
El segundo comando es útil cuando queremos correr un script muchas veces. En este caso, primero necesitamos remover los mapas ráster creados, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
 g.remove type=raster pattern=&amp;quot;viewshed*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
El comando de arriba de hecho no remueve (elimina) los mapas, pero informa cuales va a remover si establece la bandera &amp;lt;tt&amp;gt;-f&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Sesión 1: Procesamiento por lotes (batch processing) usando Python ==&lt;br /&gt;
En este ejemplo vamos a calcular las ''viewshed'' a lo largo de un camino para simular, de una manera simple qué es lo que vería alguien que vaya manejando por el camino. Primero prerparamos el punto de vista corriendo el módulo directamente a través de los diálogos de la GUI o en la Consola. Luego usamos Python para procesar todos los puntos creados.&lt;br /&gt;
&lt;br /&gt;
Primero extraemos solamente los segmentos del camino con el nombre 'Umstead Drive' (use el código en la pestaña de Consola o use el diálog GUI):&lt;br /&gt;
&lt;br /&gt;
 v.extract input=roads where=&amp;quot;name = 'Umstead Drive'&amp;quot; output=umstead_drive_segments&lt;br /&gt;
&lt;br /&gt;
Vamos a unir los segmentos en una polilínea usando {{cmd|v.build.polylines}}&lt;br /&gt;
&lt;br /&gt;
 v.build.polylines input=umstead_drive_segments output=umstead_drive cats=first&lt;br /&gt;
&lt;br /&gt;
Ahora generamos puntos de visión (viewpoints) a intervalos regulares sobre la línea:&lt;br /&gt;
&lt;br /&gt;
 v.to.points input=umstead_drive type=line output=viewpoints dmax=50&lt;br /&gt;
&lt;br /&gt;
Calculamos la viewshed para cada punto usando un script de Python.&lt;br /&gt;
A partir de estas viewsheds podemos facilmente calcular el ''Área de visión acumulada'' (Cumulative viewshed) (qué tan visible es un lugar).&lt;br /&gt;
Para eso vamos a usar el módulo {{cmd|r.series}}, que sobrepone los rásters de las viewsheds y calcula cuantas veces cada celda es visible en todos los rásters.&lt;br /&gt;
&lt;br /&gt;
Copie el siguiente código en el Editor Simple de Python (asegúrese de sobreescribir cualquier código preexistente) y presione el botón Correr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import grass.script as gscript&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # obtener las coordenas de los puntos &lt;br /&gt;
    viewpoints = gscript.read_command('v.out.ascii', input='viewpoints',&lt;br /&gt;
                                      separator='comma', layer=2).strip()&lt;br /&gt;
    # loop a través de los puntos y calcular la viewshed de cada uno&lt;br /&gt;
    for point in viewpoints.splitlines():&lt;br /&gt;
        if not point:&lt;br /&gt;
            # skip empty lines&lt;br /&gt;
            continue&lt;br /&gt;
        x, y, cat = point.split(',')&lt;br /&gt;
        gscript.run_command('r.viewshed', input='dsm', output='viewshed' + cat,&lt;br /&gt;
                            coordinates=(x, y), max_distance=300, overwrite=True)&lt;br /&gt;
    # obtener todos lso resultados de las viewshed y definir su color a amarillo&lt;br /&gt;
    # exportar la lista de nombres de los mapas de viewshed a un archivo&lt;br /&gt;
    maps_file = 'viewsheds.txt'&lt;br /&gt;
    gscript.run_command('g.list', type='raster', pattern='viewshed*', output=maps_file)&lt;br /&gt;
    gscript.write_command('r.colors', file=maps_file, rules='-',&lt;br /&gt;
                          stdin='0% yellow \n 100% yellow')&lt;br /&gt;
    # área de visibilidad acumulada (cumulative viewshed)&lt;br /&gt;
    gscript.run_command('r.series', file='viewsheds.txt', output='cumulative_viewshed', method='count')&lt;br /&gt;
    # definir el color de la cumulative viewshed de gris a amarillo&lt;br /&gt;
    gscript.write_command('r.colors', map='cumulative_viewshed', rules='-',&lt;br /&gt;
                          stdin='0% 70:70:70 \n 100% yellow')&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos visualizar la cumulative viewshed superpuesta sobre un MDS usando la vista 3D. Si lo necesita, revise las instrucciones [[#3D_view| en la sección anterior de vista 3D]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:cumulative_viewshed.png|800px|thumb|center| Cumulative viewshed calculada sobre un camino]]&lt;br /&gt;
&lt;br /&gt;
Para lo siguiente vamos a exportar los puntos de observación y el área visible acumulada (cumulative viewshed) para usarlos dentro de Blender.&lt;br /&gt;
Copie y pegue las líneas individuales a la consola de comandos de la GUI y ejecútelos de manera separada, omita las líneas que inician con #.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# volver los puntos 2D points a 3D usando la información del MDS&lt;br /&gt;
v.drape input=viewpoints output=viewpoints_3d elevation=dsm method=bilinear&lt;br /&gt;
# exportarlos, ignorar errores de los nombres de las columnas demasiado largos&lt;br /&gt;
v.out.ogr input=viewpoints_3d output=viewpoints_3d.shp format=ESRI_Shapefile&lt;br /&gt;
# exportar el área visible acumulada cumulative viewshed) como PNG&lt;br /&gt;
r.out.gdal input=cumulative_viewshed output=cumulative_viewshed.png format=PNG&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sesión 1: Introducción a Blender ==&lt;br /&gt;
Los materiales para la parte de Blender de este taller están disponibles aquí:&lt;br /&gt;
&lt;br /&gt;
https://github.com/ptabriz/ICC_2017_Workshop/blob/master/README.md&lt;br /&gt;
&lt;br /&gt;
== Sesión 2: Animación en GRASS GIS ==&lt;br /&gt;
En el siguiente ejercicio visualizaremos el área visible acumulada sobre el camino (calculada más arriba) como una animación. Vamos a usar {{cmd|g.gui.animation|desc=GRASS GIS Animation Tool}}. Iniciela desde el menú ''Archivo - Herramienta de animación'':&lt;br /&gt;
[[File:futures_anim_start_animation_tool.png|thumb|none|Menú principal de la herramienta de animación]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inicie con ''Añadir nueva animación'' y de click en ''Añadir conjunto de datos espacio-temporales o series de capas de mapas''. En ''Añadir capas de conjunto de datos espacio temporales'' de click en el botón Siguiente para ingresar el campo y de teclee &amp;lt;tt&amp;gt;^viewshed&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Esto filtra los rásters que inician con &amp;quot;viewshed&amp;quot;. Puede usar [https://docs.python.org/2/library/re.html expresiones regulares de Python] para filtrar los mapas en este diálogo.&lt;br /&gt;
Revise si los mapas deseados están seleccionados y luego confirme el diálogo y regrese al de ''Añadir nueva animación''.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente que queremos es añadir la ortofoto como capa base. Use ''Añadir capa de mapa ráster'' y seleccione el ráster &amp;lt;tt&amp;gt;ortho&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
| [[File:animation_tool_add_multiple_rasters.png|thumb|none|700px|Añadir serie de rásters de áreas visibles (viewsheds) a la herramienta de animación.]]&lt;br /&gt;
| [[File:Animation_tool_add_base_raster.png|thumb|none|700px|Añadir ortofoto como ráster de base]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Haga lo mismo para el vectorial de caminos &amp;lt;tt&amp;gt;umstead_drive&amp;lt;/tt&amp;gt;, solo que en vez de ráster, añada vectorial. Luego, reacomode las capas de tal manera que la ortofoto (ortophoto) quede debajo de las otras capas.&lt;br /&gt;
Confirme el diálogo y la animación debe cargarse.&lt;br /&gt;
{|style=&amp;quot;margin: 0 auto;&amp;quot;&lt;br /&gt;
| [[File:Animation_tool_layers.png|thumb|none|500px|Cambie el orden de las capas]]&lt;br /&gt;
| [[File:Animation_tool_viewsheds.png|thumb|none|500px|Animación resultante]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Más exploración:&lt;br /&gt;
* Si quiere darle zoom (acercarse), vuela al Visualizador de mapas, luego defina la región computacional a la extensión que quiera usando -de la barra de herramientas- el botón 'Varias opciones de zoom - Definir la región computacional'. Luego presione ''Render map'' (Mostrar mapa) en la barra de herramientas de la herramienta de Animación, esto hará que se vuelva a mostrar de nuevo la animación pero basada en la nueva extensión de la región computacional.&lt;br /&gt;
&lt;br /&gt;
== Sesión 2: Scripting of rendering in GRASS GIS ==&lt;br /&gt;
&lt;br /&gt;
La visualización de los mapas se puede hacer en GRASS GIS usando la API de Python en un modo que es similar a lo que se hace en la GUI. De manera similar a correr el procesamiento en los módulos, los diálogos GUI tienen un botón ''Copiar'' que da el equivalente de la línea de comandos de lo que se está haciendo en el diálogo de la GUI. Por ejemplo, el diálogo de propiedades de un ráster da el siguiente código &amp;lt;code&amp;gt;d.rast map=viewshed&amp;lt;/code&amp;gt;. El código escrito en la sintaxis de Python como &amp;lt;code&amp;gt;run_command('d.rast', map='viewshed')&amp;lt;/code&amp;gt;. Ademas de los comandos para visualizar, ecesitamos especificar dónde (nombre del archivo, filename) y cómo (ej. formato del archivo) visualizarlo, lo que se puede hacer usando el comando {{cmd|d.mon}} como se muestra abajo, o variables ambientales (en la GUI no necesitamos declarar nada dado que el contexto es claro). Un ejemplo completo se muestra más abajo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import grass.script as gscript&lt;br /&gt;
&lt;br /&gt;
viewsheds = gscript.list_strings(type=['raster'], pattern='viewshed*')&lt;br /&gt;
&lt;br /&gt;
for viewshed in viewsheds:&lt;br /&gt;
    # tomar el nombre del Directorio de mapas del archivo de la imagen&lt;br /&gt;
    filename = '{}.png'.format(viewshed.split('@')[0])&lt;br /&gt;
    # iniciar la visualización&lt;br /&gt;
    gscript.run_command('d.mon', start='cairo', output=filename)&lt;br /&gt;
    # comandos de visualización&lt;br /&gt;
    gscript.run_command('d.rast', map='ortho')&lt;br /&gt;
    gscript.run_command('d.vect', map='umstead_drive', color='232:232:232', width=3)&lt;br /&gt;
    gscript.run_command('d.rast', map=viewshed)&lt;br /&gt;
    # finalizar visualización&lt;br /&gt;
    gscript.run_command('d.mon', stop='cairo')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los números &amp;lt;code&amp;gt;232:232:232&amp;lt;/code&amp;gt; en la llamada del comando {{cmd|d.vect}} son los tripletes GRASS RGB. En otras palabras, los colores rojo, verde y azul son expresados como números del 0 al 255 separados por los dos puntos (usando sintaxis HTML, el equivalente sería &amp;lt;code&amp;gt;rgb(232,232,232)&amp;lt;/code&amp;gt; o &amp;lt;code&amp;gt;#E8E8E8&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Información para realizar scripts, paralelizar y supercómputo:''' al realizar scripts, el comando {{cmd|d.mon}} generalmente no es usado dado que solo un monitor está activo. Esta es una simplificación conveniente para uso interactivo, pero limitante al realizar scripts. Cuando la visualización corre en paralelo, es necesario usar {{cmd|variables}} ambientales en lugar del módulo {{cmd|d.mon}}. Las variables se definen globalmente (usando el diccionario &amp;lt;code&amp;gt;os.environ&amp;lt;/code&amp;gt;) o para cada llamada de la función (usando el parámetro &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt;). Las siguientes tres variables son las más importantes: &amp;lt;tt&amp;gt;GRASS_RENDER_IMMEDIATE&amp;lt;/tt&amp;gt; (usualmente definida a &amp;lt;tt&amp;gt;cairo&amp;lt;/tt&amp;gt;), &amp;lt;tt&amp;gt;GRASS_RENDER_FILE_READ&amp;lt;/tt&amp;gt; (definida a &amp;lt;tt&amp;gt;TRUE&amp;lt;/tt&amp;gt;), y &amp;lt;tt&amp;gt;GRASS_RENDER_FILE&amp;lt;/tt&amp;gt; (nombre del archivo de la imagen resultante). Variables adicionales incluyen: &amp;lt;tt&amp;gt;GRASS_FONT&amp;lt;/tt&amp;gt; (nombre de la fuente que se va a usar, por ej. sans) y &amp;lt;tt&amp;gt;GRASS_LEGEND_FILE&amp;lt;/tt&amp;gt; (archivo para leyenda vectorial, puede ser una ruta a un archivo temporal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Más exploración:'''&lt;br /&gt;
* Use el mapa vectorial &amp;lt;tt&amp;gt;roads&amp;lt;/tt&amp;gt; en lugar de solamente &amp;lt;tt&amp;gt;umstead_drive&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Añada el mapa vectorial &amp;lt;tt&amp;gt;buildings&amp;lt;/tt&amp;gt; del mismo modo que el mapa vectorial &amp;lt;tt&amp;gt;roads&amp;lt;/tt&amp;gt;. Esta ves, necesita definir dos opciones de color: color (para la línea exterior) y fill_color (para la parte interna). Use el diálogo de propiedades de la capa en la GUI para crear el estilo deseado. Use el botón Copiar para obtener los parámetros en la sintaxis de la línea de comandos y reescribirlos a Python. Puede solamente usar los siguientes colores  188:82:47, 213:115:82 (#BC522F, #D57352) o 170:166:157, 213:205:189 (#AAA69D, #D5CDBD).&lt;br /&gt;
* Si tiene ImageMagic disponible, cree una animación GIF usando algo como: &amp;lt;code&amp;gt;convert 'viewshed?.png' 'viewshed??.png' viewshed.gif&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sesión 2:  Light up the terrain with viewsheds ==&lt;br /&gt;
Los materiales para la parte de Blender de este taller están disponibles aquí:&lt;br /&gt;
&lt;br /&gt;
https://github.com/ptabriz/ICC_2017_Workshop/blob/master/README.md#light-up-the-terrain-with-viewsheds&lt;br /&gt;
&lt;br /&gt;
== Session 2: Tangible Landscape ==&lt;br /&gt;
&lt;br /&gt;
''Tangibly explore landscapes'' with [http://tangible-landscape.github.io/ Tangible Landscape]&lt;br /&gt;
&lt;br /&gt;
[[File:Ncgis2017 ncsu booth tangible landscape.jpg|300px|thumb|right|Tangible Landscape (photos by Anna Klevtcova)]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Software should be pre-installed at ICC, but the following instructions can be used to install software on participants' laptops.&lt;br /&gt;
&lt;br /&gt;
We use GRASS GIS 7.2 and Blender 2.78.&lt;br /&gt;
&lt;br /&gt;
'''MS Windows'''&lt;br /&gt;
&lt;br /&gt;
Download the standalone GRASS GIS binaries ([https://grass.osgeo.org/grass72/binary/mswindows/native/x86_64/WinGRASS-7.2.1-1-Setup-x86_64.exe 64-bit version], or [https://grass.osgeo.org/grass72/binary/mswindows/native/x86/WinGRASS-7.2.1-1-Setup-x86.exe 32-bit version]) from [https://grass.osgeo.org/ grass.osgeo.org].&lt;br /&gt;
&lt;br /&gt;
'''Mac OS'''&lt;br /&gt;
&lt;br /&gt;
Install GRASS GIS using [https://brew.sh/ Homebrew] [https://github.com/OSGeo/homebrew-osgeo4mac osgeo4mac]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew tap osgeo/osgeo4mac&lt;br /&gt;
brew install grass7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OSGeo-Live'''&lt;br /&gt;
&lt;br /&gt;
All needed software is included except for Blender.&lt;br /&gt;
&lt;br /&gt;
''' Ubuntu '''&lt;br /&gt;
&lt;br /&gt;
Install GRASS GIS from packages:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Linux '''&lt;br /&gt;
&lt;br /&gt;
For other Linux distributions other then Ubuntu, please try to find GRASS GIS in their package managers.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[GRASS GIS at ICC 2017]]&lt;br /&gt;
* [[Unleash the power of GRASS GIS at US-IALE 2017]]&lt;br /&gt;
* [[Creating animation from FUTURES output in GRASS GIS]]&lt;br /&gt;
* [[Introduction to GRASS GIS with terrain analysis examples]]&lt;br /&gt;
* [[GRASS Location Wizard]]&lt;br /&gt;
* [[GRASS and Blender]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Workshops]]&lt;br /&gt;
[[Category: 2017]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing/GRASS_R_raster_time_series_processing&amp;diff=24736</id>
		<title>Temporal data processing/GRASS R raster time series processing</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing/GRASS_R_raster_time_series_processing&amp;diff=24736"/>
		<updated>2017-08-25T18:35:15Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: add category R&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GRASS-R / R-GRASS for raster time series processing == &lt;br /&gt;
&lt;br /&gt;
This little example will guide you through the steps to export a Spatio-Temporal Raster Dataset (strds) stored in GRASS, import it into R, prepare the data properly to use the Data INterpolation Empirical Orthogonal Functions algorithm  ([http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF DINEOF]) and, after running it, rebuild your raster time series, export it and import the new strds into GRASS.&lt;br /&gt;
&lt;br /&gt;
We will use North Carolina climatic data already available as a GRASS location. You can get it [http://courses.ncsu.edu/mea592/common/media/02/nc_climate_spm_2000_2012.zip here]. If not done yet, you need to unzip the file and paste into your GRASS database folder (usually named grassdata).&lt;br /&gt;
&lt;br /&gt;
Shall we start?&lt;br /&gt;
&lt;br /&gt;
=== 1. In GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
* Open GRASS in the location/mapset of interest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass70 $HOME/grassdata/nc_climate_spm_2000_2012/climate_1970_2012/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List raster maps with pattern=*tempmean&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.list type=raster pattern=*tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create a strds with mean temperature maps: {{cmd|t.create}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.create output=tempmean type=strds temporaltype=absolute \&lt;br /&gt;
    title=&amp;quot;Average temperature&amp;quot; description=&amp;quot;Monthly temperature average in NC [deg C]&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Register maps in the strds ({{cmd|t.register}}), list the strds ({{cmd|t.list}}) and obtain general information for a particular space-time dataset ({{cmd|t.info}}). More details about different options to register maps in strds can be found in the dedicated [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration map registration] wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.register -i input=tempmean type=raster start=2000-01-01 increment=&amp;quot;1 months&amp;quot; \&lt;br /&gt;
    maps=`g.list type=raster pattern=*tempmean separator=comma` &lt;br /&gt;
&lt;br /&gt;
t.list type=strds&lt;br /&gt;
&lt;br /&gt;
t.info input=tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List maps and check basic statistics of the strds: {{cmd|t.rast.list}} and {{cmd|t.rast.univar}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=tempmean&lt;br /&gt;
&lt;br /&gt;
t.rast.univar input=tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Export out of GRASS: {{cmd|t.rast.export}}&lt;br /&gt;
&lt;br /&gt;
As said before, we will use DINEOF as gap-filling technique. This method is not (yet) available in GRASS GIS, so '''we need to export the raster time series'''. To export only a spatial subset of the raster maps, we set region to the default North Carolina computational region and then we use {{cmd|t.rast.export}} to export our strds. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# set default region&lt;br /&gt;
g.region -d&lt;br /&gt;
&lt;br /&gt;
t.rast.export input=tempmean output=tempmean4R.tar.gzip compression=gzip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Moving to R ===&lt;br /&gt;
&lt;br /&gt;
* From the GRASS console, open R (or rstudio)&lt;br /&gt;
&lt;br /&gt;
Note that you can directly open a project in which you were already working (as in the example above) or just type '''R''' or '''rstudio''' followed by '''&amp;amp;''' so you do not loose the command prompt in GRASS console. More details and examples of how to use R or rstudio within a GRASS session can be found in the dedicated [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7 wiki]. Look for [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#R_within_GRASS R within GRASS] and [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#Using_RStudio_in_a_GRASS_GIS_session Rstudio within GRASS] sections.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rstudio $HOME/Documents/foss4g_bonn/ts_grass_r &amp;amp; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once in R, we first load the ''rgrass7'' package. This library provides the interface with GRASS GIS 7. We will also check some basic information about the session.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Load rgrass7 package&lt;br /&gt;
library(rgrass7)&lt;br /&gt;
&lt;br /&gt;
# Check GRASS environment&lt;br /&gt;
genv &amp;lt;- gmeta()&lt;br /&gt;
genv&lt;br /&gt;
gisdbase    /home/veroandreo/grassdata &lt;br /&gt;
location    nc_climate_spm_2000_2012 &lt;br /&gt;
mapset      climate_1970_2012 &lt;br /&gt;
rows        104 &lt;br /&gt;
columns     139 &lt;br /&gt;
north       260500 &lt;br /&gt;
south       208500 &lt;br /&gt;
west        624500 &lt;br /&gt;
east        694000 &lt;br /&gt;
nsres       500 &lt;br /&gt;
ewres       500 &lt;br /&gt;
projection  +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75&lt;br /&gt;
+lon_0=-79 +x_0=609601.22 +y_0=0 +no_defs +a=6378137 +rf=298.257222101&lt;br /&gt;
+towgs84=0.000,0.000,0.000 +to_meter=1 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This gives us information about projection and region settings, among other things, that we will need afterwards (see below).&lt;br /&gt;
&lt;br /&gt;
Given that neither GRASS temporal modules nor GRASS space time data sets are (yet) enabled/implemented in R, when you need to process a time series that you have in GRASS DB you need to export all maps and then read them into R. Therefore, we need to load the following packages, too:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Load other required packages&lt;br /&gt;
library(spacetime)&lt;br /&gt;
library(raster)&lt;br /&gt;
library(rgdal)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, we '''read the strds exported from GRASS into R''' with the function read.tgrass from ''spacetime'' package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Import strds into R&lt;br /&gt;
tempmean_in_R &amp;lt;- read.tgrass(&amp;quot;tempmean4R.tar.gzip&amp;quot;, localName = FALSE, useTempDir = FALSE)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that R imports our exported strds as a [http://rspatial.org/spatial/rst/4-rasterdata.html#rasterstack-and-rasterbrick RasterStack]. Let us see if all is there: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Get information about the RasterStack&lt;br /&gt;
class(tempmean_in_R)&lt;br /&gt;
[1] &amp;quot;RasterStack&amp;quot;&lt;br /&gt;
attr(,&amp;quot;package&amp;quot;)&lt;br /&gt;
[1] &amp;quot;raster&amp;quot;&lt;br /&gt;
# Dimensions&lt;br /&gt;
&amp;gt; dim(tempmean_in_R)&lt;br /&gt;
[1] 104 139 156&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can also ask summaries of particular layers in the stack or of the whole RasterStack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Summary of the first layer&lt;br /&gt;
summary(tempmean_in_R[[1]])&lt;br /&gt;
        X2000_01_tempmean&lt;br /&gt;
Min.             2.833784&lt;br /&gt;
1st Qu.          3.667942&lt;br /&gt;
Median           3.936594&lt;br /&gt;
3rd Qu.          4.132093&lt;br /&gt;
Max.             4.496206&lt;br /&gt;
NA's             0.000000&lt;br /&gt;
&lt;br /&gt;
# Summary of the RasterStack&lt;br /&gt;
summary(tempmean_in_R)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, of course, we may also plot a certain layer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Plot 3rd layer in the stack&lt;br /&gt;
plot(tempmean_in_R,3) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Layer3.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For most methods in R (For example: Theil-Sen slope, fft, dineof), we will need to transform our RasterStack into a matrix or data.frame. In the particular case of this example, we need to transform our RasterStack into a matrix ''mxt'', with ''m'' = maps and ''t'' = time, i.e.: in this matrix we have our maps as rows and time in columns. Therefore, ''in each column we have the time series for a given pixel''. Let us start, then.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# RasterStack to matrix (this gives us maps as columns and time in rows)&lt;br /&gt;
txm_tempmean &amp;lt;- as.matrix(tempmean_in_R) &lt;br /&gt;
dim(txm_tempmean)&lt;br /&gt;
[1] 14456   156&lt;br /&gt;
&lt;br /&gt;
# Transpose matrix (we need time in columns and maps unfolded in rows)&lt;br /&gt;
mxt_tempmean &amp;lt;- t(txm_tempmean)&lt;br /&gt;
dim(mxt_tempmean)&lt;br /&gt;
[1]   156 14456&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All the point of DINEOF is gap-filling. However, as our sample dataset comes from interpolations of weather stations, we do not have such gaps... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Check for gaps in data&lt;br /&gt;
sum(is.na(mxt_tempmean))&lt;br /&gt;
[1] 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, for the purpose of this example, we will create them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Create some holes. &lt;br /&gt;
# Total pixel counts: 14456*156=2255136&lt;br /&gt;
# NULL values must appear as NaN&lt;br /&gt;
set.seed(46)&lt;br /&gt;
n = 400000&lt;br /&gt;
mxt_tempmean[mysamples &amp;lt;- sample(length(mxt_tempmean), n)] &amp;lt;- NaN&lt;br /&gt;
sum(is.na(mxt_tempmean))&lt;br /&gt;
[1] 400000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to '''use DINEOF to fill our gappy data'''. You can find more info about DINEOF in the [http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF official site]. However, the R package providing DINEOF is called ''sinkr'' and can be installed from [https://github.com/marchtaylor/sinkr here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Load library containing dineof function and other required libraries&lt;br /&gt;
library(sinkr)&lt;br /&gt;
library(irlba)&lt;br /&gt;
library(Matrix)&lt;br /&gt;
# or, download the dineof function from the repository and source it:&lt;br /&gt;
# source('dineof.r')&lt;br /&gt;
&lt;br /&gt;
# Run the algorithm - default settings &lt;br /&gt;
result_tempmean &amp;lt;- dineof(mxt_tempmean) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ''result_tempmean'' object is a list with all results from dineof. You may investigate yourself, try with other settings and compare results.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Explore what's inside&lt;br /&gt;
names(result_tempmean)&lt;br /&gt;
[1] &amp;quot;Xa&amp;quot;    &amp;quot;n.eof&amp;quot; &amp;quot;RMS&amp;quot;   &amp;quot;NEOF&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the purpose of this example, we will only extract the reconstructed spatio-temporal matrix and display it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Extract gap-filled matrix&lt;br /&gt;
tempmean_new &amp;lt;- result_tempmean$Xa &lt;br /&gt;
&lt;br /&gt;
# Set color palette&lt;br /&gt;
library(RColorBrewer)&lt;br /&gt;
pal &amp;lt;- colorRampPalette(c(&amp;quot;blue&amp;quot;, &amp;quot;cyan&amp;quot;, &amp;quot;yellow&amp;quot;, &amp;quot;red&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Display the gappy and gap-filled spatio-temporal matrices&lt;br /&gt;
par(mfrow = c(2,1))&lt;br /&gt;
image(mxt_tempmean, col = pal(100), main = &amp;quot;Original data with gaps&amp;quot;)&lt;br /&gt;
image(tempmean_new, col = pal(100), main = &amp;quot;Gap-filled data&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Plot gaps nogaps.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And we want to see how the time series of a particular pixel is reconstructed. Therefore, we just need to plot all the rows in a certain column. Do you remember how our matrix was formed?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Plot the time series of a single pixel from both matrices &lt;br /&gt;
pixel &amp;lt;- 10000&lt;br /&gt;
ylim &amp;lt;- range(c(mxt_tempmean[,pixel], tempmean_new[,pixel]), na.rm = TRUE)&lt;br /&gt;
plot(mxt_tempmean[,pixel], t = &amp;quot;l&amp;quot;, ylim = ylim, lwd = 2, ylab = &amp;quot;Temperature&amp;quot;, xlab = &amp;quot;Time&amp;quot;)&lt;br /&gt;
lines(tempmean_new[,pixel], col = 2, lty = 3)&lt;br /&gt;
legend(123, 13, c(&amp;quot;original&amp;quot;,&amp;quot;gap-filled&amp;quot;), lty = c(1,3), lwd = c(2,1), col = c(1,2), cex = 0.8)&lt;br /&gt;
abline(h = 0, v = 0, col = &amp;quot;gray60&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Time series.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let us assume that we are happy with the result, we need now to go back to a strds format. We need to rebuild the raster time series starting from a matrix ''mxt''. For that, we first '''create empty rasters of the same dimensions of our original raster maps and then, we fill them with each row of the gap-filled matrix'''. What we obtain then is a list of rasters. Let's see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Create raster objects to fill with data from tempmean_new&lt;br /&gt;
tempmean_2_grass &amp;lt;- raster(nrows = 104, ncols = 139, &lt;br /&gt;
           xmn = 624500, xmx = 694000, &lt;br /&gt;
           ymn = 208500, ymx = 260500, &lt;br /&gt;
           crs = tempmean_in_R)&lt;br /&gt;
dim(tempmean_2_grass)&lt;br /&gt;
[1] 104 139   1&lt;br /&gt;
&lt;br /&gt;
# Extract data from each row of ''tempmean_new'' and build up a raster layer&lt;br /&gt;
# Output: list of rasters&lt;br /&gt;
tempmean_new_rl &amp;lt;- lapply(1:nrow(tempmean_new), function(i) {&lt;br /&gt;
  setValues(tempmean_2_grass, tempmean_new[i,])&lt;br /&gt;
  } )&lt;br /&gt;
length(tempmean_new_rl)&lt;br /&gt;
[1] 156&lt;br /&gt;
dim(tempmean_new_rl[[3]])&lt;br /&gt;
[1] 104 139   1&lt;br /&gt;
&lt;br /&gt;
# Plot a raster layer in the list&lt;br /&gt;
plot(tempmean_new_rl[[3]], main=&amp;quot;X2000_03_tempmean_new&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Tempmean new 3.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can compare with layer 3 in the original data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
plot(tempmean_in_R,3)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Well, so far we have a list of rasters. But to export them and import them back into GRASS, we need again a RasterStack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# rebuild RasterStack&lt;br /&gt;
tempmean_new_rs &amp;lt;- stack(tempmean_new_rl) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not only a RasterStack, but we need to specify the temporal dimension, i.e.: '''we need to add time to the RasterStack'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
time_4_new_rs &amp;lt;- seq(as.Date(&amp;quot;2001-01-01&amp;quot;), as.Date(&amp;quot;2012-12-01&amp;quot;))&lt;br /&gt;
tempmean_new_rs_and_time &amp;lt;- setZ(tempmean_new_rs, time_4_new_rs, name=&amp;quot;time&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, we '''export the RasterStack to GRASS''' with the write.tgrass function from ''spacetime'' package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
write.tgrass(tempmean_new_rs_and_time, &amp;quot;tempmean_new_from_R.tar.gzip&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Back to GRASS ===&lt;br /&gt;
&lt;br /&gt;
Now, switch back to GRASS console and '''import the strds''' with {{cmd|t.rast.import}}. This command will create a strds and register all maps in it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.import input=tempmean_new_from_R.tar.gz output=tempmean_dineof base=tempmean_dineof extrdir=/tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Temporal]]&lt;br /&gt;
[[Category: R]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing/GRASS_R_raster_time_series_processing/es&amp;diff=24735</id>
		<title>Temporal data processing/GRASS R raster time series processing/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing/GRASS_R_raster_time_series_processing/es&amp;diff=24735"/>
		<updated>2017-08-25T18:33:03Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: spanish translation of &amp;quot;Creating Temporal data processing/GRASS R raster time series processing&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GRASS-R / R-GRASS for raster time series processing == &lt;br /&gt;
&lt;br /&gt;
Este pequeño ejemplo lo va a guiar en los pasos para exportar un Conjunto de datos Espacio-temporales (strds) guardados en GRASS, importarlos a R, preparar los datos adecuadamente para usar el algoritmo Data INterpolation Empirical Orthogonal Functions  ([http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF DINEOF]) y luego de correrlo, reconstruir la serie de tiempo de rásters, exportarla e importar la nueva strds a  GRASS.&lt;br /&gt;
&lt;br /&gt;
Vamos a usar los datos climáticos de North Carolina que están ya disponibles como una Localización GRASS. Los puede obtener de [http://courses.ncsu.edu/mea592/common/media/02/nc_climate_spm_2000_2012.zip aquí]. Si no lo ha hecho, necesita descomprimir el archivo y pegarlo en su carpeta de base de datos d eGRASS (normalmente llamada grassdata).&lt;br /&gt;
&lt;br /&gt;
¿Empezamos?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. En GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
* Abrir GRASS en la Localización/Directorio de mapas de interés&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass70 $HOME/grassdata/nc_climate_spm_2000_2012/climate_1970_2012/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En listar los mapas ráster con pattern=*tempmean&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.list type=raster pattern=*tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Crear un strds con la media de los mapas de temperatura: {{cmd|t.create}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.create output=tempmean type=strds temporaltype=absolute \&lt;br /&gt;
    title=&amp;quot;Average temperature&amp;quot; description=&amp;quot;Monthly temperature average in NC [deg C]&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Registrar los mapas en la strds  ({{cmd|t.register}}), enlistar la strds ({{cmd|t.list}}) y obtener la información general para un conjunto de datos espacio temporales particular ({{cmd|t.info}}). Más detalles sobre diferentes opciones para registrar mapas en una strds pueden ser encontrados en la wiki particular de [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration map registration].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.register -i input=tempmean type=raster start=2000-01-01 increment=&amp;quot;1 months&amp;quot; \&lt;br /&gt;
    maps=`g.list type=raster pattern=*tempmean separator=comma` &lt;br /&gt;
&lt;br /&gt;
t.list type=strds&lt;br /&gt;
&lt;br /&gt;
t.info input=tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enlistar los mapas y revisar las estadísticas básicas del strds: {{cmd|t.rast.list}} y {{cmd|t.rast.univar}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=tempmean&lt;br /&gt;
&lt;br /&gt;
t.rast.univar input=tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Exportar fuera de GRASS: {{cmd|t.rast.export}}&lt;br /&gt;
&lt;br /&gt;
Como se dijo antes, vamos a usar DINEOF como la técnica para el rellenado de huecos (gap-filling). Este método no está disponible (aún) en GRAS GIS, así que ''necesitamos exportar la serie de tiempo de rásters'''. Para exportar solamente el subconjunto de mapas rásters, definimos la región a la región computacional predeterminada (default) de North Carolina y luego usamos  {{cmd|t.rast.export}} para exportar nuestro strds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# set default region&lt;br /&gt;
g.region -d&lt;br /&gt;
&lt;br /&gt;
t.rast.export input=tempmean output=tempmean4R.tar.gzip compression=gzip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Moviendonos a R ===&lt;br /&gt;
&lt;br /&gt;
* Desde la consola de GRASS, abra R (o rstudio)&lt;br /&gt;
&lt;br /&gt;
Note que puede abrir directamente un proyecto en el que esté trabajando (como en el ejemplo de arriba) o solo escribir '''R''' o '''rstudio''' seguido de '''&amp;amp;''' así no pierde el prompt             en la consola de GRASS. Para más detalles y ejemplos de cómo usar R o rstudio dentro de una sesión de grass, puede ver la [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7 wiki del tema]. Vea las secciones [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#R_within_GRASS R within GRASS] y [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#Using_RStudio_in_a_GRASS_GIS_session Rstudio within GRASS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rstudio $HOME/Documents/foss4g_bonn/ts_grass_r &amp;amp; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dentro de R, primero vamos a cargar el paquete ''rgrass7''. Esta librería provee la interfaz con GRASS GIS 7. Vamos a revisar alguna información básica de la sesión.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Cargar el paquete rgrass7&lt;br /&gt;
library(rgrass7)&lt;br /&gt;
&lt;br /&gt;
# Revisar el ambiente GRASS&lt;br /&gt;
genv &amp;lt;- gmeta()&lt;br /&gt;
genv&lt;br /&gt;
gisdbase    /home/veroandreo/grassdata &lt;br /&gt;
location    nc_climate_spm_2000_2012 &lt;br /&gt;
mapset      climate_1970_2012 &lt;br /&gt;
rows        104 &lt;br /&gt;
columns     139 &lt;br /&gt;
north       260500 &lt;br /&gt;
south       208500 &lt;br /&gt;
west        624500 &lt;br /&gt;
east        694000 &lt;br /&gt;
nsres       500 &lt;br /&gt;
ewres       500 &lt;br /&gt;
projection  +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75&lt;br /&gt;
+lon_0=-79 +x_0=609601.22 +y_0=0 +no_defs +a=6378137 +rf=298.257222101&lt;br /&gt;
+towgs84=0.000,0.000,0.000 +to_meter=1 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto nos da información acerca de la proyección y la región, entre otras cosas que vamos a necesitar más adelate (ver abajo).&lt;br /&gt;
&lt;br /&gt;
Dado que ni los módulos temporales de GRASS, ni los conjuntos de datos temporales de GRASS están implementados (aún) en R, cuando necesite hacer un proceso de una serie de tiempo que tenga en la GRASS DB, debe exportar todos los mapas y luego leerlos en R. Por lo tanto, necesitamos cargar el siguiente paquete también:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Load other required packages&lt;br /&gt;
library(spacetime)&lt;br /&gt;
library(raster)&lt;br /&gt;
library(rgdal)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, necesitamos '''leer el strds exportado desde GRASS en R''' con la función read.tgrass del paquete ''spacetime''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Importar strds a R&lt;br /&gt;
tempmean_in_R &amp;lt;- read.tgrass(&amp;quot;tempmean4R.tar.gzip&amp;quot;, localName = FALSE, useTempDir = FALSE)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que R importa nuestro strds como un [http://rspatial.org/spatial/rst/4-rasterdata.html#rasterstack-and-rasterbrick RasterStack]. Veamos si todo está ahi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Obtener información sobre el RasterStack&lt;br /&gt;
class(tempmean_in_R)&lt;br /&gt;
[1] &amp;quot;RasterStack&amp;quot;&lt;br /&gt;
attr(,&amp;quot;package&amp;quot;)&lt;br /&gt;
[1] &amp;quot;raster&amp;quot;&lt;br /&gt;
# Dimensiones&lt;br /&gt;
&amp;gt; dim(tempmean_in_R)&lt;br /&gt;
[1] 104 139 156&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos también pedir el resumen de capas particulares en el stack o de todo el RasterStack:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Resumen de la primer capa&lt;br /&gt;
summary(tempmean_in_R[[1]])&lt;br /&gt;
        X2000_01_tempmean&lt;br /&gt;
Min.             2.833784&lt;br /&gt;
1st Qu.          3.667942&lt;br /&gt;
Median           3.936594&lt;br /&gt;
3rd Qu.          4.132093&lt;br /&gt;
Max.             4.496206&lt;br /&gt;
NA's             0.000000&lt;br /&gt;
&lt;br /&gt;
# Resumen del RasterStack&lt;br /&gt;
summary(tempmean_in_R)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y, por supuesto, podemos graficar alguna capa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Graficar la 3er capa del stack&lt;br /&gt;
plot(tempmean_in_R,3) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Layer3.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para la mayoría de los métodos en R (por ej: Theil-Sen slope, fft, dineof) necesitamos transformar nuestro RasterStack en una matriz o data.frame En el caso particular de este ejemplo, necesitamos transformar nuestro RasterStack en una matriz ''mtx'' con ''m'' = mapas y ''t'' = tiempo, i.e.: en esta matriz tenemos nuestros mapas como filas y el tiempo como columnas. Por lo tanto, ''en cada columna tenemos una serie de tiempo para un pixel dado''. Vamos a empezar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# RasterStack a matriz (esto nos da mapas como columnas y tiempo como filas)&lt;br /&gt;
txm_tempmean &amp;lt;- as.matrix(tempmean_in_R) &lt;br /&gt;
dim(txm_tempmean)&lt;br /&gt;
[1] 14456   156&lt;br /&gt;
&lt;br /&gt;
# Transponemos la matriz (necesitamos tiempo como columnas y mapas como filas)&lt;br /&gt;
mxt_tempmean &amp;lt;- t(txm_tempmean)&lt;br /&gt;
dim(mxt_tempmean)&lt;br /&gt;
[1]   156 14456&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El punto para DINEOF es rellenar los huecos (gap-filling). Sin embargo, como uestro conjunto de datos proviene de interpolaciones de estaciones climáticas, no tenemos tales huecos...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Revisar huecos en los datos&lt;br /&gt;
sum(is.na(mxt_tempmean))&lt;br /&gt;
[1] 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Así que para propósitos de este ejemplo, vamos a crearlos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Crear huecos&lt;br /&gt;
# Conteo total de pixeles: 14456*156=2255136&lt;br /&gt;
# Valores NULL deben aparecer como NaN&lt;br /&gt;
set.seed(46)&lt;br /&gt;
n = 400000&lt;br /&gt;
mxt_tempmean[mysamples &amp;lt;- sample(length(mxt_tempmean), n)] &amp;lt;- NaN&lt;br /&gt;
sum(is.na(mxt_tempmean))&lt;br /&gt;
[1] 400000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora estamos listos para '''usar DINEOF para rellenar los datos faltantes'''. Puede encontrar más información sobre DINEOF en el [http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF sitio oficial]. Sin embargo, el paquete de R que provee DINEOF se llama ''sinkr'' y puede ser instalado desde  [https://github.com/marchtaylor/sinkr aquí].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Cargar la librería que contiene la fución dineof y otras librerías requeridas&lt;br /&gt;
library(sinkr)&lt;br /&gt;
library(irlba)&lt;br /&gt;
library(Matrix)&lt;br /&gt;
# o, descargar la función dineof desde el repositorio y ''source it'':&lt;br /&gt;
# source('dineof.r')&lt;br /&gt;
&lt;br /&gt;
# Correr el algoritmo - configuración predeterminada&lt;br /&gt;
result_tempmean &amp;lt;- dineof(mxt_tempmean) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El objeto ''result_tempmean'' es una lista con todos los resultados de dineof. Puede investigarla ud. mismo, pruebe con otra configuración y compare los resultados.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Explorar qué tiene dentro&lt;br /&gt;
names(result_tempmean)&lt;br /&gt;
[1] &amp;quot;Xa&amp;quot;    &amp;quot;n.eof&amp;quot; &amp;quot;RMS&amp;quot;   &amp;quot;NEOF&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para este ejemplo, vamos a extraer solamente la matriz espacio-temporal reconstruida y mostrarla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Extraer la matriz rellenada (gap-filled)&lt;br /&gt;
tempmean_new &amp;lt;- result_tempmean$Xa &lt;br /&gt;
&lt;br /&gt;
# Definir la paleta de colores&lt;br /&gt;
library(RColorBrewer)&lt;br /&gt;
pal &amp;lt;- colorRampPalette(c(&amp;quot;blue&amp;quot;, &amp;quot;cyan&amp;quot;, &amp;quot;yellow&amp;quot;, &amp;quot;red&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Mostrar las matrices espacio-temporales con huecos y sin huecos&lt;br /&gt;
par(mfrow = c(2,1))&lt;br /&gt;
image(mxt_tempmean, col = pal(100), main = &amp;quot;Original data with gaps&amp;quot;)&lt;br /&gt;
image(tempmean_new, col = pal(100), main = &amp;quot;Gap-filled data&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Plot gaps nogaps.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
Y queremos ver cómo la serie de tiempo de un pixel particular es reconstruida. Por lo tanto, necesitamos graficar todas las filas de una cierta columna. ¿Recuerdas cómo se formó nuestra matriz?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Graficar la serie de tiempo de un pixel particular de ambas matrices&lt;br /&gt;
pixel &amp;lt;- 10000&lt;br /&gt;
ylim &amp;lt;- range(c(mxt_tempmean[,pixel], tempmean_new[,pixel]), na.rm = TRUE)&lt;br /&gt;
plot(mxt_tempmean[,pixel], t = &amp;quot;l&amp;quot;, ylim = ylim, lwd = 2, ylab = &amp;quot;Temperature&amp;quot;, xlab = &amp;quot;Time&amp;quot;)&lt;br /&gt;
lines(tempmean_new[,pixel], col = 2, lty = 3)&lt;br /&gt;
legend(123, 13, c(&amp;quot;original&amp;quot;,&amp;quot;gap-filled&amp;quot;), lty = c(1,3), lwd = c(2,1), col = c(1,2), cex = 0.8)&lt;br /&gt;
abline(h = 0, v = 0, col = &amp;quot;gray60&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Time series.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Asumamos que estamos contentos con el resultado, necesitamos regresar a un formato strds. Vamos a reconstruir la serie de tiempo de rásters empezando con una matriz ''mxt''. Para eso, primero ''creamos rásters vacíos de las mismas dimensiones que nuestros mapas ráster originales y luego los rellenamos con cada fila de la matriz rellenada'''. Lo que obtenemos es entonces una lista de rásters. Veamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Crear objetos rásters para rellenar con los datos de tempmean_new&lt;br /&gt;
tempmean_2_grass &amp;lt;- raster(nrows = 104, ncols = 139, &lt;br /&gt;
           xmn = 624500, xmx = 694000, &lt;br /&gt;
           ymn = 208500, ymx = 260500, &lt;br /&gt;
           crs = tempmean_in_R)&lt;br /&gt;
dim(tempmean_2_grass)&lt;br /&gt;
[1] 104 139   1&lt;br /&gt;
&lt;br /&gt;
# Extraer los datos de cada fila de ''tempmean_new'' y construir una capa ráster&lt;br /&gt;
# Salida: lista de ráters&lt;br /&gt;
tempmean_new_rl &amp;lt;- lapply(1:nrow(tempmean_new), function(i) {&lt;br /&gt;
  setValues(tempmean_2_grass, tempmean_new[i,])&lt;br /&gt;
  } )&lt;br /&gt;
length(tempmean_new_rl)&lt;br /&gt;
[1] 156&lt;br /&gt;
dim(tempmean_new_rl[[3]])&lt;br /&gt;
[1] 104 139   1&lt;br /&gt;
&lt;br /&gt;
# Graficar una capa ráster de la lista&lt;br /&gt;
plot(tempmean_new_rl[[3]], main=&amp;quot;X2000_03_tempmean_new&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Tempmean new 3.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
Puede comparar con la tercer capa de los datos originales.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
plot(tempmean_in_R,3)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien, hasta ahora, tenemos una lista de rásters. Pero para exportarlos e importarlos a GRASS, necesitamos de nuevo un RasterStack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# reconstruir el RasterStack&lt;br /&gt;
tempmean_new_rs &amp;lt;- stack(tempmean_new_rl) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No solo un RasterStack, pero necesitamos especificar la dimensión temporal, i.e.: ''necesitamos añadir tiempo al RasterStack'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
time_4_new_rs &amp;lt;- seq(as.Date(&amp;quot;2001-01-01&amp;quot;), as.Date(&amp;quot;2012-12-01&amp;quot;))&lt;br /&gt;
tempmean_new_rs_and_time &amp;lt;- setZ(tempmean_new_rs, time_4_new_rs, name=&amp;quot;time&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente, '''exportamos el RasterStack a GRASS''' con la función write.tgrass del paquete ''spacetime''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
write.tgrass(tempmean_new_rs_and_time, &amp;quot;tempmean_new_from_R.tar.gzip&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. De regreso a GRASS ===&lt;br /&gt;
&lt;br /&gt;
Ahora cambiamos de nuevo a la consola de GRASS e '''importamos el strds''' con {{cmd|t.rast.import}}. Este comando creará el strds y registrará todos los mapas que hay en él.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.import input=tempmean_new_from_R.tar.gz output=tempmean_dineof base=tempmean_dineof extrdir=/tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
¡Diviertanse!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Temporal]]&lt;br /&gt;
[[Category: R]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing/GRASS_R_raster_time_series_processing&amp;diff=24734</id>
		<title>Temporal data processing/GRASS R raster time series processing</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing/GRASS_R_raster_time_series_processing&amp;diff=24734"/>
		<updated>2017-08-25T17:20:54Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GRASS-R / R-GRASS for raster time series processing == &lt;br /&gt;
&lt;br /&gt;
This little example will guide you through the steps to export a Spatio-Temporal Raster Dataset (strds) stored in GRASS, import it into R, prepare the data properly to use the Data INterpolation Empirical Orthogonal Functions algorithm  ([http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF DINEOF]) and, after running it, rebuild your raster time series, export it and import the new strds into GRASS.&lt;br /&gt;
&lt;br /&gt;
We will use North Carolina climatic data already available as a GRASS location. You can get it [http://courses.ncsu.edu/mea592/common/media/02/nc_climate_spm_2000_2012.zip here]. If not done yet, you need to unzip the file and paste into your GRASS database folder (usually named grassdata).&lt;br /&gt;
&lt;br /&gt;
Shall we start?&lt;br /&gt;
&lt;br /&gt;
=== 1. In GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
* Open GRASS in the location/mapset of interest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass70 $HOME/grassdata/nc_climate_spm_2000_2012/climate_1970_2012/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List raster maps with pattern=*tempmean&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.list type=raster pattern=*tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create a strds with mean temperature maps: {{cmd|t.create}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.create output=tempmean type=strds temporaltype=absolute \&lt;br /&gt;
    title=&amp;quot;Average temperature&amp;quot; description=&amp;quot;Monthly temperature average in NC [deg C]&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Register maps in the strds ({{cmd|t.register}}), list the strds ({{cmd|t.list}}) and obtain general information for a particular space-time dataset ({{cmd|t.info}}). More details about different options to register maps in strds can be found in the dedicated [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration map registration] wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.register -i input=tempmean type=raster start=2000-01-01 increment=&amp;quot;1 months&amp;quot; \&lt;br /&gt;
    maps=`g.list type=raster pattern=*tempmean separator=comma` &lt;br /&gt;
&lt;br /&gt;
t.list type=strds&lt;br /&gt;
&lt;br /&gt;
t.info input=tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List maps and check basic statistics of the strds: {{cmd|t.rast.list}} and {{cmd|t.rast.univar}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=tempmean&lt;br /&gt;
&lt;br /&gt;
t.rast.univar input=tempmean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Export out of GRASS: {{cmd|t.rast.export}}&lt;br /&gt;
&lt;br /&gt;
As said before, we will use DINEOF as gap-filling technique. This method is not (yet) available in GRASS GIS, so '''we need to export the raster time series'''. To export only a spatial subset of the raster maps, we set region to the default North Carolina computational region and then we use {{cmd|t.rast.export}} to export our strds. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# set default region&lt;br /&gt;
g.region -d&lt;br /&gt;
&lt;br /&gt;
t.rast.export input=tempmean output=tempmean4R.tar.gzip compression=gzip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Moving to R ===&lt;br /&gt;
&lt;br /&gt;
* From the GRASS console, open R (or rstudio)&lt;br /&gt;
&lt;br /&gt;
Note that you can directly open a project in which you were already working (as in the example above) or just type '''R''' or '''rstudio''' followed by '''&amp;amp;''' so you do not loose the command prompt in GRASS console. More details and examples of how to use R or rstudio within a GRASS session can be found in the dedicated [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7 wiki]. Look for [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#R_within_GRASS R within GRASS] and [https://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#Using_RStudio_in_a_GRASS_GIS_session Rstudio within GRASS] sections.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rstudio $HOME/Documents/foss4g_bonn/ts_grass_r &amp;amp; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once in R, we first load the ''rgrass7'' package. This library provides the interface with GRASS GIS 7. We will also check some basic information about the session.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Load rgrass7 package&lt;br /&gt;
library(rgrass7)&lt;br /&gt;
&lt;br /&gt;
# Check GRASS environment&lt;br /&gt;
genv &amp;lt;- gmeta()&lt;br /&gt;
genv&lt;br /&gt;
gisdbase    /home/veroandreo/grassdata &lt;br /&gt;
location    nc_climate_spm_2000_2012 &lt;br /&gt;
mapset      climate_1970_2012 &lt;br /&gt;
rows        104 &lt;br /&gt;
columns     139 &lt;br /&gt;
north       260500 &lt;br /&gt;
south       208500 &lt;br /&gt;
west        624500 &lt;br /&gt;
east        694000 &lt;br /&gt;
nsres       500 &lt;br /&gt;
ewres       500 &lt;br /&gt;
projection  +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75&lt;br /&gt;
+lon_0=-79 +x_0=609601.22 +y_0=0 +no_defs +a=6378137 +rf=298.257222101&lt;br /&gt;
+towgs84=0.000,0.000,0.000 +to_meter=1 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This gives us information about projection and region settings, among other things, that we will need afterwards (see below).&lt;br /&gt;
&lt;br /&gt;
Given that neither GRASS temporal modules nor GRASS space time data sets are (yet) enabled/implemented in R, when you need to process a time series that you have in GRASS DB you need to export all maps and then read them into R. Therefore, we need to load the following packages, too:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Load other required packages&lt;br /&gt;
library(spacetime)&lt;br /&gt;
library(raster)&lt;br /&gt;
library(rgdal)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, we '''read the strds exported from GRASS into R''' with the function read.tgrass from ''spacetime'' package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Import strds into R&lt;br /&gt;
tempmean_in_R &amp;lt;- read.tgrass(&amp;quot;tempmean4R.tar.gzip&amp;quot;, localName = FALSE, useTempDir = FALSE)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that R imports our exported strds as a [http://rspatial.org/spatial/rst/4-rasterdata.html#rasterstack-and-rasterbrick RasterStack]. Let us see if all is there: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Get information about the RasterStack&lt;br /&gt;
class(tempmean_in_R)&lt;br /&gt;
[1] &amp;quot;RasterStack&amp;quot;&lt;br /&gt;
attr(,&amp;quot;package&amp;quot;)&lt;br /&gt;
[1] &amp;quot;raster&amp;quot;&lt;br /&gt;
# Dimensions&lt;br /&gt;
&amp;gt; dim(tempmean_in_R)&lt;br /&gt;
[1] 104 139 156&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can also ask summaries of particular layers in the stack or of the whole RasterStack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Summary of the first layer&lt;br /&gt;
summary(tempmean_in_R[[1]])&lt;br /&gt;
        X2000_01_tempmean&lt;br /&gt;
Min.             2.833784&lt;br /&gt;
1st Qu.          3.667942&lt;br /&gt;
Median           3.936594&lt;br /&gt;
3rd Qu.          4.132093&lt;br /&gt;
Max.             4.496206&lt;br /&gt;
NA's             0.000000&lt;br /&gt;
&lt;br /&gt;
# Summary of the RasterStack&lt;br /&gt;
summary(tempmean_in_R)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, of course, we may also plot a certain layer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Plot 3rd layer in the stack&lt;br /&gt;
plot(tempmean_in_R,3) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Layer3.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For most methods in R (For example: Theil-Sen slope, fft, dineof), we will need to transform our RasterStack into a matrix or data.frame. In the particular case of this example, we need to transform our RasterStack into a matrix ''mxt'', with ''m'' = maps and ''t'' = time, i.e.: in this matrix we have our maps as rows and time in columns. Therefore, ''in each column we have the time series for a given pixel''. Let us start, then.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# RasterStack to matrix (this gives us maps as columns and time in rows)&lt;br /&gt;
txm_tempmean &amp;lt;- as.matrix(tempmean_in_R) &lt;br /&gt;
dim(txm_tempmean)&lt;br /&gt;
[1] 14456   156&lt;br /&gt;
&lt;br /&gt;
# Transpose matrix (we need time in columns and maps unfolded in rows)&lt;br /&gt;
mxt_tempmean &amp;lt;- t(txm_tempmean)&lt;br /&gt;
dim(mxt_tempmean)&lt;br /&gt;
[1]   156 14456&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All the point of DINEOF is gap-filling. However, as our sample dataset comes from interpolations of weather stations, we do not have such gaps... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Check for gaps in data&lt;br /&gt;
sum(is.na(mxt_tempmean))&lt;br /&gt;
[1] 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, for the purpose of this example, we will create them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Create some holes. &lt;br /&gt;
# Total pixel counts: 14456*156=2255136&lt;br /&gt;
# NULL values must appear as NaN&lt;br /&gt;
set.seed(46)&lt;br /&gt;
n = 400000&lt;br /&gt;
mxt_tempmean[mysamples &amp;lt;- sample(length(mxt_tempmean), n)] &amp;lt;- NaN&lt;br /&gt;
sum(is.na(mxt_tempmean))&lt;br /&gt;
[1] 400000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to '''use DINEOF to fill our gappy data'''. You can find more info about DINEOF in the [http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF official site]. However, the R package providing DINEOF is called ''sinkr'' and can be installed from [https://github.com/marchtaylor/sinkr here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Load library containing dineof function and other required libraries&lt;br /&gt;
library(sinkr)&lt;br /&gt;
library(irlba)&lt;br /&gt;
library(Matrix)&lt;br /&gt;
# or, download the dineof function from the repository and source it:&lt;br /&gt;
# source('dineof.r')&lt;br /&gt;
&lt;br /&gt;
# Run the algorithm - default settings &lt;br /&gt;
result_tempmean &amp;lt;- dineof(mxt_tempmean) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ''result_tempmean'' object is a list with all results from dineof. You may investigate yourself, try with other settings and compare results.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Explore what's inside&lt;br /&gt;
names(result_tempmean)&lt;br /&gt;
[1] &amp;quot;Xa&amp;quot;    &amp;quot;n.eof&amp;quot; &amp;quot;RMS&amp;quot;   &amp;quot;NEOF&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the purpose of this example, we will only extract the reconstructed spatio-temporal matrix and display it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Extract gap-filled matrix&lt;br /&gt;
tempmean_new &amp;lt;- result_tempmean$Xa &lt;br /&gt;
&lt;br /&gt;
# Set color palette&lt;br /&gt;
library(RColorBrewer)&lt;br /&gt;
pal &amp;lt;- colorRampPalette(c(&amp;quot;blue&amp;quot;, &amp;quot;cyan&amp;quot;, &amp;quot;yellow&amp;quot;, &amp;quot;red&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Display the gappy and gap-filled spatio-temporal matrices&lt;br /&gt;
par(mfrow = c(2,1))&lt;br /&gt;
image(mxt_tempmean, col = pal(100), main = &amp;quot;Original data with gaps&amp;quot;)&lt;br /&gt;
image(tempmean_new, col = pal(100), main = &amp;quot;Gap-filled data&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Plot gaps nogaps.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And we want to see how the time series of a particular pixel is reconstructed. Therefore, we just need to plot all the rows in a certain column. Do you remember how our matrix was formed?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Plot the time series of a single pixel from both matrices &lt;br /&gt;
pixel &amp;lt;- 10000&lt;br /&gt;
ylim &amp;lt;- range(c(mxt_tempmean[,pixel], tempmean_new[,pixel]), na.rm = TRUE)&lt;br /&gt;
plot(mxt_tempmean[,pixel], t = &amp;quot;l&amp;quot;, ylim = ylim, lwd = 2, ylab = &amp;quot;Temperature&amp;quot;, xlab = &amp;quot;Time&amp;quot;)&lt;br /&gt;
lines(tempmean_new[,pixel], col = 2, lty = 3)&lt;br /&gt;
legend(123, 13, c(&amp;quot;original&amp;quot;,&amp;quot;gap-filled&amp;quot;), lty = c(1,3), lwd = c(2,1), col = c(1,2), cex = 0.8)&lt;br /&gt;
abline(h = 0, v = 0, col = &amp;quot;gray60&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Time series.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let us assume that we are happy with the result, we need now to go back to a strds format. We need to rebuild the raster time series starting from a matrix ''mxt''. For that, we first '''create empty rasters of the same dimensions of our original raster maps and then, we fill them with each row of the gap-filled matrix'''. What we obtain then is a list of rasters. Let's see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# Create raster objects to fill with data from tempmean_new&lt;br /&gt;
tempmean_2_grass &amp;lt;- raster(nrows = 104, ncols = 139, &lt;br /&gt;
           xmn = 624500, xmx = 694000, &lt;br /&gt;
           ymn = 208500, ymx = 260500, &lt;br /&gt;
           crs = tempmean_in_R)&lt;br /&gt;
dim(tempmean_2_grass)&lt;br /&gt;
[1] 104 139   1&lt;br /&gt;
&lt;br /&gt;
# Extract data from each row of ''tempmean_new'' and build up a raster layer&lt;br /&gt;
# Output: list of rasters&lt;br /&gt;
tempmean_new_rl &amp;lt;- lapply(1:nrow(tempmean_new), function(i) {&lt;br /&gt;
  setValues(tempmean_2_grass, tempmean_new[i,])&lt;br /&gt;
  } )&lt;br /&gt;
length(tempmean_new_rl)&lt;br /&gt;
[1] 156&lt;br /&gt;
dim(tempmean_new_rl[[3]])&lt;br /&gt;
[1] 104 139   1&lt;br /&gt;
&lt;br /&gt;
# Plot a raster layer in the list&lt;br /&gt;
plot(tempmean_new_rl[[3]], main=&amp;quot;X2000_03_tempmean_new&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Tempmean new 3.png|border|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can compare with layer 3 in the original data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
plot(tempmean_in_R,3)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Well, so far we have a list of rasters. But to export them and import them back into GRASS, we need again a RasterStack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
# rebuild RasterStack&lt;br /&gt;
tempmean_new_rs &amp;lt;- stack(tempmean_new_rl) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not only a RasterStack, but we need to specify the temporal dimension, i.e.: '''we need to add time to the RasterStack'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
time_4_new_rs &amp;lt;- seq(as.Date(&amp;quot;2001-01-01&amp;quot;), as.Date(&amp;quot;2012-12-01&amp;quot;))&lt;br /&gt;
tempmean_new_rs_and_time &amp;lt;- setZ(tempmean_new_rs, time_4_new_rs, name=&amp;quot;time&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, we '''export the RasterStack to GRASS''' with the write.tgrass function from ''spacetime'' package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
write.tgrass(tempmean_new_rs_and_time, &amp;quot;tempmean_new_from_R.tar.gzip&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Back to GRASS ===&lt;br /&gt;
&lt;br /&gt;
Now, switch back to GRASS console and '''import the strds''' with {{cmd|t.rast.import}}. This command will create a strds and register all maps in it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.import input=tempmean_new_from_R.tar.gz output=tempmean_dineof base=tempmean_dineof extrdir=/tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Temporal]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Processing_lidar_and_UAV_point_clouds_in_GRASS_GIS_(workshop_at_FOSS4G_Boston_2017)/es&amp;diff=24733</id>
		<title>Processing lidar and UAV point clouds in GRASS GIS (workshop at FOSS4G Boston 2017)/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Processing_lidar_and_UAV_point_clouds_in_GRASS_GIS_(workshop_at_FOSS4G_Boston_2017)/es&amp;diff=24733"/>
		<updated>2017-08-23T21:40:14Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: spanish translation of &amp;quot;Processing lidar and UAV point clouds in GRASS GIS (workshop at FOSS4G Boston 2017)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Foss4g boston 2017 logo.png|right|none]]&lt;br /&gt;
[[File:Grassgis logo colorlogo text whitebg.png|400px|right|none]]&lt;br /&gt;
&lt;br /&gt;
Descripción: GRASS GIS ofrece, entre otras cosas una gran cantidad de herramientas analíticas para nubes de puntos, análisis de terreno y percepción remota. En este taller vamos a explorar las herramientas de GRASS GIS para procesar nubes de puntos obtenidas por lidar o procesando imágenes UAV. Vamos a empezar con una breve introducción a la interfaz gráfica (GUI) y continuaremos con una pequeña introducción a la interfaz del intérprete Python de GRASS GIS. Los participantes decidirán si usan la GUI, la línea de comandos, Python o un Jupyter Notebook para el resto del taller. Vamos a explorar las propiedades de la nube de puntos, interpolar superficies y realizar análisis de terreno avanzados para detectar artefactos y formas de terreno (landforms). Vamos a ver diferentes técnicas de visualización 2D y 3D para obtener más información de los datos y a finalizar con análisis de vegetación.&lt;br /&gt;
&lt;br /&gt;
Requisitos: Este taller es accesible a principiantes, pero se requiere algún conocimiento básico de procesamiento de lidar o SIG para que la experiencia sea más provechosa.&lt;br /&gt;
&lt;br /&gt;
Autores: [[User:Wenzeslaus|Vaclav Petras]], [[User:Annakrat|Anna Petrasova]], y Helena Mitasova de la North Carolina State University&lt;br /&gt;
&lt;br /&gt;
Contribuyentes: Robert S. Dzur y Doug Newcomb&lt;br /&gt;
&lt;br /&gt;
== Preparaciónn ==&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
&lt;br /&gt;
GRASS GIS 7.2 compilado con libLAS (ej. debe funcionar {{cmd|r.in.lidar}}).&lt;br /&gt;
&lt;br /&gt;
'''OSGeo-Live'''&lt;br /&gt;
&lt;br /&gt;
Todo el software está incluido en [http://live.osgeo.org/ OSGeo-Live].&lt;br /&gt;
&lt;br /&gt;
''' Ubuntu '''&lt;br /&gt;
&lt;br /&gt;
Instalar GRASS GIS desde los paquetes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Linux '''&lt;br /&gt;
&lt;br /&gt;
Para otras distribuciones de Linux, por favor intente encontrando GRASS GIS en su administrador de paquetes.&lt;br /&gt;
&lt;br /&gt;
'''MS Windows'''&lt;br /&gt;
&lt;br /&gt;
Descargue los binarios de GRASS GIS desde [https://grass.osgeo.org/ grass.osgeo.org].&lt;br /&gt;
&lt;br /&gt;
'''Mac OS'''&lt;br /&gt;
&lt;br /&gt;
Instale GRASS GIS usando [https://brew.sh/ Homebrew] [https://github.com/OSGeo/homebrew-osgeo4mac osgeo4mac]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew tap osgeo/osgeo4mac&lt;br /&gt;
brew install numpy&lt;br /&gt;
brew install liblas --build-from-source&lt;br /&gt;
brew install grass7 --with-liblas&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si ya los tiene instalado, debe usar &amp;lt;code&amp;gt;reinstall&amp;lt;/code&amp;gt; en vez de &amp;lt;code&amp;gt;install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note que en algunas versiones de Mac OS el módulo {{cmd|r.in.lidar}} no es accesable, así que tiene que revisar esto y usar {{cmd|r.in.ascii}} en combinación con las herramientas de la línea de comandos libLAS y PDAL para lograr lo mismo, o de manera preferente, use OSGeo-Live.&lt;br /&gt;
&lt;br /&gt;
Note que actualmente no hay ninguna versión reciente para Mac OS donde sirva la vista 3D.e&lt;br /&gt;
&lt;br /&gt;
=== Extensiones (Addons) ===&lt;br /&gt;
&lt;br /&gt;
Debe instalar las siguientes extensiones de GRASS GIS. Esto lo puede hacer a través de la GUI, pero por simplicidad copie, pegue y ejecute las siguientes líneas de comando una por una en la línea de comandos:&lt;br /&gt;
&lt;br /&gt;
 g.extension r.geomorphon&lt;br /&gt;
 g.extension r.skyview&lt;br /&gt;
 g.extension r.local.relief&lt;br /&gt;
 g.extension r.shaded.pca&lt;br /&gt;
 g.extension r.area&lt;br /&gt;
 g.extension r.terrain.texture&lt;br /&gt;
 g.extension r.fill.gaps&lt;br /&gt;
&lt;br /&gt;
Para tareas extra:&lt;br /&gt;
&lt;br /&gt;
 g.extension v.lidar.mcc&lt;br /&gt;
&lt;br /&gt;
=== Datos ===&lt;br /&gt;
&lt;br /&gt;
Va a necesitar los siguientes archivos ZIP, descarguelos y extraigalos:&lt;br /&gt;
&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/foss4g2017/nc_orthophoto_1m_spm.zip ortofoto]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/foss4g2017/nc_tile_0793_016_spm.zip nube de puntos]&lt;br /&gt;
&lt;br /&gt;
Para la tarea extra, descargue también este archivo (mucho más grande):&lt;br /&gt;
&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/foss4g2017/nc_uav_points_spm.zip UAV point cloud]&lt;br /&gt;
&lt;br /&gt;
== Basic introduction to graphical user interface ==&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS Spatial Database ===&lt;br /&gt;
&lt;br /&gt;
Aquí vamos a dar una breve introducción a [https://grass.osgeo.org GRASS GIS]. Para este ejercicio no es necesario tener una comprensión completa de cómo usar GRASS GIS. Sin embargo, va a necesitar saber colocar sus datos correctamente en un directorio de bases de datos de GRASS GIS, así como algunas funcionalidades básicas de GRASS.&lt;br /&gt;
&lt;br /&gt;
GRASS usa una terminología y estructura de bases de datos específica ([https://grass.osgeo.org/grass72/manuals/grass_database.html GRASS GIS Spatial Database]) que es importante entender para trabajar con GRASS GIS de manera efectiva. Necesita crear una nueva ''Localización'' e importar los datos requeridos a esta Localización. En lo que sigue vamos a revisar la terminología importante y dar direcciones paso a paso de cómo descargar y colocar sus datos en el lugar correcto.&lt;br /&gt;
&lt;br /&gt;
* Una '''Base de datos espacial GRASS GIS''' (''base de datos GRASS'') consiste de un directorio con Localizaciones específicas (proyectos) donde los datos (capas/mapas) son almacenados.&lt;br /&gt;
* Una '''Localización''' es un directorio de datos relacionados a una ubicación geográfica y a un proyecto. Todos los datos dentro de una Localización tienen el mismo sistema de coordenadas de referencia.&lt;br /&gt;
* Un '''Directorio de mapas (Mapset)''' es una colección de mapas dentro de una Localización, contiene datos relacionados a una tarea específica, usuario o proyecto menor.&lt;br /&gt;
&lt;br /&gt;
Inicie GRASS GIS, debe aparecer una pantalla de inicio.&lt;br /&gt;
A menos que ya tenga un directorio llamado &amp;lt;tt&amp;gt;grassdata&amp;lt;/tt&amp;gt; en su directorio de &amp;lt;tt&amp;gt;Documentos&amp;lt;/tt&amp;gt; (en MS Windows) o en su directorio home (en Linux), cree uno. Puede usar el botón de Explorar y el cuadro de diálogo en la pantalla de inicio de GRASS GIS para hacer eso.&lt;br /&gt;
&lt;br /&gt;
Va a crear una nueva ''Localización'' de su proyecto con el CRS (sistema de coordenadas de referencia) NC State Plane Meters cuyo código  EPSG es 3358.&lt;br /&gt;
Abra el Ayudante de localizaciones con el botón ''Nuevo'' en la parte izquierda de la pantalla de bienvenida. Seleccione el nombre de la nueva Localización, seleccione el método EPSG y el código 3358.&lt;br /&gt;
&lt;br /&gt;
Cuando el Ayudante haya finalizado, la nueva localización aparecerá enlistada en la pantalla de inicio. Seleccione la nueva localización y el directorio de mapas PERMANENT y presione ''Iniciar sesión de GRASS''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
Image:Grass database.png|Estructura de la base de datos espacial de GRASS GIS &lt;br /&gt;
Image:GRASS_startup_ncspm.png|Cuadro de diálogo de inicio de GRASS GIS 7.2&lt;br /&gt;
Image:location_wizard_define.png|Iniciar el Ayudante de Localizaciones e ingrese el nombre de la nueva Localización&lt;br /&gt;
Image:Location_wizard_method_7.2.png|Seleccionar método para describir el CRS&lt;br /&gt;
Image:Location_wizard_EPSG3358_7.2.png|Encontrar y seleccionar EPSG 3358&lt;br /&gt;
Image:Location wizard epsg datum transformation.png|Confirmar el uso de la transformación de datum predeterminada&lt;br /&gt;
Image:location_wizard_summary_7.2.1.png|Revisar página de resumen y conrfirmar&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que el directorio de trabajo actual es un concepto que es independiente de la base de datos GRASS, la Localización y el Directorio de mapas discutidos más arriba. El directorio de trabajo actual es el directorio en el cual cualquier programa (no solo GRASS GIS) escribe y lee archivos a menos que se le de una ruta para el archivo. El directorio de trabajo actual puede ser modificado desde la GUI usando ''Configuraciones → Entorno de trabajo de GRASS → Cambiar entorno de trabajo'' o desde la consola usando el comando &amp;lt;tt&amp;gt;cd&amp;lt;/tt&amp;gt;. Esto es ventajoso cuando se está usando la línea de comandos y trabajando con el mismo archivo muchas veces, lo cuál suele suceder cuando se trabaja con datos lidar. Podemos cambiar el directorio al directorio en el cual se descargó el archivo LAS. En caso de que no cambiemos el directorio, podemos proveer la ruta completa al archivo. Note que la línea de comandos y la GUI tienen cada una su propia configuración del directorio de trabajo, así que se deben cambiar de manera independiente.&lt;br /&gt;
&lt;br /&gt;
=== Importando los datos ===&lt;br /&gt;
&lt;br /&gt;
En este paso vamos a importra los datos a GRASS GIS. En el mení ''Archivo - Importar datos ráster'' seleccione ''Formatos comunes para importación'' y en el cuadro de diálogo explore para encontrar el archivo con la ortofoto, cambie el nombre a &amp;lt;tt&amp;gt;ortho.tif&amp;lt;/tt&amp;gt;, y de click en el botón ''Importar''. Todas las capas importadas deben ser añadidas a la GUI automáticamente, si no es así, añádalas manualmente. Las nubes de puntos será importadas más tarde de una manera diferente como parte del análisis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=300&amp;gt;&lt;br /&gt;
Image:Import_raster_7.2.1.png|Importar datos ráster: seleccione el archivo con la ortofoto y cambie el nombre a ortho&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando equivalente es:&lt;br /&gt;
&lt;br /&gt;
 r.import input=nc_orthophoto_1m_spm.tif output=ortho&lt;br /&gt;
&lt;br /&gt;
=== Región computacional ===&lt;br /&gt;
&lt;br /&gt;
Antes de usar el módulo para calcular un nuevo mapa ráster, debemos definir adecuadamente la región  computacional. Todos los cálculos con ráster deben ser realizados en una extensión especificada y con una resolución determinada.&lt;br /&gt;
&lt;br /&gt;
La región computacional es un concepto importante en GRASS GIS. En GRASS una región computacional puede ser definida para realizar cálculos en áreas pequeñas o subregiones para probar el análisis o analizar regiones específicas, como por ej. unidades administrativas. Vamos a dar algunos puntos para mantener en mente cuando use la función de la región computacional.&lt;br /&gt;
* definida por la extensión y resolución ráster&lt;br /&gt;
* aplica a todas las operaciones ráster&lt;br /&gt;
* persiste entre sesiones de GRASS, puede ser diferente para distintos Directorios de mapas&lt;br /&gt;
* ventajas: mantiene consistencia en resultados, evita el recorte, para cálculos computacionalmente demantantes se puede definir una región de extensión menor y revisar si el resultado es correcto para luego realizar en toda la región o área de estudio.&lt;br /&gt;
* corra &amp;lt;code&amp;gt;g.region -p&amp;lt;/code&amp;gt; o en el menú ''Configuraciones'' - ''Región'' - ''Mostrar región'' para ver la configuración actual de la región&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Computational_region_two_rasters.png| Concepto de región computacional: un ráster con una extensión grade (azul) se muestra junto con otro más pequeño (verde). La región computacional (rojo) se define para que sea igual al ráster pequeño, así los cálculos estarán limitados a la región que ocupa el ráster menor aún cuando la entrada sea el ráster mayor. (No se muestra en la imagen: también la resolución, no solo la extensión, es igual a la resolución del ráster menor.) &lt;br /&gt;
&lt;br /&gt;
Image:WxGUI set region.png|Modos sencillos para definir la región computacional desde la GUI. A la izquierda, definir la región para que sea igual a un mapa ráster. A la derecha, seleccionar la opción señalada y luego defina la región dibujando un rectángulo. &lt;br /&gt;
&lt;br /&gt;
Image:Wxgui_computational_region_set_from_raster.png|Definir la región computacional (extensión y resolución) para que sea igual a un ráster (pestaña de Capas en el Administrador de capas) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los valores numéricos de la región computacional pueden ser revisados usando:&lt;br /&gt;
&lt;br /&gt;
 g.region -p&lt;br /&gt;
&lt;br /&gt;
Luego de ejecutar el comando, obtendrá algo como esto:&lt;br /&gt;
&lt;br /&gt;
 norte:      220750&lt;br /&gt;
 sur:      220000&lt;br /&gt;
 oeste:       638300&lt;br /&gt;
 este:       639000&lt;br /&gt;
 nsres:      1&lt;br /&gt;
 eores:      1&lt;br /&gt;
 rows:       750&lt;br /&gt;
 columnas:       700&lt;br /&gt;
 celdas:      525000&lt;br /&gt;
&lt;br /&gt;
La región computacional puede ser definida usando un mapa ráster:&lt;br /&gt;
&lt;br /&gt;
 g.region raster=ortho -p&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La resolución se puede definir de manera separada usando el parámetro &amp;lt;code&amp;gt;res&amp;lt;/code&amp;gt; del módulo {{cmd|g.region}}. Las unidades son las mismas de la Localización actual, en nuestro caso metros. Esto se puede hacer en la pestaña ''Resolución'' del díalogo de {{cmd|g.region}} o en la línea de comandos del siguiente modo (usando también la bandera &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; para mostrar los nuevos valores:&lt;br /&gt;
&lt;br /&gt;
 g.region res=3 -p&lt;br /&gt;
&lt;br /&gt;
La nueva resolución puede modificarse ligeramente en este caso para ajustar a la región, que no estamos cambiando. Sin embargo, a menudo queremos que la resolución sea igual a los valores que proveemos y estamos de acuerdo con una pequeña modificación a la extensión. Para eso está la bandera &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;. De otro modo, si es importante alinear las celdas con un ráster específico, el parámetro &amp;lt;code&amp;gt;align&amp;lt;/code&amp;gt; puede ser usado para alinear con el ráster (sin importar su extensión).&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo va a usar la extensión del ráster llamado &amp;lt;code&amp;gt;ortho&amp;lt;/code&amp;gt;, usando una resolución de &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; metros, modifica la extensión para alinearlo a la resolución de 5 m y muestra los valores de la configuración de la región computacional:&lt;br /&gt;
&lt;br /&gt;
 g.region raster=ortho res=5 -a -p&lt;br /&gt;
&lt;br /&gt;
=== Módulos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La funcionalidad de GRASS está disponible a través de ''módulos'' (herramientas, funciones). Existe en GRASS una convención de nombrar a los módulos de acuerdo a su función, de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Prefijo !! Función !! Ejemplo&lt;br /&gt;
|-&lt;br /&gt;
| r.* || procesamiento ráster || ''{{cmd|r.mapcalc}}'': álgebra de mapas&lt;br /&gt;
|-&lt;br /&gt;
| v.* || procesamiento vectorial  || ''{{cmd|v.surf.rst}}'': interpolación de superfícies&lt;br /&gt;
|-&lt;br /&gt;
| i.* || procesamiento de imágenes  || ''{{cmd|i.segment}}'': segmentación de imágenes&lt;br /&gt;
|-&lt;br /&gt;
| r3.* || procesamiento ráster 3D   || ''{{cmd|r3.stats}}'': estadísticas de ráster 3D&lt;br /&gt;
|-&lt;br /&gt;
| t.* || procesamiento de datos temporales  || ''{{cmd|t.rast.aggregate}}'': agregación temporal&lt;br /&gt;
|-&lt;br /&gt;
| g.* || administración general de datos || ''{{cmd|g.remove}}'': remueve mapas&lt;br /&gt;
|-&lt;br /&gt;
| d.* || pantalla ||''{{cmd|d.rast}}'': mostrar mapa ráster&lt;br /&gt;
|}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos son los grupos de módulos principales. Hay algunos otros que son específicos. Note también que algunos módulos tienen varios puntos dentro del nombre. Esto sugiere otro agrupamiento. Por ejemplo, los módulos que inician con ''v.net.'' tienen que ver con análisis de redes vectoriales. El nombre del módulo ayuda a entender su función, por ejemplo ''v.in.lidar'' inicia con ''v'' así que tiene que ver con mapas vectoriales, el nombre continúa con ''in'' lo que indica que el módulo es para importar datos a la Base de datos espacial de GRASS GIS y finalmente ''lidar'' indica que tiene que ver con nubes de puntos lidar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=4 widths=300 heights=190&amp;gt;&lt;br /&gt;
Image:R_in_lidar_dialog.png|Diálogo del comando r.in.lidar con la pestaña de Salida activa y señalado el nombre del módulo (azul), las opciones y banderas (rojo) y la opción de valores (verde)&lt;br /&gt;
Image:Example r.in.lidar command in Bash.png|Ejemplo del comando r.in.lidar en la Bash señalado el nombre del módulo (azul), opciones y banderas (rojo) y opciones de valores (verde)&lt;br /&gt;
Image:Example r.in.lidar command in Python.png|Ejemplo del comando r.in.lidar en Python señalado el nombre del módulo (azul), opciones y banderas (rojo) y opciones de valores (verde) y el comando import (gris)&lt;br /&gt;
Image:Graphical Modeler with r.in.lidar and terrain analysis.png|''Modelador gráfico'' de GRASS GIS&lt;br /&gt;
Image:wxGUI_console_completion.png|Pestaña de ''Consola'' en el ''Administrador de capas'' para correr comandos y abrir diálogos de módulos&lt;br /&gt;
Image:Grass gis cli ubuntu purple r.in.lidar.png|Interfaz de línea de comandos en un sistema de terminal&lt;br /&gt;
Image:Wxgui_module_parameters_r_neighbors.png|Muestra de un diálogo de un módulo&lt;br /&gt;
Image:wxGUI_module_search.png|Buscar un módulo en la pestaña de ''Módulos''&lt;br /&gt;
Image:G search modules with c flag.png|Buscar un módulo usando una búsqueda avanzada con {{cmd|g.search.modules}}&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una de las ventajas d eGRASS es la diversidad y cantidad de módulos que le permiten analizar los diferentes aspectos espaciales y temporales. GRASS GIS tiene más de  [https://grass.osgeo.org/grass72/manuals/full_index.html 500 módulos distintos] en la distribución núcleo y más de  [https://grass.osgeo.org/grass72/manuals/addons/ 300 módulos de extensión (addon)] que pueden ser usados para preparar y analizar  datos. La siguiente tabla enlista algunos de los principales módulos para análisis de nubes de puntos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Módulo !! Función !! Alternativas&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|r.in.lidar}} || binning into 2D raster, estadísticas || {{cmd|r.in.xyz}}, {{cmd|v.vect.stats}}, {{addonCmd|r.vect.stats}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|v.in.lidar}} || importar, decimar || {{cmd|v.in.ascii}}, {{cmd|v.in.ogr}}, {{cmd|v.import}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|r3.in.lidar}} || binning into 3D raster || {{cmd|r3.in.xyz}}, {{cmd|r.in.lidar}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|v.out.lidar}} || exporta nubes de puntos || {{cmd|v.out.ascii}}, {{cmd|r.out.xyz}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|v.surf.rst}} || interpola superficies a partir de puntos || {{cmd|v.surf.bspline}}, {{cmd|v.surf.idw}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|v.lidar.edgedetection}} || detección de bordes (ground and object) || {{addonCmd|v.lidar.mcc}}, {{cmd|v.outlier}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|v.decimate}} || decimar (adelgazar, thin) una nube de puntos || {{cmd|v.in.lidar}}, {{cmd|r.in.lidar}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|r.slope.aspect}} || parámetros topográficos || {{cmd|v.surf.rst}}, {{cmd|r.param.scale}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|r.relief}} || cálculo de relieve sombreado || {{addonCmd|r.skyview}}, {{addonCmd|r.local.relief}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|r.colors}} || administrador de tabla de colores de ráster || {{addonCmd|r.cpt2grass}}, {{addonCmd|r.colors.matplotlib}}&lt;br /&gt;
|-&lt;br /&gt;
| {{cmd|g.region}} || administrador de resolución y extensión || {{cmd|r.in.lidar}}, GUI&lt;br /&gt;
|}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los módulos y su descripción con ejemplos pueden ser encontrados en la documentación. La documentación es incluida en la instalación local y también disponible online.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=4 widths=300 heights=190&amp;gt;&lt;br /&gt;
Image:Manual pages online keywords 7.2.png|Lista de palabras clave (claves, tags) en la documantación online&lt;br /&gt;
Image:R slope aspect 3 manual.png|Página de manual de un módulo disponible también desde el diálogo del módulo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introducción básica a la interfaz de Python ==&lt;br /&gt;
&lt;br /&gt;
La manera más sencilla de ejecutar el código de Python que usa los paquetes de GRASS GIS es usar el ''Editor simple de Python'' integrado a GRASS GIS (accesible desde la barra de herramientas o la pestaña Python en el ''Administrador de capas''). Otra opción es usar su editor de texto favorito y luego correr el script de GRASS GIS usando el menú principal ''Archivo → Lanzar script''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Simple python editor v buffer.png|''Editor simple de Python'' integrado en GRASS GIS&lt;br /&gt;
Image:GRASS GUI Python shell.png|Pestaña ''Python'' con una interfaz interactiva de consola de Python&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a usar el ''Editor simple de Python'' para correr los comandos. Puede abrirlo desde la pestaña ''Python''.&lt;br /&gt;
Cuando abra el Editor Simple de Python, verá un corto código.&lt;br /&gt;
Empieza importando la librería GRASS GIS Python Scripting Library:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la función principal llamamos {{cmd|g.region}} para ver la configuración actual de la región computacional:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('g.region', flags='p')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que la sintáxis es similar a la de la línea de comandos (&amp;lt;code&amp;gt;g.region -p&amp;lt;/code&amp;gt;), solo que la bandera se especifica como un parámetro. Ahora podemos correr el script presionando el botón Correr en la barra de herramientas. En el administrador de capas obtenemos la salida de g.region.&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, definimos la extensión y resolución a la capa ráster &amp;lt;tt&amp;gt;ortho&amp;lt;/tt&amp;gt;, esto se hará usando &amp;lt;code&amp;gt;g.region raster=ortho&amp;lt;/code&amp;gt; en la línea de comandos.&lt;br /&gt;
Para usar el &amp;lt;code&amp;gt;run_command&amp;lt;/code&amp;gt; para definir la región computacional, reemplace el comando previo  {{cmd|g.region}} con la siguiente línea:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('g.region', raster='ortho')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La librería GRASS GIS Python Scripting Library provee funciones para llamar módulos de GRASS dentro de scripts de Python como subprocesos. Todas las funciones están en un paquete llamado grass y las funciones más comunes están en el paquete grass.script que es comúnmente importado &amp;lt;code&amp;gt;import grass.script as gscript&amp;lt;/code&amp;gt;. Las funciones más frecuentemente usadas incluyen:&lt;br /&gt;
* {{pyapi|script|script.core|run_command}}: usada para módulos cuya salida es un vectorial o ráster y no se espera salida de texto&lt;br /&gt;
* {{pyapi|script|script.core|read_command}}: usada cuando interesa la salida de texto, que se obtiene como un texto de Python (string, cadena)&lt;br /&gt;
* {{pyapi|script|script.core|parse_command}}: usada con módulos que producen texto como pares clave=valor y que son procesados automáticamente como diccionarios de Python&lt;br /&gt;
* {{pyapi|script|script.core|write_command}}: para módulos que esperan ingreso de texto, ya sea de un archivo o de la entrada estándar&lt;br /&gt;
&lt;br /&gt;
Ahora usamos &amp;lt;code&amp;gt;parse_command&amp;lt;/code&amp;gt; para obtener las estadísticas como un diccionario Python&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
region = gscript.parse_command('g.region', flags='g')&lt;br /&gt;
print region['ewres'], region['nsres']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los resultados mostrados son las resoluciones en la dirección E-O y N-S.&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, llamamos el módulo {{cmd|g.region}}. Típicamente, los scripts (y los módulos GRASS GIS) no cambian la región computacional y generalmente no necesitan ni leerla. La región computacional puede ser definida antes de correr el script así el script puede ser usado con diferentes parámetros de la región.&lt;br /&gt;
&lt;br /&gt;
La librería también provee muchas funciones wrapper para los módulos que se usan con frecuencia como por ejemplo: {{pyapi|script|script.raster|raster_info}} (wrapper para {{cmd|r.info}}), {{pyapi|script|script.core|list_grouped}} (una de las wrappers para {{cmd|g.list}}), y {{pyapi|script|script.core|region}} (wrapper para {{cmd|g.region}}).&lt;br /&gt;
&lt;br /&gt;
Cuando queremos correr el script de nuevo, necesitamos ya sea remover o crear datos de antemano usando {{cmd|g.remove}} o necesitamos decir a GRASS GIS que sobreescriba los datos existentes. Esto se puede hacer añadiendo &amp;lt;code&amp;gt;overwrite=True&amp;lt;/code&amp;gt; como un argumento adicional a la función para cada módulo o podemos hacerlo de manera global usando &amp;lt;code&amp;gt;os.environ['GRASS_OVERWRITE'] = '1'&amp;lt;/code&amp;gt; (requiere ejecutar previamente: &amp;lt;code&amp;gt;import os&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Finalmente, puede haber notado que la primer línea del script dice &amp;lt;code&amp;gt;#!/usr/bin/env python&amp;lt;/code&amp;gt;. Esto es lo que Linux, Mac OS y otros sistemas similares usan para determinar el intérprete a usar. Si obtiene algo como &amp;lt;code&amp;gt;[Errno 8] Exec format error&amp;lt;/code&amp;gt;, esta línea probablemente esté incorrecta o faltante.&lt;br /&gt;
&lt;br /&gt;
== Decidir si usar la GUI, la línea de comandos, Python o el Jupyter Notebook ==&lt;br /&gt;
&lt;br /&gt;
* GUI: se puede combinar con la línea de comandos (recomendado, especialmente para principiantes, combinar con copiar y pegar a la consola)&lt;br /&gt;
* línea de comandos: puede ser combinado con la GUI, la mayoría de las instrucciones siguientes serán para la línea de comando (pero puede ser fácilmente transferidas a la GUI o a Python), tanto la línea de comandos como la pestaña de Consola en la GUI funcionan bien.&lt;br /&gt;
* Python: necesita cambiar la sintáxis a Python; use fragmentos de este notebook estático [https://github.com/wenzeslaus/Notebook-for-processing-point-clouds-in-GRASS-GIS/blob/master/notebooks/workshop_python.ipynb notebook]&lt;br /&gt;
* Jupyter Notebook localmente: es recomendado solamente si está usando OSGeoLive o si está en Linux o está familiarizado con Jupyter desde GRASS GIS; descargue el notebook desde [https://raw.githubusercontent.com/wenzeslaus/Notebook-for-processing-point-clouds-in-GRASS-GIS/master/notebooks/workshop_python.ipynb github.com/wenzeslaus/Notebook-for-processing-point-clouds-in-GRASS-GIS]&lt;br /&gt;
* Jupyter Notebook online: link distribuido por el instructor (opción de respaldo si otras fallan)&lt;br /&gt;
&lt;br /&gt;
== Binning de una nube de puntos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
image:Binning and decimation workflow schema for point clouds.png|La nube de puntos es o almacenada (binned) en un ráster (ej. {{cmd|r.in.lidar}}) y luego analizada como ráster u opcionalmente decimada {{cmd|v.in.lidar}}), convertida a un vectorial (usando  {{cmd|v.in.lidar}}) y luego interpolada (ej. {{cmd|v.surf.rst}}). Datos en gris, procesos en amarillo.&lt;br /&gt;
Image:Binning count explanation.png|En el caso básico, el almacenado de los puntos en un ráster 2D consiste en contar el número de puntos que cae en cada celda. El valore resultante es la cantidad de puntos por celda.&lt;br /&gt;
Image:Binning mean explanation.png|En general el almacenado (binning) involucra también los valores asociados con los puntos y el cálculo de estadísticos de esos valores. Aquí la media de la coordenada Z de los puntos de cada celda es calculado y guardado en el ráster. La celda sin puntos son NULL (NoData, Sin datos), se muestra en color blanco.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El modo más rápido de analizar las propiedades básicas de una nube de puntos es usar el almacenado (binning) y crear un mapa ráster. Vamos ahora a usar {{cmd|r.in.lidar}} para crear un ráster de conteo de putos (densidad de puntos). En este momento, no conocemos la extensión espacial de la nube de puntos, así que no podemos definir la región computacional, pero podemos decir al módulo {{cmd|r.in.lidar}} que determine la extensión primero y usarla para la salida usando la bandera &amp;lt;code&amp;gt;-e&amp;lt;/code&amp;gt;. Estamos usando una resolución de grano grueso para maximizar la velocidad del proceso. Adicionalmente, la bandera &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; define la región computacional para igualarla a la salida.&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=count_10 method=n -e -n resolution=10&lt;br /&gt;
&lt;br /&gt;
Ahora podemos ver el patrón de distribución, pero examinemos también los números (en la GUI usando el botón derecho en el ''Administrador de capas'' y luego Metadatos o usando {{cmd|r.info}} directamente:&lt;br /&gt;
&lt;br /&gt;
 r.info map=count_10&lt;br /&gt;
&lt;br /&gt;
Vamos a revisar rápidamente algunos de los valores usando la herramienta de consulta en el ''Visualizador de mapas''.&lt;br /&gt;
Dado que hay muchos puntos por celda, podemos hacer la resolución más fina:&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=count_1 method=n -e -n resolution=1&lt;br /&gt;
&lt;br /&gt;
Vea la distribución de valores usando un histograma. Se accede al histograma desde el menú de contexto de la capa en el ''Administrador de capas'', o desde la barra de herramientas del ''Visualizador de mapas'' con el botón ''Analizar mapa'' o usado el módulo {{cmd|d.histogram}} (&amp;lt;code&amp;gt;d.histogram map=count_1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
Image:Lidar point density with coarse resolution and ortho in the background.png|Conteo de puntos por celda usando {{cmd|r.in.lidar}} con celdas de 10 m (&amp;lt;code&amp;gt;resolution=10&amp;lt;/code&amp;gt;) y bandera &amp;lt;code&amp;gt;-e&amp;lt;/code&amp;gt; &lt;br /&gt;
Image:GRASS GIS Histogramming Tool d.histogram - count of point.png|Herramienta de Histograma de GRASS GIS (basada en  {{cmd|d.histogram}})&lt;br /&gt;
Image:GRASS GIS Histogramming Tool wxPython - count of point.png|Herramienta de Histograma GRASS GIS (basada en wxPython)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos el número apropiado de puntos en la mayoría de las celdas y no hay artefactos de densidades alrededor de los bordes, así que podemos usar este ráster como base para la extensión y resolución que vamos a usar a partir de ahora.&lt;br /&gt;
&lt;br /&gt;
 g.region raster=count_1 -p&lt;br /&gt;
&lt;br /&gt;
Sin embargo, la región tiene muchas celdas y algunas estarán vacías, especialmente cuando empecemos a filtrar la nube de puntos. Para tomar en cuenta esto, podemos modificar la resolución de la región computacional:&lt;br /&gt;
&lt;br /&gt;
 g.region res=3 -ap&lt;br /&gt;
&lt;br /&gt;
Use el almacenado (binning) para obtener el modelo digital de superficie (DSM) (resolución y extesión tomados de la región computacional):&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=binned_dsm method=max&lt;br /&gt;
&lt;br /&gt;
Para entender qué muestra el mapa, calcule los estadísticos usando {{cmd|r.report}} (''Reportar estadísticas de ráster'' en el menú de contexto de la capa):&lt;br /&gt;
&lt;br /&gt;
 r.report map=binned_dsm units=c&lt;br /&gt;
&lt;br /&gt;
Esto muestra que hay un dato discrepante (outlier) (alrededor de 600 m). Cambie el color de la tabla a un histograma ecualizado (bandera &amp;lt;code&amp;gt;-e&amp;lt;/code&amp;gt;) para ver el contraste con el resto del mapa (usando la tabla de color &amp;lt;code&amp;gt;viridis&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
 r.colors map=binned_dsm color=elevation -e&lt;br /&gt;
&lt;br /&gt;
Vamos a revisar los datos discrepantes también usando el mínimo (que es &amp;lt;code&amp;gt;method=min&amp;lt;/code&amp;gt;, ya usamos &amp;lt;code&amp;gt;method=max&amp;lt;/code&amp;gt; para el DSM):&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=minimum method=min&lt;br /&gt;
&lt;br /&gt;
Compare esto con el rango y la media de los valores en el ráster de suelo y decida cual es el rango permisible.&lt;br /&gt;
&lt;br /&gt;
 r.report map=minimum units=c&lt;br /&gt;
&lt;br /&gt;
De nuevo, para ver los datos, podemos usar un histograma con una tabla de color ecualizada:&lt;br /&gt;
&lt;br /&gt;
 r.colors map=minimum color=elevation -e&lt;br /&gt;
&lt;br /&gt;
[[File:R in lidar explanation of zrange option.png|300px|thumb|right|El parámetro &amp;lt;code&amp;gt;zrange&amp;lt;/code&amp;gt; filtra los puntos que no caen en el rango de valores Z especificados]]&lt;br /&gt;
&lt;br /&gt;
Ahora cuando sabemos cuales datos son discrepantes y cual es el rango de valores esperados (60-200 m parece ser un rango seguro pero amplio), use el parámetro &amp;lt;code&amp;gt;zrange&amp;lt;/code&amp;gt; para filtrar cualquier posible punto discrepante (no confundir con el parámetro &amp;lt;code&amp;gt;intensity_range&amp;lt;/code&amp;gt;) cuando se calcule un nuevo DSM:&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=binned_dsm_limited method=max zrange=60,200&lt;br /&gt;
&lt;br /&gt;
== Interpolación ==&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a interporlar un modelo digital de superficie (DSM) y para eso podemos incrementar la resolución para obtener tanto detalle como sea posible (podemos usar 0.5m, i.e. &amp;lt;code&amp;gt;res=0.5&amp;lt;/code&amp;gt;, para mayor detalle o 2 m, i.e. &amp;lt;code&amp;gt;res=2m -a&amp;lt;/code&amp;gt;, para mayor velocidad):&lt;br /&gt;
&lt;br /&gt;
 g.region raster=count_1 -p&lt;br /&gt;
&lt;br /&gt;
Antes de interpolar, vamos a confirmar que la distribución espacial de los puntos permita interpolar de manera segura. Necesitamos usar el mismo filtro que vamos a usar para el DSM:&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=count_dsm method=n return_filter=first zrange=60,200&lt;br /&gt;
&lt;br /&gt;
Primero revisamos los números:&lt;br /&gt;
&lt;br /&gt;
 r.report map=count_dsm units=h,c,p&lt;br /&gt;
&lt;br /&gt;
Luego revisamos la distribución espacial. Para eso necesitamos usar el histograma con tabla de color ecualizada (la leyenda puede ser limitada solo a un rango específico de valores &amp;lt;code&amp;gt;d.legend raster=count_interpolation range=0,5&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 r.colors map=count_dsm color=viridis -e&lt;br /&gt;
&lt;br /&gt;
Primero importamos el archivo LAS como puntos vectoriales, vamos a mantener solamente los primeros puntos de retorno y limitar la importación verticalmete para evitar usar los puntos discrepantes encontrados en los pasos previos. Antes de correrlo, deseleccionamos ''Añadir mapa(s) creados al árbol de capas'' en el diálogo de {{cmd|v.in.lidar}} si está usando la GUI.&lt;br /&gt;
&lt;br /&gt;
 v.in.lidar -bt input=nc_tile_0793_016_spm.las output=first_returns return_filter=first zrange=60,200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
Image:v.in.lidar dialog do not add into layer tree.png|Opción ''Añadir mapa(s) creados al árbol de capas'' deseleccionada, en el diálogo de in v.in.lidar&lt;br /&gt;
Image:Lidar point density with fine resolution showing swath overlap.png|Conteo de puntos en una resolución más fina con histograma con tabla de color viridis ecualizada y leyenda con un rango limitado&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego interpolamos:&lt;br /&gt;
&lt;br /&gt;
 v.surf.rst input=first_returns elevation=dsm tension=25 smooth=1 npmin=80&lt;br /&gt;
&lt;br /&gt;
Ahora podemos visualizar el DSM resultante calculando el relieve sombreado con {{cmd|r.relief}} o usando la vista 3D (ver secciones siguientes).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
Image:Map Display with DSM and legend with histogram.png|DSM con leyenda e histograma&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Análisis de terreno ==&lt;br /&gt;
&lt;br /&gt;
Definir la región computacional basada en un mapa ráster existente:&lt;br /&gt;
&lt;br /&gt;
 g.region raster=count_1 -p&lt;br /&gt;
&lt;br /&gt;
Revisar si la densidad de puntos es suficiente (el suelo es la clase 2, resolución y extensión son tomados de la región computacional:&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=count_ground method=n class_filter=2 zrange=60,200&lt;br /&gt;
&lt;br /&gt;
Importar puntos (la bandera &amp;lt;tt&amp;gt;-t&amp;lt;/tt&amp;gt; deshabilita la creación de la tabla de atributos y la bandera &amp;lt;tt&amp;gt;-b&amp;lt;/tt&amp;gt; deshabilita la construcción de topología; deseleccionar ''Anadir mapa(s) creados al árbol de mapas''):&lt;br /&gt;
&lt;br /&gt;
 v.in.lidar -bt input=nc_tile_0793_016_spm.las output=points_ground class_filter=2 zrange=60,200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
Image:Counting ground points per cell with r.in.lidar.png|''Visualizador de mapas'' con leyenda creada usando {{cmd|d.legend}}, diálogo de {{cmd|r.in.lidar}}, patrón de densidad de puntos en el fondo&lt;br /&gt;
Image:v.in.lidar dialog do not add into layer tree.png|Deseleccionar ''Añadir mapa(s) creados al árbol de capas'' en v.in.lidar&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La interpolación tardará algún tiempo, así que vamos a definir la región computacional a un área menor para ahorrar tiempo antes de determinar cuales son los mejores parámetros para la interpolación. Podemos hacer esto en la GUI desde la barra de herramientas del ''Visualizador de mapas'' o usando las coordenadas:&lt;br /&gt;
&lt;br /&gt;
 g.region n=223751 s=223418 w=639542 e=639899 -p&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:WxGUI set region.png|Modos sencillos para definir la región computacional desde la GUI. A la izquierda, definir la región para que sea igual a un mapa ráster. A la derecha, seleccionar la opción señalada y luego defina la región dibujando un rectángulo. &lt;br /&gt;
Image:Show computational extent in Map Display.png|Mostrar la extensión de la región computacional actual en el ''Visualizador de mapas''&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora interpolamos la superficie del suelo usando spline regularizada con tensión (regularized spline with tension) (implementada en  {{cmd|v.surf.rst}}) y al mismo tiempo derivamos la pendiente, aspecto y curvatura (el siguiente código es una linea larga):&lt;br /&gt;
&lt;br /&gt;
 v.surf.rst input=points_ground tension=25 smooth=1 npmin=100 elevation=terrain slope=slope aspect=aspect pcurvature=profile_curvature tcurvature=tangential_curvature mcurvatur=mean_curvature&lt;br /&gt;
&lt;br /&gt;
Cuando examinamos los resultados, especialmente las curvaturas muestran un patrón que puede ser causado por algunos problemas con la colecta de la nube de puntos. Vamos a disminuir la tensión que va a causar la superficie para aumentar el suavizado y alejarse de los valores de los puntos. Dado que el mapa ráster ya existe, vamos a usar la bandera para sobreescribir, i.e. &amp;lt;code&amp;gt;--overwrite&amp;lt;/code&amp;gt; en la línea de comandos, o en la GUI seleccionar para reemplazar los ráster existentes. Usamos la bandera &amp;lt;code&amp;gt;--overwrite&amp;lt;/code&amp;gt;  o solamente &amp;lt;code&amp;gt;--o&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 v.surf.rst input=points_ground tension=20 smooth=5 npmin=100 elevation=terrain slope=slope aspect=aspect pcurvature=profile_curvature tcurvature=tangential_curvature mcurvatur=mean_curvature --o&lt;br /&gt;
&lt;br /&gt;
Cuando estemos satisfechos con el resultado, vamos de vuelta a la extensión deseada:&lt;br /&gt;
&lt;br /&gt;
 g.region raster=count_1 -p&lt;br /&gt;
&lt;br /&gt;
Y finalmente interpolamos la superficie del suelo en toda la extensión:&lt;br /&gt;
&lt;br /&gt;
 v.surf.rst input=points_ground tension=20 smooth=5 npmin=100 elevation=terrain slope=slope aspect=aspect pcurvature=profile_curvature tcurvature=tangential_curvature mcurvatur=mean_curvature --o&lt;br /&gt;
&lt;br /&gt;
Calculamos el relieve sombreado:&lt;br /&gt;
&lt;br /&gt;
 r.relief input=terrain output=relief&lt;br /&gt;
&lt;br /&gt;
Ahora combinamos el ráster de relieve sombreado con el ráster de elevación. Esto se puede hacer de diferentes maneras. En la GUI cambiando la opacidad. Un mejor resultado se puede obtener con el módulo {{cmd|r.shade}} que combina dos rásters y crea uno nuevo. Finalmente, esto se puede hacer al vuelo son crear un nuevo ráster usando el módulo {{cmd|d.shade}}. El módulo puede ser usado desde la GUI a través de la barra de herramientas o en la pestaña ''Consola'':&lt;br /&gt;
&lt;br /&gt;
 d.shade shade=relief color=terrain&lt;br /&gt;
&lt;br /&gt;
Ahora, en lugar de usar {{cmd|r.relief}}, vamos a usar {{addonCmd|r.skyview}}: &lt;br /&gt;
&lt;br /&gt;
 r.skyview input=terrain output=skyview ndir=8 colorized_output=terrain_skyview&lt;br /&gt;
&lt;br /&gt;
Combinar el terreno y vista aérea (skyview) al vuelo:&lt;br /&gt;
&lt;br /&gt;
 d.shade shade=skyview color=terrain&lt;br /&gt;
&lt;br /&gt;
Visualización analítica basada en relieve sombreado:&lt;br /&gt;
&lt;br /&gt;
 r.shaded.pca input=terrain output=pca_shade&lt;br /&gt;
&lt;br /&gt;
Modelo de relieve local:&lt;br /&gt;
&lt;br /&gt;
 r.local.relief input=terrain output=lrm shaded_output=shaded_lrm&lt;br /&gt;
&lt;br /&gt;
Densidad de pozos:&lt;br /&gt;
&lt;br /&gt;
 r.terrain.texture elevation=terrain thres=0 pitdensity=pit_density&lt;br /&gt;
&lt;br /&gt;
Finalmente, usamos la detección automática de formas de relieve (usando una ventana de búsqueda de 50 m):&lt;br /&gt;
&lt;br /&gt;
 r.geomorphon -m elevation=terrain forms=landforms search=50&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Different terrain analyses and visualizations in multiple Map Displays.png|Diferentes análisis de terreno y visualizaciones en múltiples ''Visualizadores de mapas''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Análisis de vegetación ==&lt;br /&gt;
&lt;br /&gt;
[[File:R in lidar explanation of zrange option.png|300px|thumb|right|El parámetro &amp;lt;code&amp;gt;zrange&amp;lt;/code&amp;gt; filtra los puntos que no caen en el rango especificado de valores Z]]&lt;br /&gt;
&lt;br /&gt;
Aunque para muchas aplicaciones relacionadas con la vegetación, una resolución más grues es más apropiada por que se necesitan más puntos para las estadísticas, vamos a usar solamente:&lt;br /&gt;
&lt;br /&gt;
 g.region raster=count_1&lt;br /&gt;
&lt;br /&gt;
Vamos a usar todos los puntos (sin usar la clasificación de los puntos), pero con el filtrado de Z para obtener el rango de las alturas en cada celda:&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=range method=range zrange=60,200&lt;br /&gt;
&lt;br /&gt;
Vamos a usar todos los puntos, pero con el filtro Z para obtener el rango de alturas en cada celda:&lt;br /&gt;
&lt;br /&gt;
 r.mapcalc &amp;quot;vegetation_by_range = if(range &amp;gt; 2, 1, null())&amp;quot;&lt;br /&gt;
&lt;br /&gt;
O una menor resolución para evitar huecos (y posiblemente suavizado para rellenarlos).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Change color table interactively with menu and labels.png|Cambiar la tabla de color para el mapa ráster desde el menú de contexto usando ''Definir tabla de colores de manera interactiva''.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar -d input=nc_tile_0793_016_spm.las output=height_above_ground method=max base_raster=terrain zrange=0,100&lt;br /&gt;
&lt;br /&gt;
En caso de que usemos  &amp;lt;code&amp;gt;if(height_above_ground &amp;gt; 2, height_above_ground, null())&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
 r.mapcalc &amp;quot;above_2m = if(height_above_ground &amp;gt; 2, 1, null())&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Usar {{cmd|r.grow}} para extender los parches y rellenar los huecos:&lt;br /&gt;
&lt;br /&gt;
 r.grow input=above_2m output=vegetation_grow&lt;br /&gt;
&lt;br /&gt;
Consideramos el resultado para representar las áreas con vegetación. Vamos a agrupar (conectar) las celdas individuales en parches usando {{cmd|r.clump}}):&lt;br /&gt;
&lt;br /&gt;
 r.clump input=vegetation_grow output=vegetation_clump&lt;br /&gt;
&lt;br /&gt;
Algunos de los parches son muy pequeños. Usando {{addonCmd|r.area}} removemos todos los parches menores que un determinado límite:&lt;br /&gt;
&lt;br /&gt;
 r.area input=vegetation_clump output=vegetation_by_height lesser=100&lt;br /&gt;
&lt;br /&gt;
Ahora convertimos esas áreas a vectores:&lt;br /&gt;
&lt;br /&gt;
 r.to.vect -s input=vegetation_by_height output=vegetation_by_height type=area&lt;br /&gt;
&lt;br /&gt;
Hasta ahora estamos usando la elevación de los puntos, ahora vamos a usar la intensidad.&lt;br /&gt;
La intensidad es usada por {{cmd|r.in.lidar}} cuando se le da la bandera &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; (o &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=intensity zrange=60,200 -j&lt;br /&gt;
&lt;br /&gt;
Con esta mayor resolución, hay algunas celdas sin puntos, por lo que usamos  {{addonCmd|r.fill.gaps}} para rellenar estas celdas ({{addonCmd|r.fill.gaps}} también suaviza el ráster como parte del proceso de rellenado de huecos)&lt;br /&gt;
&lt;br /&gt;
 r.fill.gaps input=intensity output=intensity_filled uncertainty=uncertainty distance=3 mode=wmean power=2.0 cells=8&lt;br /&gt;
&lt;br /&gt;
La tabla de colores de Grey es más apropiada para la intensidad:&lt;br /&gt;
&lt;br /&gt;
 r.colors map=intensity_filled color=grey&lt;br /&gt;
&lt;br /&gt;
Hay algunas áreas con intensidades muy altas, para visualmente explorar otras áreas, usamos la tabla de colores ecualizada con el histograma:&lt;br /&gt;
&lt;br /&gt;
 r.colors -e map=intensity_filled color=grey&lt;br /&gt;
&lt;br /&gt;
Vamos a usar {{addonCmd|r.geomorphon}} de nuevo, pero ahora con el DSM y diferente configuración. La siguiente configuración muestra las formas de los techos:&lt;br /&gt;
&lt;br /&gt;
 r.geomorphon elevation=dsm forms=dsm_forms search=7 skip=4&lt;br /&gt;
&lt;br /&gt;
Diferentes configuraciones, espeecialmente un mayor límite de aplanado (flatness threshold) (parámetro &amp;lt;code&amp;gt;flat&amp;lt;/code&amp;gt;) muestra áreas forestadas como combinaciones de (¿?)  footslopes, slopes, and shoulders. Los árboles individuales se representan como shoulders.&lt;br /&gt;
&lt;br /&gt;
 r.geomorphon elevation=dsm forms=dsm_forms search=12 skip=8 flat=10 --o&lt;br /&gt;
&lt;br /&gt;
Disminuyendo el parámetro skip disminuye la generalización y trae las cúspides que generalmente representan las copas de los árboles:&lt;br /&gt;
&lt;br /&gt;
 r.geomorphon elevation=dsm forms=dsm_forms search=12 skip=2 flat=10 --o&lt;br /&gt;
&lt;br /&gt;
Ahora extraemos las cúspides usando {{cmd|r.mapcalc}} para álgebra de mapas con la expresión &amp;lt;code&amp;gt;if(dsm_forms==2, 1, null())&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 r.mapcalc &amp;quot;trees = if(dsm_forms==2, 1, null())&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=2 widths=400 heights=200&amp;gt;&lt;br /&gt;
Image:R geomorphon lidar dsm roofs.png|{{cmd|Configuración de {{cmd|r.geomorphon}} que muestra bien las formas de los techos&lt;br /&gt;
Image:R geomorphon lidar dsm vegetation.png|Configuración diferente de {{cmd|r.geomorphon}} que muestra las áreas con vegetación&lt;br /&gt;
Image:R geomorphon lidar dsm vegetation details.png|La configuración más común de {{cmd|r.geomorphon}} que resulta en una detallada descripción de las formas del DSM&lt;br /&gt;
Image:R geomorphon lidar dsm trees.png|Picos seleccionados desde {{cmd|r.geomorphon}} mostrando la posición de los árboles (copas de los árboles)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tareas extra ==&lt;br /&gt;
&lt;br /&gt;
=== Visualización 3D de rásters ===&lt;br /&gt;
&lt;br /&gt;
Podemos explorar nuestra área de estudio en la vista 3D (use la imagen de la derecha si necesita clarificación para los siguientes pasos):&lt;br /&gt;
&lt;br /&gt;
# Añadir ráster &amp;lt;tt&amp;gt;dsm&amp;lt;/tt&amp;gt; y deseleccionar o remover cualquier otra capa. Note que el deseleccionar (o remover) cualquier otra capa es importante porque cualquier otra capa cargada en ''Capas'' es interpretada como un suerficie en la vista 3D.&lt;br /&gt;
# Cambie a la vista 3D (en la esquina derecha del Visualizador de Mapas).&lt;br /&gt;
# Ajuste la vista (perspectiva, altura).&lt;br /&gt;
# En la pestaña ''Data'', defina ''Modo de resolución fina'' a 1 y defina &amp;lt;tt&amp;gt;ortho&amp;lt;/tt&amp;gt; como superficie de color (la ortofoto será mostrada sobre el DSM).&lt;br /&gt;
# Regrese a la pestaña ''Vista'' y explore las diferentes direcciones de vista usando el controlador verde.&lt;br /&gt;
# Vaya a la pestaña ''Apariencia''y cambie las condiciones de luz (mejor altura de la luz, cambio de dirección).&lt;br /&gt;
# Trate también usando el ráster &amp;lt;tt&amp;gt;landforms&amp;lt;/tt&amp;gt;  como la superficie de colores.&lt;br /&gt;
# Cuando termine, cambie de nuevo a la vista 2D.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:ICC_workshop_3Dview_ortho.png|Visualización 3D del DSM con la ortofoto superpuesta: las flechas muestran el nombre de la superficie, la resolución usada para visualizar, y el raster usado como color.&lt;br /&gt;
Image:Geomorphons_in_3D_view_Appearance_tab.png|Formas de terreno sobre el DSM en 3D: la posición de la luz se cambia en la pestaña Apariencia&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Visualización analítica de rásters en 3D ===&lt;br /&gt;
&lt;br /&gt;
Podemos explorar nuestra área en vista 3D (use la imagen de la derecha si necesita clarificar los pasos siguientes):&lt;br /&gt;
&lt;br /&gt;
# Añada los rásters &amp;lt;tt&amp;gt;terrain&amp;lt;/tt&amp;gt; y &amp;lt;tt&amp;gt;dsm&amp;lt;/tt&amp;gt; y deseleccione o remueva cualquier otra capa. (Cualquier capa en ''Capas'' será interpretada como superficie en la vista 3D.)&lt;br /&gt;
# Cambie a la vista 3D (en la esquina derecha del ''Visualizador de mapas'').&lt;br /&gt;
# Ajuste la vista (perspectiva, altura). Defina la exageración-z a 1.&lt;br /&gt;
# En la pestaña ''Data'', defina ''Modo de resolución fina'' a 1 para ambos rásters.&lt;br /&gt;
# Defina un color diferente para cada superficie.&lt;br /&gt;
# Para el &amp;lt;tt&amp;gt;dsm&amp;lt;/tt&amp;gt;, defina la posición en la dirección Z a 1. Esta es la posición relativa a la posición actual del ráster. Esta pequeña compensación ayudará a ver la relación entre el terreno y la superficies del DSM.&lt;br /&gt;
# Vaya a la pestaña ''Análisis'' y active el primer plano de corte. Defina ''Sombreado'' a ''bottom color'' para obtener el color de abajo para colorear el espacio entre el terreno y el DSM.&lt;br /&gt;
# Empiece a mover el plano para ''X'', ''Y'' and ''Rotación''.&lt;br /&gt;
# Vaya de nuevo a la pestaña de ''Vista'' para cambiar la vista.&lt;br /&gt;
# Cuando termine, cambie de nuevo a la vista 2D.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Nviz data tab dsm set relative positon.png|En la pestaña de Datos de la vista 3D, defina la resolución de ambas superficies. Escoja diferentes colores. Defina la posición (relativa) del DSM a 1, (por encima de la posición actual).&lt;br /&gt;
Image:Nviz cutting plane analysis tab.png|En la pestaña de Análisis de la vista 3D, active los planos de corte, defina el color de abajo (bottom color) e inicie a mover el plano para X, Y y rotación.&lt;br /&gt;
Image:Nviz_cutting_plane_dem_dsm.png|Para ver la parte más larga del transecto, amplíe la ventana horizontalmente.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clasificar puntos de suelo y no suelo ===&lt;br /&gt;
&lt;br /&gt;
Las nubes de puntos de UAV usualmente requieren clasificación de puntos de suelo (tierra solita) cuando queremos crear superficies de suelo.&lt;br /&gt;
&lt;br /&gt;
Importar todos los puntos usando el comando {{cmd|v.in.lidar}} en la sección previa, a menos que ya los tenga. Dado que los metadatos acerca de la proyección son incorrectos use la bandera &amp;lt;code&amp;gt;-o&amp;lt;/code&amp;gt; para saltar la revisión de consistencia de la proyección.&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar -e -n -o input=nc_uav_points_spm.las output=uav_density_05 method=n resolution=0.5&lt;br /&gt;
&lt;br /&gt;
Defina una región computacional menor para hacer todos los cálculos más rápidos (salte esto para hacer las operaciones en toda el área):&lt;br /&gt;
&lt;br /&gt;
 g.region  n=219415 s=219370 w=636981 e=637039&lt;br /&gt;
&lt;br /&gt;
Importe los puntos usando el módulo {{cmd|v.in.lidar}} pero limitando la extensión a la región computacional (&amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; flag), pero no construya la topología (bandera &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt;), no cree tampoco la tabla de atributos (bandera &amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt; y no asigne categorías (ids) a los puntos, bandera &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;). Hay más puntos que los que necesitamos para interpolar la resolución de 0.5 m, así que vamos a decimar (adelgazar, thin) la nube durante la importación, importando 75% de los puntos, usando &amp;lt;code&amp;gt;preserve=4&amp;lt;/code&amp;gt; (que usa una decimación basada en el conteo, que asume una distribución espacial uniforme de los puntos).&lt;br /&gt;
&lt;br /&gt;
 v.in.lidar -t -c -b -r -o input=nc_uav_points_spm.las output=uav_points preserve=4&lt;br /&gt;
&lt;br /&gt;
Luego use {{addonCmd|v.lidar.mcc}} para clasificar los puntos del suelo y los de no-suelo:&lt;br /&gt;
&lt;br /&gt;
 v.lidar.mcc input=points_all ground=mcc_ground nonground=mcc_nonground&lt;br /&gt;
&lt;br /&gt;
Interpolar la superficie del suelo:&lt;br /&gt;
&lt;br /&gt;
 v.surf.rst input=mcc_ground tension=20 smooth=5 npmin=100 elevation=mcc_ground&lt;br /&gt;
&lt;br /&gt;
Si está usando datos UAV, puede extraer los valores RGB de los puntos. Primero, importe los puntos de nuevo, pero esta vez con todos los atributos:&lt;br /&gt;
&lt;br /&gt;
 v.in.lidar -r -o input=nc_uav_points_spm.las output=uav_points preserve=4&lt;br /&gt;
&lt;br /&gt;
Luego extraiga los valores RGB (guardados en columnas) en canales separados (ráters):&lt;br /&gt;
&lt;br /&gt;
 v.to.rast input=uav_points output=red use=attr attr_col=red&lt;br /&gt;
 v.to.rast input=uav_points output=green use=attr attr_col=green&lt;br /&gt;
 v.to.rast input=uav_points output=blue use=attr attr_col=blue&lt;br /&gt;
&lt;br /&gt;
Y defina la tabla de colores a gris:&lt;br /&gt;
&lt;br /&gt;
 r.colors red color=grey&lt;br /&gt;
 r.colors green color=grey&lt;br /&gt;
 r.colors blue color=grey&lt;br /&gt;
&lt;br /&gt;
Estos canales pueden ser usados para tareas de percepción remota. Ahora vamos a visualizarlos usando {{cmd|d.rgb}}:&lt;br /&gt;
&lt;br /&gt;
 d.rgb red=red green=green blue=blue&lt;br /&gt;
&lt;br /&gt;
Si está usando datos lidar para esta parte, puede comparar el nuevo DEM con el conjunto de datos previo:n&lt;br /&gt;
&lt;br /&gt;
 r.mapcalc &amp;quot;mcc_lidar_differece = ground - mcc_ground&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Defina la tabla de colores:&lt;br /&gt;
&lt;br /&gt;
 r.colors map=mcc_lidar_differece color=difference&lt;br /&gt;
&lt;br /&gt;
=== Visualización 3D denubes de puntos ===&lt;br /&gt;
&lt;br /&gt;
A menos que ya haya hecho esto, familiarícese con la vista 3D haciendo el ejercicio anterior. Luego importe todos los puntos pero esta vez no los añada al ''Administrador de capas'' (hay una caja de selección en la parte inferior del diálogo del módulo).&lt;br /&gt;
&lt;br /&gt;
 v.in.lidar -obt input=nc_tile_0793_016_spm.las output=points_all zrange=60,200&lt;br /&gt;
&lt;br /&gt;
Ahora podemos explorar la nube de puntos en vista 3D:&lt;br /&gt;
# Deseleccione o remueva cualquier otra capa. (Cualquier capa en el Administrador de capas se intepreta como una superficie en la vista 3D.)&lt;br /&gt;
# Cambie a la vista 3D (en la esquina derecha del Visualizador de Mapas).&lt;br /&gt;
# Cuando 3D esté activo, ''Administrador de capas'' tiene un nuevo ícono para la configuración predeterminada del 3D, abrirla y cambiar.&lt;br /&gt;
# En la configuración, cambiar la forma de los puntos de esfera a X.&lt;br /&gt;
# Luego añadir vectorial &amp;lt;tt&amp;gt;points&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Puede necesitar ajutar el tamaño de los puntos si todos están sobrelapados.&lt;br /&gt;
# Ajustar la vista (perspectiva, altura).&lt;br /&gt;
# Ir de nuevo a la pestaña ''Vista'' y explorar las diferentes direcciones usando el control verde.&lt;br /&gt;
# Ir a la pestaña ''Apariencia'' y cambiar las condiciones de la luz (altura, dirección).&lt;br /&gt;
# Cuando termine, cambiar a la vista 2D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:WxGUI nviz with point cloud ground and non-ground data tab.png|Nube de puntos UAV clasificados por grupo de suelo (naranja) y no-suelo (verde).&lt;br /&gt;
Image:Selection 409.png|Detalle mostrando árboles y puntos discrepantes.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creación alternativa de DSM ===&lt;br /&gt;
&lt;br /&gt;
Los primeros retornos no siempre representan la parte superior de la copa, pero pueden representar el primer golpe en algún lugar de la copa. Para tomar esto en cuenta creamos un ráster con el máximo de cada celda, en vez de importar los puntos en crudo:&lt;br /&gt;
&lt;br /&gt;
 r.in.lidar input=nc_tile_0793_016_spm.las output=maximum method=maximum return_filter=first&lt;br /&gt;
&lt;br /&gt;
El ráster tiene muchas celdas faltantes, es por esto que queremos interpolar, pero al mismo tiempo, podemos reducir el número de puntos al reemplazar todos los puntos en una celda por solamente uno por celda. Podemos considerar la celda que represente un punto en el medio de la celda y usar  {{cmd|r.to.vect}} para crear puntos a partir de estas celdas:&lt;br /&gt;
&lt;br /&gt;
 r.to.vect input=maximum output=points_for_dsm type=point -b&lt;br /&gt;
&lt;br /&gt;
Ahora podemos decimar la nube de puntos, decimamos usando almacenado a ráster (binning). Interpolamos estos puntos para obtener el DSM:&lt;br /&gt;
&lt;br /&gt;
 v.surf.rst input=first_returns elevation=dsm tension=25 smooth=1 npmin=80&lt;br /&gt;
&lt;br /&gt;
=== Explorar capas de vegetación en un ráster 3D ===&lt;br /&gt;
&lt;br /&gt;
Definir la parte superior e inferior de la región computacional para que ajuste a la altura de la vegetación (estamos interesados en la vegetación etre 0 m y 30 m por encima del suelo).&lt;br /&gt;
&lt;br /&gt;
 g.region -p3 b=0 t=30&lt;br /&gt;
&lt;br /&gt;
De manera similar al 2D, podemos realizar el almacenado (binning) también en tres dimensiones usando rásters 3D. Esto está implementado en un módulo llamado {{cmd|r3.in.lidar}}:&lt;br /&gt;
&lt;br /&gt;
 r3.in.lidar -d input=nc_tile_0793_016_spm.las n=count sum=intensity_sum mean=intensity proportional_n=prop_count proportional_sum=prop_intensity base_raster=terrain&lt;br /&gt;
&lt;br /&gt;
Convertir las capas horizontales (rebanadas, planos) del ráster 3D en rásters 2D:&lt;br /&gt;
&lt;br /&gt;
 r3.to.rast input=prop_count output=slices_prop_count&lt;br /&gt;
&lt;br /&gt;
Abrir un segundo ''Visualizador de mapas'' y añadir todos los rásters creados. Luego definir una tabla de colores consistente para todos.&lt;br /&gt;
&lt;br /&gt;
 r.colors slices_prop_count_001,slices_prop_count_002,... color=viridis&lt;br /&gt;
&lt;br /&gt;
Ahora abra la Herramienta de Animación y añada todos los rásteres 2D ahí y use el deslizador (rebanador, slicer) para explorar las capas.&lt;br /&gt;
&lt;br /&gt;
== Optimizaciones, troubleshooting y limitaciones ==&lt;br /&gt;
&lt;br /&gt;
Optimizaciones de velocidad:&lt;br /&gt;
&lt;br /&gt;
* ''Rasterizar tempranamente.''&lt;br /&gt;
** Para muchos usos, hay menos celdas que puntos. Adicionalmente, rásters pueden ser más rápidos, por ej. para visualizar, por que el ráster tiene un índice espacial natural. Finalmente, muchos algoritmos simplemente usan rásters.&lt;br /&gt;
* Si no puede rasterizar, vea si puede decimar (adelgazar, thin) la nube de puntos (usando {{cmd|v.in.lidar}}, {{cmd|r.in.lidar}} + {{cmd|r.to.vect}}, {{cmd|v.decimate}})&lt;br /&gt;
* Almacenar (binning) (por ej. {{cmd|r.in.lidar}}, {{cmd|r3.in.lidar}}) es más rápido que interpolar y puede eliminar parte del análisis.&lt;br /&gt;
* La decimación rápida basda en conteo realiza casi siempre lo mismo en una nube de puntos dada para terreno en lugar de la decimación basada en malla (Petras et al. 2016).&lt;br /&gt;
* r.in.lidar&lt;br /&gt;
** Primero escoja la extensión y resolución de la región computacional&lt;br /&gt;
** tener suficiente memoria para evitar usar la opción &amp;lt;tt&amp;gt;percent&amp;lt;/tt&amp;gt; (alto uso de memoria versus alto I/O)&lt;br /&gt;
*v.in.lidar&lt;br /&gt;
** &amp;lt;tt&amp;gt;-r&amp;lt;/tt&amp;gt; limitar la importación a la extensión de la región&lt;br /&gt;
** &amp;lt;tt&amp;gt;-t&amp;lt;/tt&amp;gt; no crear tabla de atributos&lt;br /&gt;
** &amp;lt;tt&amp;gt;-b&amp;lt;/tt&amp;gt; no construir topología (aplicable a otros módulos también)&lt;br /&gt;
** &amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt; guardar solamente las coordenadas, no categorías o IDs&lt;br /&gt;
&lt;br /&gt;
Requisitos de memoria:&lt;br /&gt;
&lt;br /&gt;
* para r.in.lidar&lt;br /&gt;
** depende del sentido de la salida y el tipo de análisis&lt;br /&gt;
** puede ser reducido por la opción &amp;lt;tt&amp;gt;percent&amp;lt;/tt&amp;gt; &lt;br /&gt;
** &amp;lt;tt&amp;gt;ERROR: G_malloc: unable to allocate ... bytes of memory&amp;lt;/tt&amp;gt; significa que no tiene suficiente memoria para la salida ráster, use la opción  &amp;lt;tt&amp;gt;percent&amp;lt;/tt&amp;gt;, una resolución más gruesa, o una región más pequeña&lt;br /&gt;
** en Linux la memoria disponible para procesos es  RAM + SWAP (partición), pero cuando se usa SWAP el procesamiento es más lento&lt;br /&gt;
* para v.in.lidar&lt;br /&gt;
** menor cuando no construye la topología (bandera &amp;lt;tt&amp;gt;-b&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** no construir la topología mantiene bajo el uso de memoria, use &amp;lt;tt&amp;gt;export GRASS_VECTOR_LOWMEM=1&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;os.environ['GRASS_VECTOR_LOWMEM'] = '1'&amp;lt;/tt&amp;gt; en Python)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Límites:&lt;br /&gt;
* Elementos vectoriales con topología se limitan a 2 billones de elementos por mapa vectorial (2^31 - 1)&lt;br /&gt;
* Puntos sin topología se limitan solamente por el espacio del disco y lo que puedan procesar los módulos después. (Teóricamente, el conteo limitado solamente por la arquitectura 64bit que sería de 16 exbibytes por archivo, pero el valor depende de cada sistema de archivos.)&lt;br /&gt;
* Para vectoriales más grandes con atributos, se recomienda tomar PostgreSQL para los atributos ({{cmd|v.db.connect}}).&lt;br /&gt;
* No hay más límites para las versiones 32bit para operaciones que requiere memoria. (Desde 2016 hay una versión 64bit aún para MS Windows. Incluso la versión 32bit tiene una soporte de archivos grandes (LFS) y puede trabajar con archivos que excedan las limitaciones de 32bit.)&lt;br /&gt;
* Leer y escribir a disco (I/O) usualmente limita la velocidad. (Puede ser más rápido para rásters desde 7.2 usa diferentes algoritmos de compresión definidos con la variable &amp;lt;tt&amp;gt;GRASS_COMPRESSOR&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Hay un límite para el número de archivos abiertos definido por el sistema operativo.&lt;br /&gt;
* El límite usualmente es 1024. En Linux se puede cambiar usando ''ulimit''.&lt;br /&gt;
* Los módulos individuales pueden tener sus propias limitaciones o comportamientos con datos grandes basados en el algoritmo que usen. Sin embargo, en general los módulos están hechos para trabajar con grandes conjuntos de datos. Por ejemplo:&lt;br /&gt;
** {{cmd|r.watershed}} puede procesar 90,000 x 100,000 (9 billiones de celdas) en 77.2 hours (2.93GHz), y&lt;br /&gt;
** {{cmd|v.surf.rst}} puede procesar 1 million de puntos e interpolar 202,000 celdas en 13 minutes.&lt;br /&gt;
* Leer la documentación ya que provee descripciones de las limitaciones de cada módulo y cómo tratar con eso.&lt;br /&gt;
* Escriba a [https://lists.osgeo.org/listinfo/grass-user grass-user la lista de correos] o a [http://trac.osgeo.org/grass/ GRASS GIS bug tracker] en caso de que llegue a algún límite. Por ejemplo, si tiene un número negativo como el número de putos o celdas, abra un ticket.&lt;br /&gt;
&lt;br /&gt;
== Bleeding edge ==&lt;br /&gt;
&lt;br /&gt;
[[File:Raster3d example small data.png|300px|thumb|right|Fragmentación de vegetación calculado con {{addonCmd|r3.forestfrag} desde una nube de puntos lidar represetado como ráster 3D]]&lt;br /&gt;
&lt;br /&gt;
* Procesar nubes de puntos como rásters 3D&lt;br /&gt;
** r3.forestfrag&lt;br /&gt;
** r3.count.categories&lt;br /&gt;
** r3.scatterplot&lt;br /&gt;
* Perfil de puntos&lt;br /&gt;
** v.profile.points&lt;br /&gt;
* Integración PDAL&lt;br /&gt;
** prototipos: v.in.pdal, r.in.pdal&lt;br /&gt;
** meta: proveer acceso a algoritmos PDAL (filtros)&lt;br /&gt;
* r.in.kinect&lt;br /&gt;
** Tiene algunos elementos de r.in.lidar, v.in.lidar, and PCL (Point Cloud Library), pero la nube de puntos es continuamente actualizada desde el scanner Kinect usando  OpenKinect libfreenect2 (usado en [http://tangible-landscape.github.io/ Tangible Landscape]).&lt;br /&gt;
* Combinar datos de elevación de diferentes fuentes (ej. global y lidar DEM o lidar y UAV DEM)&lt;br /&gt;
** [https://github.com/petrasovaa/r.patch.smooth r.patch.smooth]: Seamless fusion of high-resolution DEMs from two different sources&lt;br /&gt;
** {{addonCmd|r.mblend}}: Blending rasters of different spatial resolution&lt;br /&gt;
* mostrar grandes nubes de puntos en el Visualizador de mapas (2D)&lt;br /&gt;
** prototipo: d.points&lt;br /&gt;
* Guardar retorno e información de clase como categoría&lt;br /&gt;
** implementación experimental en  v.in.lidar&lt;br /&gt;
* Decimación&lt;br /&gt;
** implementada: v.in.lidar, r.in.lidar&lt;br /&gt;
** v.decimate (con elementos experimentales)&lt;br /&gt;
&lt;br /&gt;
Las contribuciones son más que bienvenidas. Puede discutirlas en la [https://lists.osgeo.org/listinfo/grass-dev lista de correos grass-dev].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=400 heights=270&amp;gt;&lt;br /&gt;
Image:Tangible landscape and blender with water and trees.jpg|Tangible Landscape uses r.in.kinect to scan a sand model which is processed and analyzed in GRASS GIS and optionally visualized in Blender&lt;br /&gt;
Image:Seamless fusion of high-resolution DEMs from multiple sources.png|Seamless fusion of high-resolution DEMs from multiple sources with r.patch.smooth: example of computing overlap zone for fusion&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[GRASS GIS at FOSS4G Boston 2017]]&lt;br /&gt;
* [[From GRASS GIS novice to power user (workshop at FOSS4G Boston 2017)]]&lt;br /&gt;
* [[Analytical data visualizations at ICC 2017]]&lt;br /&gt;
* [[Unleash the power of GRASS GIS at US-IALE 2017]]&lt;br /&gt;
* [[Creating animation from FUTURES output in GRASS GIS]]&lt;br /&gt;
* [[Introduction to GRASS GIS with terrain analysis examples]]&lt;br /&gt;
* [[Lidar Analysis of Vegetation Structure]]&lt;br /&gt;
* [[LIDAR]]&lt;br /&gt;
* [[GRASS and Python|GRASS GIS and Python]]&lt;br /&gt;
* [[R statistics|GRASS GIS and R]]&lt;br /&gt;
* [[GRASS Location Wizard]]&lt;br /&gt;
&lt;br /&gt;
Links externos:&lt;br /&gt;
&lt;br /&gt;
* [http://wenzeslaus.github.io/grass-lidar-talks/ Processing lidar and general point cloud data in GRASS GIS] (presentation slides)&lt;br /&gt;
* [https://petrasovaa.github.io/dem-fusion-talk Seamless fusion of high-resolution DEMs from multiple sources] (presentation slides)&lt;br /&gt;
* [https://www.liblas.org libLAS]&lt;br /&gt;
* [http://pdal.io/ PDAL]&lt;br /&gt;
&lt;br /&gt;
Referencias:&lt;br /&gt;
&lt;br /&gt;
* Brovelli M. A., Cannata M., Longoni U.M. 2004. ''LIDAR Data Filtering and DTM Interpolation Within GRASS.'' Transactions in GIS, April 2004, vol. 8, iss. 2, pp. 155-174(20), Blackwell Publishing Ltd. ([https://www.researchgate.net/publication/220606097_LiDAR_data_filtering_and_DTM_interpolation_within_GRASS full text at ResearchGate])&lt;br /&gt;
* Evans, J. S., Hudak, A. T. 2007. ''A Multiscale Curvature Algorithm for Classifying Discrete Return LiDAR in Forested Environments.'' IEEE Transactions on Geoscience and Remote Sensing 45(4): 1029 - 1038. ([http://www.fs.fed.us/rm/pubs_other/rmrs_2007_evans_j001.pdf full text])&lt;br /&gt;
* Jasiewicz, J., Stepinski, T. 2013. ''Geomorphons - a pattern recognition approach to classification and mapping of landforms, Geomorphology.'' vol. 182, 147-156. [http://dx.doi.org/10.1016/j.geomorph.2012.11.005 DOI: 10.1016/j.geomorph.2012.11.005]&lt;br /&gt;
* Leitão, J.P., Prodanovic,  D., Maksimovic, C. 2016. ''Improving merge methods for grid-based digital elevation models.'' Computers &amp;amp; Geosciences, Volume 88, March 2016, Pages 115-131, ISSN 0098-3004. [http://doi.org/10.1016/j.cageo.2016.01.001 DOI: 10.1016/j.cageo.2016.01.001]. &lt;br /&gt;
* Mitasova, H., Mitas, L. and Harmon, R.S., 2005, Simultaneous spline approximation and topographic analysis for lidar elevation data in open source GIS, IEEE GRSL 2 (4), 375- 379. ([http://www4.ncsu.edu/~hmitaso/gmslab/papers/IEEEGRSL2005.pdf full text])&lt;br /&gt;
* Petras, V., Newcomb, D. J., Mitasova, H. 2017. ''Generalized 3D fragmentation index derived from lidar point clouds.'' In: Open Geospatial Data, Software and Standards. [http://dx.doi.org/10.1186/s40965-017-0021-8 DOI: 10.1186/s40965-017-0021-8]&lt;br /&gt;
* Petras, V., Petrasova, A., Jeziorska, J., Mitasova, H. 2016. ''Processing UAV and lidar point clouds in GRASS GIS.'' ISPRS - International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences XLI-B7, 945–952, 2016 ([https://www.researchgate.net/publication/304340172_Processing_UAV_and_lidar_point_clouds_in_GRASS_GIS full text at ResearchGate])&lt;br /&gt;
* Petrasova, A., Mitasova, H., Petras, V., Jeziorska, J. 2017. ''Fusion of high-resolution DEMs for water flow modeling.'' In: Open Geospatial Data, Software and Standards. [http://dx.doi.org/10.1186/s40965-017-0019-2 DOI: 10.1186/s40965-017-0019-2]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Workshops]]&lt;br /&gt;
[[Category: 2017]]&lt;br /&gt;
[[Category: Lidar]]&lt;br /&gt;
[[Category: Terrain]]&lt;br /&gt;
[[Category: Vegetation]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Unleash_the_power_of_GRASS_GIS_at_US-IALE_2017/es&amp;diff=24286</id>
		<title>Unleash the power of GRASS GIS at US-IALE 2017/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Unleash_the_power_of_GRASS_GIS_at_US-IALE_2017/es&amp;diff=24286"/>
		<updated>2017-06-22T21:53:01Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Us-iale_logo.jpg|300px|right|none]]&lt;br /&gt;
[[File:Grassgis logo colorlogo text whitebg.png|300px|right|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este es un material preparado para un taller de la [[GRASS GIS at US-IALE 2017 Annual Meeting|US-IALE 2017]], que lleva el nombre de ''Unleash the power of GRASS GIS'' y se realizó el 11 de Abril de 2017 en Baltimore. Este taller es introductorio a las capacidades de procesamiento de GRASS GIS relevantes para la ecología de paisaje.&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
Se usará GRASS GIS 7.2 y R (&amp;gt;=3.1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' MS Windows '''&lt;br /&gt;
&lt;br /&gt;
Si no tiene R, por favor instálelo primero.&lt;br /&gt;
Luego descargue los binarios de GRASS GIS 7.2 ([https://grass.osgeo.org/grass72/binary/mswindows/native/x86_64/WinGRASS-7.2.0-1-Setup-x86_64.exe version de 64-bit], o [https://grass.osgeo.org/grass72/binary/mswindows/native/x86/WinGRASS-7.2.0-1-Setup-x86.exe versión de 32-bit]) de [https://grass.osgeo.org/ grass.osgeo.org].&lt;br /&gt;
Durante la instalación puede descargar el conjunto de datos de muestra de Carolina del Norte, por favor seleccione esta opción. También puede descargar los datos después (vea la siguiente sección). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mac OSX'''&lt;br /&gt;
Instale GRASS GIS 7.2 usando homebrew [https://github.com/OSGeo/homebrew-osgeo4mac osgeo4mac]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew tap osgeo/osgeo4mac&lt;br /&gt;
brew install grass7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Ubuntu Linux '''&lt;br /&gt;
&lt;br /&gt;
Instale GRASS GIS desde el administrador de paquetes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para otras distribuciones de Linux, por favor encuentre GRASS GIS en su administrador de paquetes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Extensiones de GRASS GIS (addons) ====&lt;br /&gt;
&lt;br /&gt;
Se usarán las siguientes extensiones:&lt;br /&gt;
&lt;br /&gt;
* r.forestfrag&lt;br /&gt;
* r.sun.hourly&lt;br /&gt;
* r.diversity&lt;br /&gt;
&lt;br /&gt;
Las puede instalar desde la GUI, o usando la línea de comandos, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
  g.extension r.diversity&lt;br /&gt;
 &lt;br /&gt;
==== Paquetes de R ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install.packages(c(&amp;quot;rgdal&amp;quot;, &amp;quot;rgrass7&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datos para este taller ==&lt;br /&gt;
Para este taller, descargue los siguientes conjuntos de datos:&lt;br /&gt;
* [https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip Localización GRASS de muestra de North Carolina]&lt;br /&gt;
* [https://github.com/ncsu-geoforall-lab/grass-intro-workshop/raw/master/files/points_of_interest.zip points_of_interest.zip]&lt;br /&gt;
&lt;br /&gt;
Además, para la parte de scripts de R, necesita:&lt;br /&gt;
* US Census Bureau: [http://www2.census.gov/geo/tiger/GENZ2015/shp/cb_2015_us_state_20m.zip Límites cartográficos de los estados de EEUU]&lt;br /&gt;
* [http://services.nacse.org/prism/data/public/normals/4km/tmean/annual PRISM 30-year temperatura media anual normal, malla de 4 km]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/US_elevation.tif datos de elevación SRTM para EEUU]&lt;br /&gt;
&lt;br /&gt;
Para la parte de lidar:&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.las mosaico LAS para Raleigh]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.txt versión txt del mosaico (todos los puntos)] y [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm_first.txt y solamente los primeros puntos de retorno]&lt;br /&gt;
&lt;br /&gt;
== Introducción a GRASS GIS ==&lt;br /&gt;
Aquí se provee una reseña del proyecto GRASS GIS [https://grass.osgeo.org grass.osgeo.org] que puede ser útil para revisar si ud. es un usuario primerizo. Para este ejercicio no es necesario entender completamente cómo funciona GRASS GIS. Sin embargo, puede necesitar saber cómo colocar sus datos en el directorio de bases de datos correcto de GRASS GIS, así como algunas ideas básicas sobre las funciones de GRASS. Aquí introducimos los conceptos esenciales ecesarios para correr este tutorial:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  Estructura de la base de datos espacial de GRASS GIS ====&lt;br /&gt;
GRASS usa una terminología y estructura de la base de datos única ([https://grass.osgeo.org/grass71/manuals/grass_database.html base de datos GRASS]) que es importante entender para correr este tutorial, ya que es posible que necesite colocar los datos (ej. Localización en una base de datos específica de GRASS. En lo que sigue revisaremos la terminología y se dan las direcciones paso a paso de cómo descargar y colocar sus datos en el lugar correcto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Una '''Base de datos espacial de GRASS GIS''' (''GRASS database'') consiste de un directorio con  Localizaciones (proyectos) específicos donde los datos (datos capas/mapas) se guardan.&lt;br /&gt;
* '''Localización''' es un directorio con datos relacionados a una localidad geográfica o a un proyecto. Todos los datos dentro de una Localización tienen el mismos sistema de coordenadas de referencia.&lt;br /&gt;
* '''Directorio de mapas''' es una colección de mapas dentro de una Localización, contiene los datos relacionados a una tarea específica, usuario o subproyecto.&lt;br /&gt;
&lt;br /&gt;
[[File:Grass database.png]]&lt;br /&gt;
&lt;br /&gt;
==== Creando una base de datos de GRASS para el tutorial ====&lt;br /&gt;
Por favor descargue la [https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip Localización de muestra de  GRASS de North Carolina], ponga atención de la ubicación en la cual se guardan los archivos dentro de su computadora.&lt;br /&gt;
&lt;br /&gt;
Ahora, cree (a menos que ya lo haya hecho) una carpeta llamada &amp;lt;tt&amp;gt;grassdata&amp;lt;/tt&amp;gt; (base de datos de GRASS) en su carpeta Home (o Documentos). Descomprima los datos descargados en esta carpeta. Ahora debe teer la Localización  &amp;lt;tt&amp;gt;nc_spm_08_grass7&amp;lt;/tt&amp;gt; en &amp;lt;tt&amp;gt;grassdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=1 widths=500 heights=250&amp;gt;Image:GRASS_startup_ncspm.png|GRASS GIS 7.2 startup dialog with North Carolina sample dataset&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mostrar y explorar los datos ====&lt;br /&gt;
&lt;br /&gt;
Ahora que tenemos los datos en la base de datos de GRASS correcta, lanzamos la Interfaz Gráfica de Usuario (GUI) en el Directorio de mapas ''user1''.&lt;br /&gt;
&lt;br /&gt;
La interfaz GUI permite mostrar los datos vectoriales y ráster, así como acercarse y alejarse. Otras opciones de exploración y visualización también son posibles usando consultas o añadiendo leyendas, por ejemplo. La captura de pantalla de abajo muestra cómo se pueden añadir diferentes capas de mapas (izquierda) y mostrar los metadatos de las capas de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=2  widths=500 heights=250&amp;gt;&lt;br /&gt;
Image:Wxgui_add_elev_lid.png|Añadir capa de mapa ráster.&lt;br /&gt;
Image:Wxgui_add_legend_elev_lid.png|Añadir leyeda de ráster.&lt;br /&gt;
Image:GRASS FUTURES wxGUI display.png|Administrador de capas y Display de mapas. Las anotaciones muestran cómo añadir una capa ráster, hacer consultas, añadir leyenda.&lt;br /&gt;
Image:wxGUI_metadata_rinfo.png|Mostrar metadatos de mapa ráster al hacer click derecho en la capa.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Módulos de GRASS GIS ===&lt;br /&gt;
Una de las ventajas d eGRASS es la diversidad y cantidad de módulos que le permiten analizar los diferentes aspectos espaciales y temporales. GRASS GIS tiene más de  [https://grass.osgeo.org/grass70/manuals/full_index.html 500 módulos distintos] en la distribución núcleo y más de  [https://grass.osgeo.org/grass70/manuals/addons/ 230 módulos de extensión addon] que pueden ser usados para preparar y analizar capas de datos.&lt;br /&gt;
&lt;br /&gt;
La funcionalidad de GRASS está disponible a través de ''módulos'' (herramientas, funciones). Existe en GRASS una convención de nombrar a los módulos de acuerdo a su función, de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Prefijo !! Función !! Ejemplo&lt;br /&gt;
|-&lt;br /&gt;
| r.* || procesamiento ráster || ''{{cmd|r.mapcalc}}'': álgebra de mapas&lt;br /&gt;
|-&lt;br /&gt;
| v.* || procesamiento vectorial  || ''{{cmd|v.clean}}'': limpieza topológica&lt;br /&gt;
|-&lt;br /&gt;
| i.* || procesamiento de imágenes  || ''{{cmd|i.segment}}'': reconocimiento de objetos&lt;br /&gt;
|-&lt;br /&gt;
| db.* || administración de bases de datos || ''{{cmd|db.select}}'': seleccionar valores de una tabla&lt;br /&gt;
|-&lt;br /&gt;
| r3.* || procesamiento ráster 3D   || ''{{cmd|r3.stats}}'': estadísticas de ráster 3D&lt;br /&gt;
|-&lt;br /&gt;
| t.* || procesamiento de datos temporales  || ''{{cmd|t.rast.aggregate}}'': agregación temporal&lt;br /&gt;
|-&lt;br /&gt;
| g.* || administración general de datos || ''{{cmd|g.rename}}'': renombrar mapa&lt;br /&gt;
|-&lt;br /&gt;
| d.* || pantalla ||''{{cmd|d.rast}}'': mostrar mapa ráster&lt;br /&gt;
|}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos son los grupos de módulos principales. Hay algunos otros que son específicos. Note también que algunos módulos tienen varios puntos dentro del nombre. Esto sugiere otro agrupamiento. Por ejemplo, los módulos que inician con ''v.net.'' tienen que ver con análisis de redes vectoriales.&lt;br /&gt;
&lt;br /&gt;
El nombre del módulo ayuda a entender su función, por ejemplo ''v.in.lidar'' inicia con ''v'' así que tiene que ver con mapas vectoriales, el nombre continúa con ''in'' lo que indica que el módulo es para importar datos a la Base de datos espacial de GRASS GIS y finalmente ''lidar'' indica que tiene que ver con nubes de puntos lidar.&lt;br /&gt;
&lt;br /&gt;
==== Encontrando y corriendo un módulo ====&lt;br /&gt;
&lt;br /&gt;
Para encontrar un módulo para su análisis, escriba el término en la caja de búsqueda en la pestaña ''Módulos'' (''Modules'') en el ''Administrador de capas'' (''Layer manager''), luego presione Enter hasta que encuentre el módulo.&lt;br /&gt;
&lt;br /&gt;
De manera alternativa, puede buscar a través de el árbol de módulos en la pestaña ''Módulos'' (''Modules''). Puede también buscar en el menú principal. Por ejemplo, para encontrar información sobre un mapa ráster, use:''Ráster → Reportes y estadísticas → Metadatos básicos del ráster'' (''Raster → Reports and statistics → Basic raster metadata'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:wxGUI_module_search.png|Búsqueda de un módulo en el árbol de módulos (busca en nombre, descripción, palabras clave)&lt;br /&gt;
Image:wxGUI_menu_rinfo.png|Los módulos también están en el menú principal&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Correr un módulo como un comando ====&lt;br /&gt;
Si ya sabe el nombre del módulo, puede simplemente usar la línea de comandos. La GUI ofrece una pestaña de consola de Comandos, con una línea de comandos específicamente construida para correr los módulos de GRASS GIS. Si escribe el nombre ahí, obtendrá sugerencias para completar automáticamete el nombre. Luego de presionar Enter, obtendrá una GUI para el módulo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:wxGUI_console_completion.png|Sugerencia de autocompletado cuando se escribe el nombre del módulo: Al escribir el prefijo r. tenemos una lista de módulos que inician con el prefijo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puede usar la línea de comandos para correr todo el comando cuando ya lo tiene, esto es, módulo y lista de parámetros, en las instrucciones.&lt;br /&gt;
&lt;br /&gt;
==== Línea de comandos vs. Interfaz GUI ====&lt;br /&gt;
Los módulos de GRASS pueden ser ejecutados tanto a través de la GUI o por la interfaz de línea de comandos. La GUI ofrece una aproximación más amigable para ejecutar los módulos donde el usuario puede navegar en las capas de datos cuando quiera analizar y modificar las opciones de procesamiento simplemente haciendo click en las cajas de la GUI. La GUI también ofrece un manual fácilmente accesible de cómo ejecutar el módulo. LA interfaz de línea de comandos permite ejecutar un módulo usando las opciones del comando específicas para el módulo. Esto es conveniente cuando se están corriendo análisis similares con pequeñas modificaciones o cuando se está familiarizado con los comandos de los módulos para un procesamiento eficiente. En este taller se dan los comandos, que pueden ser copiados y pegados en la línea de comando, aunque también se puede usar de manera paralela la GUI y la línea de comandos, dependiendo de la preferencia personal. Eche un vistazo cómo la {{cmd|wxGUI.modules|version=71|desc=GUI y la línea de comandos}} representan la misma herramienta.&amp;lt;br /&amp;gt;''Ejercicio:'' calcular el aspecto (orientación) dado un modelo digital de elevación usando el módulo {{cmd|r.slope.aspect}} usando tanto la GUI del módulo y la línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ¿Cómo encontrar módulos? Los módulos están organizados por su funcionalidad en el menú de la wxGUI, o puede buscarlos en la pestaña de Buscar módulos. Si ya sabe qué modulo usar, puede simplemente escribirlo en la consola de comandos de la wxGUI.&lt;br /&gt;
&lt;br /&gt;
==== Parámetros de módulo ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Wxgui_module_parameters_r_neighbors.png|Diálogo del módulo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El mismo análisis se puede hacer usando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 r.neighbors -c input=elevation output=elev_smooth size=5&lt;br /&gt;
&lt;br /&gt;
De manera alterna, puede rellenar parámetro por parámetro en la GUI, cuando ya tiene el comando.&lt;br /&gt;
&lt;br /&gt;
=== Región computacional ===&lt;br /&gt;
Antes de usar el módulo para calcular un nuevo mapa ráster, debe definir correctamente una región computacional. Todos los cálculos que se hacen sobre rásters se realizan dentro de una extensión especificada y con una resolución dada.&lt;br /&gt;
&lt;br /&gt;
La región computacional es un concepto de rásters importante dentro de GRASS GIS. En GRASS una región computacional puede ser definida dentro de una región ocupada por datos de mayor extensión para un análisis de prueba más rápido o por ejemplo dentro de regiones basadas en unidades administrativas. Proveemos algunos puntos para tener en cuenta cuando se use la función de región computacional:&lt;br /&gt;
* definida por extensión de la región y la resolución ráster&lt;br /&gt;
* aplica a todas las operaciones ráster&lt;br /&gt;
* persiste entre sesiones de GRASS, puede ser diferente para diferentes Directorios de mapas (mapsets)&lt;br /&gt;
* ventajas: mantiene la consistencia, evita el recorte, para tareas computacionalmente demandantes definir una región más pequeña, revisar si el resultado es bueno y luego definir la región computacional para toda el área de estudio y volver a correr el análisis.&lt;br /&gt;
* corra &amp;lt;code&amp;gt;g.region -p&amp;lt;/code&amp;gt;, o en el menú ''Configuraciones'' - ''Región'' - ''Mostrar región'' para ver la configuración actual de la región.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Computational_region_two_rasters.png| Concepto de región computacional: un ráster con una extensión grade (azul) se muestra junto con otro más pequeño (verde). La región computacional (rojo) se define para que sea igual al ráster pequeño, así los cálculos estarán limitados a la región que ocupa el ráster menor aún cuando la entrada sea el ráster mayor. (No se muestra en la imagen: también la resolución, no solo la extensión, es igual a la resolución del ráster menor.)&lt;br /&gt;
Image:WxGUI set region.png|Modos sencillos para definir la región computacional desde la GUI. A la izquierda, definir la región para que sea igual a un mapa ráster. A la derecha, seleccionar la opción señalada y luego defina la región dibujando un rectángulo.&lt;br /&gt;
Image:Wxgui_computational_region_set_from_raster.png|Definir la región computacional (extensión y resolución) para que sea igual a un ráster (pestaña de ''Capas'' en el ''Administrador de capas'')&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los valores numéricos de la región computacional pueden ser revisados usando:&lt;br /&gt;
&lt;br /&gt;
 g.region -p&lt;br /&gt;
&lt;br /&gt;
Luego de ejecutar el comando, obtendrá algo como esto:&lt;br /&gt;
&lt;br /&gt;
 norte:      220750&lt;br /&gt;
 sur:      220000&lt;br /&gt;
 oeste:       638300&lt;br /&gt;
 este:       639000&lt;br /&gt;
 nsres:      1&lt;br /&gt;
 eores:      1&lt;br /&gt;
 rows:       750&lt;br /&gt;
 columnas:       700&lt;br /&gt;
 celdas:      525000&lt;br /&gt;
&lt;br /&gt;
La región computacional también puede ser definida usando un mapa vectorial. En este caso, solamente se define la extensión (ya que el mapa vectorial no tiene resolución - al menos no en el sentido del mapa ráster). En la GUI, esto se puede hacer en la misma forma que con el mapa ráster. En la línea de comandos se ve así:&lt;br /&gt;
&lt;br /&gt;
 g.region vector=lakes&lt;br /&gt;
&lt;br /&gt;
La resolución se puede definir de manera separada usando el parámetro &amp;lt;code&amp;gt;res&amp;lt;/code&amp;gt; del módulo {{cmd|g.region}}. Las unidades son las mismas de la Localización actual, en nuestro caso metros. Esto se puede hacer en la pestaña ''Resolución'' del díalogo de {{cmd|g.region}} o en la línea de comandos del siguiente modo (usando también la bandera &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; para mostrar los nuevos valores:&lt;br /&gt;
&lt;br /&gt;
 g.region res=3 -p&lt;br /&gt;
&lt;br /&gt;
La nueva resolución puede modificarse ligeramente en este caso para ajustar a la región, que no estamos cambiando. Sin embargo, a menudo queremos que la resolución sea igual a los valores que proveemos y estamos de acuerdo con una pequeña modificación a la extensión. Para eso está la bandera &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
El siguiente comando de ejemplo usará la extensión del vectorial llamado &amp;lt;code&amp;gt;lakes&amp;lt;/code&amp;gt;, con una resolución &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, modificando la extensión para alinearla a que la resolución sea de 10 metros, y muestra los valores de la nueva región computacional:&lt;br /&gt;
&lt;br /&gt;
 g.region vector=lakes res=10 -a -p&lt;br /&gt;
&lt;br /&gt;
=== Correr módulos ===&lt;br /&gt;
Encuentre el módulo para calcular pendiente y aspecto en el menú o en el árbol de módulo en ''Ráster → Análisis de terreno → Pendiente y aspecto'' o simplemente corra {{cmd|r.slope.aspect}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:r_slope_aspect_1_required.png|Seleccione el mapa ráster de entrada de elevación.&lt;br /&gt;
Image:r_slope_aspect_2_outputs.png|Ingrese los nombres de los mapas ráster de salida. También note que el comando correspondiente aparece en la parte inferior del diálogo GUI.&lt;br /&gt;
Image:r_slope_aspect_3_manual.png|Maual de uso incluido en el diálogo GUI para ver más detalles.&lt;br /&gt;
Image:r_slope_aspect_4_run.png|Presione Ejecutar (1). Cuando se haya calculado, el resultado se añade al Administrador de capas y al Visualizador de mapas. Use Cerrar (2) para cerrar la ventana.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vista 3D ===&lt;br /&gt;
Podemos explorar nuestra área de estudio en vista 3D.&lt;br /&gt;
# Añada &amp;lt;tt&amp;gt;elev_lid792_1m&amp;lt;/tt&amp;gt; y quite de la selección (deseleccione) o remueva cualquier otra capa.&lt;br /&gt;
# Defina la región computacional a este ráster. Cambie a la vista 3D (en la esquina derecha del Visualizador de mapas).&lt;br /&gt;
# Ajuste la vista (perspectiva, altura, exageración vertical)&lt;br /&gt;
# En la pestaña ''Datos'', defina ''&lt;br /&gt;
In ''Data'' tab, set ''Resolución modo Fino'' a 1 y defina &amp;lt;tt&amp;gt;slope&amp;lt;/tt&amp;gt; (calculado en el paso anterior) como el color de la superficie.&lt;br /&gt;
# Cuando termine, cambie de nuevo a la vista 2D.&lt;br /&gt;
[[File:Elevation_slope_3D_view.png|800px|thumb|center| Vista 3D de el MDE elev_lid792_1m con slope como color]]&lt;br /&gt;
&lt;br /&gt;
== Análisis de rásters y vectoriales ==&lt;br /&gt;
&lt;br /&gt;
=== Distancia desde el borde del bosque ===&lt;br /&gt;
&lt;br /&gt;
Use álgebra de mapas para extraer una clase de bosque dada (en este caso la 5) del ráster de clasificación de uso de suelo:&lt;br /&gt;
&lt;br /&gt;
 r.mapcalc &amp;quot;forest = if(landclass96 == 5, 1, null())&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La función &amp;lt;code&amp;gt;if()&amp;lt;/code&amp;gt; que se usó tiene tres parámetros, con la siguiente sintáxis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 if(condición, valor si verdadero, valor si falso)&lt;br /&gt;
&lt;br /&gt;
Después usamos el operador &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; que evalúa como verdadero solo cuando ambos lados son iguales. Finalmente usamos la función &amp;lt;code&amp;gt;null()&amp;lt;/code&amp;gt; que representa valor nulo NULL (sin dato).&lt;br /&gt;
&lt;br /&gt;
Ahora podemos obtener la distancia al borde del bosque usando el módulo {{cmd|r.grow.distance}}, que calcula distancias a áreas con valores en áreas sin valores (con NULL) o al contrario. De manera predeterminada nos da la distancia al borde del bosque desde fuera del bosque, pero ahora usaremos la bandera &amp;lt;code&amp;gt;-n&amp;lt;/code&amp;gt; para obtener la distancia al borde desde dentro del mismo bosque:&lt;br /&gt;
&lt;br /&gt;
 r.grow.distance -n input=forest distance=distance&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Create new color table for raster map forest.png|Definiendo el color verde para el mapa ráster de bosque (Click derecho en la capa de mapa ráster, seleccione ''Establecer paleta de colores interactivamente'').&lt;br /&gt;
Image:Wxgui_r_grow_distance_from_forest_edge.png|Diálogo de r.grow.distance y las distancias calculadas como fondo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Etadísticas de putos (Point statistics) ===&lt;br /&gt;
&lt;br /&gt;
==== Importar un Archivo Shapefile ====&lt;br /&gt;
&lt;br /&gt;
Descargue el archivo Shape de muestra [https://github.com/ncsu-geoforall-lab/grass-intro-workshop/raw/master/files/points_of_interest.zip points_of_interest.zip] y descomprímalo.&lt;br /&gt;
&lt;br /&gt;
Importe el archivo usando el módulo v.in.ogr. Note que necesita especificar la ruta de búsqueda completa.&lt;br /&gt;
&lt;br /&gt;
 v.in.ogr input=/ruta/a/points_of_interest.shp output=points_of_interest&lt;br /&gt;
&lt;br /&gt;
==== Generando una malla hexagonal ====&lt;br /&gt;
&lt;br /&gt;
Para calcular la densidad de puntos en una malla hexagonal a partir del mapa vectorial de points_of_interest use el mapa vectorial mismo para definir la extesión de la región computacional. La resolución está basada en el tamaño deseado de los hexágonos.&lt;br /&gt;
&lt;br /&gt;
 g.region vector=points_of_interest res=2000 -pa&lt;br /&gt;
&lt;br /&gt;
Aunque la Región computacional generalmente no es usada para el procesamiento de vectoriales, la malla hexagonal es creada como un mapa vectorial basándose en la extensión previamente seleccionada y en el tamaño de la malla.&lt;br /&gt;
&lt;br /&gt;
 v.mkgrid map=hexagons -h&lt;br /&gt;
&lt;br /&gt;
==== Calculando estadísticas de puntos en polígonos ====&lt;br /&gt;
&lt;br /&gt;
Lo que sigue es el conteo del número de puntos por hexágonos usando el módulo v.vect.stats.&lt;br /&gt;
&lt;br /&gt;
 v.vect.stats points=points_of_interest areas=hexagons count_column=count&lt;br /&gt;
&lt;br /&gt;
Por último, el siguiente comando define la paleta de colores a viridis basada en la columna del conteo. Use la paleta de colores ryb si tiene GRASS GIS 7.0.&lt;br /&gt;
&lt;br /&gt;
 v.colors map=hexagons use=attr column=count color=viridis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:V_vect_stats_hexagons_with_module_tree.png|Hexágonos coloreados y módulos usados para crearlos.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Análisis de estructura de paisaje ==&lt;br /&gt;
Para el siguiente ejemplo usaremos el ráster &amp;lt;code&amp;gt;landuse96_28m&amp;lt;/code&amp;gt; de nuestro conjunto de datos de North Carolina, donde los parches representan diferentes coverturas de suelo (usos). Usamos el módulo &lt;br /&gt;
Vamos a usa el módulo {{cmd|r.neighbors}} y las extensiones (addons) {{addonCmd|r.diversity}} y {{addonCmd|r.forestfrag}}.&lt;br /&gt;
Primero instalamos las extensiones:&lt;br /&gt;
&lt;br /&gt;
  g.extension r.diversity&lt;br /&gt;
  g.extension r.forestfrag&lt;br /&gt;
&lt;br /&gt;
Cerramos la GUI de GRASS y la abrimos de nuevo.&lt;br /&gt;
&lt;br /&gt;
'''Riqueza'''&lt;br /&gt;
Primero calculamos la riqueza (cantidad de clases únicas o distintas), usando {{cmd|r.neighbors}}. Al usar una ventana móvil, creamos un ráster que representa la variabilidad espacial de la riqueza. El tamaño de la ventana está en celdas.&lt;br /&gt;
&lt;br /&gt;
  g.region raster=landuse96_28m&lt;br /&gt;
  r.neighbors input=landuse96_28m output=richness method=diversity size=15&lt;br /&gt;
&lt;br /&gt;
'''Índices de paisaje'''&lt;br /&gt;
&lt;br /&gt;
La extensión {{addonCmd|r.diversity}} calcula diversos índices de paisaje usando una ventana móvil.&lt;br /&gt;
Está basado en los módulos {{cmd|r.li}} para análisis de estructura de paisaje.&lt;br /&gt;
En este ejemplo calculamos los índices de diversidad de Simpson, Shannon y Renyi con un rango de ventanas móviles:&lt;br /&gt;
&lt;br /&gt;
  r.diversity input=landuse96_28m prefix=index alpha=0.8 size=9-21 method=simpson,shannon,renyi&lt;br /&gt;
&lt;br /&gt;
Esto genera 9 rásters con nombres como &amp;lt;code&amp;gt;index_simpson_size_9&amp;lt;/code&amp;gt;. Podemos añadirlos al Visualizador de mapas usando ''Añadir varios ráster o vectoriales' en el Administrador de capas, en el menú ''Archivo''.&lt;br /&gt;
&lt;br /&gt;
Para verlos, necesitamos definir la misma paleta de colores para mapas ráster del mismo índice.&lt;br /&gt;
&lt;br /&gt;
  r.colors map=index_shannon_size_21,index_shannon_size_15,index_shannon_size_9 color=viridis&lt;br /&gt;
  r.colors map=index_renyi_size_21_alpha_0.8,index_renyi_size_15_alpha_0.8,index_renyi_size_15_alpha_0.8 color=viridis&lt;br /&gt;
  # usamos la paleta de colores grey1.0 por que Simpson es de 0 a 1&lt;br /&gt;
  r.colors map=index_simpson_size_21,index_simpson_size_15,index_simpson_size_9 color=grey1.0&lt;br /&gt;
&lt;br /&gt;
'''Fragmentación del bosque'''&lt;br /&gt;
[[File:Forest_fragmentation.png|thumbnail|right|Fragmentación del bosque calculado con la extensión r.forestfrag]]&lt;br /&gt;
El módulo {{addonCmd|r.forestfrag}} calcula la fragmentación del bosque siguiendo una metodología propuesta por [https://www.ecologyandsociety.org/vol4/iss2/art3/ Riitters et al. (2000)].&lt;br /&gt;
&lt;br /&gt;
Primero se marcan todas las celdas que tienen bosque como 1 y todo lo demás como 0:&lt;br /&gt;
&lt;br /&gt;
  # Definir la región&lt;br /&gt;
  g.region raster=landclass96&lt;br /&gt;
  # listar las clases:&lt;br /&gt;
  r.category map=landclass96&lt;br /&gt;
  # seleccionar clases&lt;br /&gt;
  r.mapcalc &amp;quot;forest = if(landclass96 == 5, 1, 0)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Use el nuevo mapa ráster de presencia de bosque para calcular el índice de fragmentación del bosque con una ventana de tamaño 15:&lt;br /&gt;
&lt;br /&gt;
  r.forestfrag input=forest output=fragmentation window=15&lt;br /&gt;
&lt;br /&gt;
Reporte de la distribución de categorías de fragmentación:&lt;br /&gt;
&lt;br /&gt;
  r.report map=fragmentation units=k,p&lt;br /&gt;
&lt;br /&gt;
== Realizando scripts con Python ==&lt;br /&gt;
&lt;br /&gt;
El modo más sencillo de ejecutar el código de Python que use paquetes de GRASS GIS es simplemente usar el Editor Simple de Python integrado a GRASS GIS accesible desde la barra de herramientas o la pestaña Python en el Administrador de capas. Otra opción es escribir código de Python en su editor de texto favorito, como Notepad++ (note que los editores de Python son editores de texto simple). Luego corra el script en GRASS GIS usando el menú principal Archivo -&amp;gt; Lanzar script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Simple python editor v buffer.png|''Editor simple de Python'' integrado a GRASS GIS (desde la versión 7.2) con la pestaña ''Python'' en el fondo y que contiene una consola de Python interactiva.&lt;br /&gt;
Image:GRASS GUI Python shell.png|Pestaña ''Python'' con una consola de Python interactiva.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La GRASS GIS 7 Pytho Scripting Library provee funciones para llamar los módulos de GRASS dentro de scripts como subprocesos. Las funciones más usadas incluyen: &lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.run_command run_command]''': usualmente usado con módulos cuya salida son datos ráster/vectorial y no se espera un texto como salida.&lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.read_command read_command]''': usado cuando se tiene interés en el texto de salida&lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.parse_command parse_command]''': usado con módulos que producen texto como salida en pares clave=valor.&lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.write_command write_command]''': usado con módulos que se espera un texto de entrada, ya sea de la entrada estándar o un archivo.&lt;br /&gt;
&lt;br /&gt;
Además de esto, esta librería provee varias funciones simplificadas (wrapper functions) para módulos que se llaman frecuentemente.&lt;br /&gt;
&lt;br /&gt;
==== Llamando módulos GRASS GIS ====&lt;br /&gt;
Usaremos la Consola de Python de GRASS GIS para correr los comandos. Para scripts más largos, puede crear un archivo de texto, guardarlo en el directorio de trabajo actual y correrlo con &amp;lt;tt&amp;gt;python myscript.py&amp;lt;/tt&amp;gt; a partir de la consola de comandos GUI o de una terminal.&lt;br /&gt;
&lt;br /&gt;
'''Tip''': Cuando copie fragmentos de código a la consola GUI de Python, de click derecho en la posición y seleccione '''Paste Plus''' en el menú de contexto. De otro modo no va a funcionar para fragmetos de código de varias líneas.&lt;br /&gt;
&lt;br /&gt;
Empezamos por importar la librería GRASS GIS Python Scriptig:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de correr cualquier módulo de GRASS, necesita definir la región computacional usando {{cmd|g.region}}. En este ejemplo, definimos la extensión de la región computacional y la resolución a la capa ráster &amp;lt;tt&amp;gt;elevation&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('g.region', raster='elevation')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La función run_command() es la más frecuentemente usada. Aquí aplicamos la operación de promedio focal ({{cmd|r.neighbors}}) para suavizar la capa ráster de elevación. Note que la sintáxis es similar al usado en la consola, solo que las banderas se especifican como parámetros.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('r.neighbors', input='elevation', output='elev_smoothed', method='average', flags='c')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si corremos los comandos de Python desde la consola GUI de Python, podemos usar &amp;lt;tt&amp;gt;AddLayer&amp;lt;/tt&amp;gt; para añadir las capas recién creadas:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
AddLayer('elev_smoothed')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Llamado módulos de GRASS GIS con entrada o salida de texto ====&lt;br /&gt;
La salida de texto de los módulos puede ser capturada usando la función read_command().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.read_command('g.region', flags='p')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.read_command('r.univar', map='elev_smoothed', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Algunos módulos pueden producir una salida en formato de valores con clave (key-value), esto se realiza con la bandera '''-g'''. La función parse_command() automaticamente analiza esta salida y regresa un diccionario. En este ejemplo llamamos {{cmd|g.proj}} para mostrar los parámetros de la proyección de la Localización actual.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.parse_command('g.proj', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como comparación, abajo el mismo ejemplo, pero usando la función read_commad():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.read_command('g.proj', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Algunos módulos requieren que el texto de entrada esté en un archivo o sea proveído en la entrada estándar. Usando la función write_command() podemos pasar el texto al módulo. Aquí, estamos creando un nuevo vectorial con un punto con {{cmd|v.in.ascii}}. Note que el parámetro ''stdin'' no es usado como un parámetro de módulo, pero su contenido es pasado al subproceso como la entrada estándar.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.write_command('v.in.ascii', input='-', stdin='%s|%s' % (635818, 221342), output='point')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si corremos los comandos Python desde la consola GUI de Python, podemos usar &amp;lt;tt&amp;gt;AddLayer&amp;lt;/tt&amp;gt; para añadir la capa recién creada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
AddLayer('point')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Funciones simplificadas (wrapper functions) ====&lt;br /&gt;
Algunos módulos tienen funciones simplificadas (wrapper functions) para simplificar las tareas de uso común.&lt;br /&gt;
Por ejemplo podemos obtener la información sobre una capa ráster con [https://grass.osgeo.org/grass70/manuals/libpython/script.html?highlight=mapcalc#script.raster.raster_info raster_info] que es la función simplificada de {{cmd|r.info}},&lt;br /&gt;
o una capa vectorial con [https://grass.osgeo.org/grass70/manuals/libpython/script.html?script.vector.vector_info vector_info].&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.raster_info('elevation')&lt;br /&gt;
gscript.vector_info('point')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro ejemplo es usando la [https://grass.osgeo.org/grass70/manuals/libpython/script.html?highlight=mapcalc#script.raster.mapcalc simplificada de r.mapcalc] para álgebra ráster:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.mapcalc(&amp;quot;elev_strip = if(elevation &amp;gt; 100 &amp;amp;&amp;amp; elevation &amp;lt; 125, elevation, null())&amp;quot;)&lt;br /&gt;
gscript.read_command('r.univar', map='elev_strip', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La función [https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.region region] es un modo conveniente de obtener la configuración de la región actual. Regresa un diccionario con valores convertido a los tipos apropiados (flotantes y enteros).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
region = gscript.region()&lt;br /&gt;
print region&lt;br /&gt;
# área de celdas en unidades de mapa (en Localizaciones proyectadas)&lt;br /&gt;
region['nsres'] * region['ewres']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos enlistar los datos guardados en una Localización de GRASS GIS con la simplificada de {{cmd|g.list}}. Con [https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.list_grouped list_grouped], las capas de mapas son agrupadas por Directorios de mapas (capas ráster en este ejemplo):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.list_grouped(type=['raster'])&lt;br /&gt;
gscript.list_grouped(type=['raster'], pattern=&amp;quot;landuse*&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí hay un ejemplo de un wrapper diferente para {{cmd|g.list}} [https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.list_pairs list_pairs] que estrucutra la salida como listas de pares (nombre, Directorio de mapas). Obtenemos el Directorio de mapas actual con la wrapper de {{cmd|g.gisev}}.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
current_mapset = gscript.gisenv()['MAPSET']&lt;br /&gt;
gscript.list_pairs('raster', mapset=current_mapset)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ejercicio ====&lt;br /&gt;
Usando &amp;quot;elev_*&amp;quot; como prefijo en el nombre, exportar todas las capas ráster desde su Directorio de mapas como GeoTiff (vea {{cmd|r.out.gdal}}. No olvide definir la región actual {{cmd|g.region}}) para cada mapa para que sea igual a la extensión y resolución de cada uno, ya que pueden variar.&lt;br /&gt;
&lt;br /&gt;
== Creando una Localización GRASS GIS nueva e importar datos ==&lt;br /&gt;
Para el siguiente ejemplo con R, necesitamos crear primero una nueva Localización GRASS e importar datos. Vamos a usar los datos de temperatura PRISM y los límites vectoriales de los estados de EEUU.&lt;br /&gt;
Vamos a crear una nueva Localización basada en el código EPSG [http://epsg.io/4269 4269] (datum NAD83).&lt;br /&gt;
# Inicie GRASS GIS&lt;br /&gt;
# Seleccione ''Nueva'' en la parte izquierda de la pantalla de bienvenida para iniciar el Ayudante de Localizaciones&lt;br /&gt;
# En el ayudante, ingrese el nombre de la nueva Localización, por ejemplo PRISM, presione ''Siguiente''&lt;br /&gt;
# Seleccione ''Seleccionar código EPSG del sistema de referencia espacial'', presione ''Siguiente''&lt;br /&gt;
# Ingrese el número 4269 en el campo de ''Código EPSG'', presione ''Siguiente''&lt;br /&gt;
# Seleccione ''1'' en el diálogo de transformación del Datum&lt;br /&gt;
# Revise las definiciones PROJ.4 y presione &amp;quot;Finalizar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se crea automáticamente el Directorio de mapas PERMANENT, así que puede iniciar su sesión GRASS.&lt;br /&gt;
&lt;br /&gt;
Descargue y descomprima el siguiente conjunto de datos en una carpeta:&lt;br /&gt;
* US Census Bureau: [http://www2.census.gov/geo/tiger/GENZ2015/shp/cb_2015_us_state_20m.zip Límites cartográficos de los estados de EEUU]&lt;br /&gt;
* [http://services.nacse.org/prism/data/public/normals/4km/tmean/annual temperatura media anual normal de 30 años PRISM, malla de 4km]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/US_elevation.tif datos de elevación SRTM para los EEUU]&lt;br /&gt;
&lt;br /&gt;
Definir el Directorio de trabajo actual en GRASS GIS para hacer más fácil el encontrar los archivos extraidos. En el menú ''Configuraciones'' - ''Entorno de trabajo de GRASS'' - ''Cambiar de directorio de trabajo'' defina el directorio en el cual tenga los datos. De manera alternativa en la consola de comandos de la GUI escriba &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; y seleccione el directorio.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos importarlo a GRASS GIS:&lt;br /&gt;
&lt;br /&gt;
  r.import input=PRISM_tmean_30yr_normal_4kmM2_annual_bil.bil output=temp_mean&lt;br /&gt;
  v.import input=cb_2015_us_state_20m.shp output=boundaries&lt;br /&gt;
  r.import input=US_elevation.tif output=elevation&lt;br /&gt;
&lt;br /&gt;
No especificamos la ruta completa a los archivos gracias a que definimos más arriba el directorio de trabajo. Si usamos el diálogo, podemos explorar los archivos usando el botón Explorar.&lt;br /&gt;
&lt;br /&gt;
Ahora visualizamos los datos y definimos la rampa de colores apropiada para la temperatura:&lt;br /&gt;
&lt;br /&gt;
  r.colors map=temp_mean@PERMANENT color=celsius&lt;br /&gt;
&lt;br /&gt;
== Realizando scripts con R ==&lt;br /&gt;
&lt;br /&gt;
Usar R con GRASS GIS se puede hacer de dos maneras:&lt;br /&gt;
&lt;br /&gt;
* Usar ''R dentro de una sesión de GRASS GIS'', i.e. puede iniciar R (o RStudio) desde la línea de comandos de GRASS GIS.&lt;br /&gt;
** Trabaja con datos en la Base de datos espaciales GRASS GIS usando GRASS GIS&lt;br /&gt;
** No inicia la función &amp;lt;code&amp;gt;initGRASS()&amp;lt;/code&amp;gt; (GRASS GIS ya está corriendo).&lt;br /&gt;
* Usando ''GRASS GIS dentro de una sesión de R'', i.e. se conecta a la Base de datos espaciales de GRASS GIS desde R (o RStudio).&lt;br /&gt;
** Pone datos en la Base de datos GRASS GIS solamente para realizar las operaciones de GRASS GIS.&lt;br /&gt;
** Use la función &amp;lt;code&amp;gt;initGRASS()&amp;lt;/code&amp;gt; para iniciar GRASS GIS dentro de R.&lt;br /&gt;
&lt;br /&gt;
Vamos a correr R dentro de una sesión de GRASS GIS (la primer manera). Lanzar R dentro de GRASS GIS e instalar los paquetes ''rgrass7'' y ''rgdal''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
install.packages(&amp;quot;rgrass7&amp;quot;)&lt;br /&gt;
install.packages(&amp;quot;rgdal&amp;quot;)&lt;br /&gt;
library(&amp;quot;rgrass7&amp;quot;)&lt;br /&gt;
library(&amp;quot;rgdal&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ejecutar módulos GRASS usando la función &amp;lt;code&amp;gt;execGRASS&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;g.region&amp;quot;, raster=&amp;quot;temp_mean&amp;quot;, flags=&amp;quot;p&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar la relación entre la temperatura, la elevación y la latitud.&lt;br /&gt;
&lt;br /&gt;
Primero vamos a generar un ráster con los valores de latitud:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;r.mapcalc&amp;quot;, expression=&amp;quot;latitude = y()&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nota: en un sistema de coordenadas proyectada puede usar {{cmd|r.latlong}}.&lt;br /&gt;
&lt;br /&gt;
Después, vamos a generar puntos aleatorios y muestear el conjunto de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;v.random&amp;quot;, output=&amp;quot;samples&amp;quot;, npoints=1000)&lt;br /&gt;
# esto va a restrigir el muestreo dentro de los límites de EEUU&lt;br /&gt;
# estamos sobreescribiendo muestras vectoriales, así que necesitamos usar la bandera overwrite (sobreescribir)&lt;br /&gt;
execGRASS(&amp;quot;v.random&amp;quot;, output=&amp;quot;samples&amp;quot;, npoints=1000, restrict=&amp;quot;boundaries&amp;quot;, flags=c(&amp;quot;overwrite&amp;quot;))&lt;br /&gt;
# creamos la tabla de atributos&lt;br /&gt;
execGRASS(&amp;quot;v.db.addtable&amp;quot;, map=&amp;quot;samples&amp;quot;, columns=c(&amp;quot;elevation double precision&amp;quot;, &amp;quot;latitude double precision&amp;quot;, &amp;quot;temp double precision&amp;quot;))&lt;br /&gt;
# muestreamos rásters individuales&lt;br /&gt;
execGRASS(&amp;quot;v.what.rast&amp;quot;, map=&amp;quot;samples&amp;quot;, raster=&amp;quot;temp_mean&amp;quot;, column=&amp;quot;temp&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;v.what.rast&amp;quot;, map=&amp;quot;samples&amp;quot;, raster=&amp;quot;latitude&amp;quot;, column=&amp;quot;latitude&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;v.what.rast&amp;quot;, map=&amp;quot;samples&amp;quot;, raster=&amp;quot;elevation&amp;quot;, column=&amp;quot;elevation&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nota: hay un módulo de extensión (addon) {{addonCmd|r.sample.category}} que simplifica este proceso y muestrea múltiples rásters.&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el administrador de tablas de atributos de GRASS GIS para inspeccionar los valores muestreados o usar {{cmd|v.db.select}} para enlistar los valores.&lt;br /&gt;
Exploramos el conjunto de datos en R:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
samples &amp;lt;- readVECT(&amp;quot;samples&amp;quot;)&lt;br /&gt;
summary(samples)&lt;br /&gt;
plot(samples@data)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calculamos el modelo lineal multivariado:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
linmodel &amp;lt;- lm(temp ~ elevation + latitude, samples)&lt;br /&gt;
summary(linmodel)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Predecimos la temperatura usando este modelo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
maps &amp;lt;- readRAST(c(&amp;quot;elevation&amp;quot;, &amp;quot;latitude&amp;quot;))&lt;br /&gt;
maps$temp_model &amp;lt;- predict(linmodel, newdata=maps)&lt;br /&gt;
spplot(maps, &amp;quot;temp_model&amp;quot;)&lt;br /&gt;
# write modeled temperature to GRASS raster and set color ramp&lt;br /&gt;
writeRAST(maps, &amp;quot;temp_model&amp;quot;, zcol=&amp;quot;temp_model&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;r.colors&amp;quot;, map=&amp;quot;temp_model&amp;quot;, color=&amp;quot;celsius&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comparamos el modelo lineal simple con los datos reales:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;r.mapcalc&amp;quot;, expression=&amp;quot;diff = temp_mean - temp_model&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;r.colors&amp;quot;, map=&amp;quot;diff&amp;quot;, color=&amp;quot;differences&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la GUI de GRASS, añadimos las capas ''temp_mean'' y ''temp_model'', las seleccionamos y vamos a ''Archivo'' - ''Ventana de visualización móvil'' para comparar visualmente el modelo y la temperatura real.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=1 widths=1100 heights=400&amp;gt;&lt;br /&gt;
Image:US_temp_model_comparison.png|Comparasión de la temperatura media anual PRISM y la temperatura modelada basada en latitud y elevación. Izquierda: diferencias entre el modelado y el real, en grados Celsius. Derecha: Usando el Visualizador de ventana móvil para evaluar visualmente el modelo (temperatura modelada del lado derecho).&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manipulación y visualización de datos Espacio-temporales ==&lt;br /&gt;
GRASS GIS7 tiene una nueva librería y una serie de módulos para el manejo y análisis de datos espacio-temporales.&lt;br /&gt;
El sistema (framework) temporal de GRASS no trabaja con capas de mapas individuales, sino con conjuntos de datos espacio-temporales. Un conjunto de datos es una colección de capas de mapas individuales con una marca de tiempo asignada. Todos los datos espaciales son guardados en la base de datos GRASS estándar, el sistema temporal administra el metadato temporal en una base de datos temporales separada.&lt;br /&gt;
&lt;br /&gt;
Información general en el manual: https://grass.osgeo.org/grass72/manuals/temporalintro.html&lt;br /&gt;
&lt;br /&gt;
Conceptos y terminología importante:&lt;br /&gt;
* Conjunto de datos ráster espacio temporales ('''strds''') son diseñados para manejar series de tiempos de mapas ráster. Los módulos que procesan strds tienen el prefijo ''t.rast''.&lt;br /&gt;
* Conjunto de datos ráster espacio temporales 3D ('''str3ds''') son diseñados para manejar series de tiempo de mapas ráster 3D. Los módulos que procesan str3ds tienen el prefijo ''t.rast3d''.&lt;br /&gt;
* Conjuntos de datos vectoriales espacio temporales ('''stvds''') son diseñados para manejar series de tiempo de mapas vectoriales. Los módulos que procesan stvds tienen prefijo ''t.vect''.&lt;br /&gt;
* Los Conjuntos de datos pueden usar ''intervals'' (intervalos) (definidos por marca de tiempo de inicio y término) o ''instances'' (solo tiempo de inicio)&lt;br /&gt;
* Los conjuntos de datos pueden usar tiempos ''absolute'' (absolutos) (marcas de tiempo como 2017-04-06 22:39:49) o ''relative'' (relativos) (por ej. (e.g., 4 years, -90 days).&lt;br /&gt;
* La ''granularity'' (granularidad) es el divisor común menor de la extensión temporal (y posibles vacíos (gaps)) de todos los mapas del conjunto de datos.&lt;br /&gt;
* La ''topology'' (topología) temporal analiza las relaciones temporales entre intervalos de tiempo.&lt;br /&gt;
* El ''sampling'' (muestreo) temporal es usado para determinar el estado de un proceso durante un segundo proceso.&lt;br /&gt;
&lt;br /&gt;
Vista general del flujo de trabajo:&lt;br /&gt;
# Crear un conjunto de datos vacío: strds, str3ds o stvds ({{cmd|t.create}}),&lt;br /&gt;
# registrar los mapas GRASS GIS ({{cmd|t.register}}),&lt;br /&gt;
# revisar el conjunto de datos espacio temporales creado ({{cmd|t.list}}), {{cmd|t.info}}, {{cmd|t.rast.list}})&lt;br /&gt;
# hacer el análisis {{cmd|t.rast.aggregate}}, {{cmd|t.info}}, {{cmd|t.rast.univar}}, {{cmd|t.vect.univar}}, ... ¡y muchos más!&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo de modelación de radiación solar ===&lt;br /&gt;
Vamos a generar datos espacio-temporales y luego explorarlos usando los módulos temporales y visualizarlos como una animación.&lt;br /&gt;
&lt;br /&gt;
Vamos a usar {{addonCmd|r.sun.hourly}} para calcular una serie de irradiancias solares durante un día en un modelo digital de superficie (incluye copas de los árboles) derivado previamente en la parte de lidar de este taller.&lt;br /&gt;
&lt;br /&gt;
Descargue la extensión (addon) si no lo ha hecho previamente:&lt;br /&gt;
&lt;br /&gt;
 g.extension r.sun.hourly&lt;br /&gt;
&lt;br /&gt;
Convierta la fecha del fía de hoy (o cualquier fecha) a día del año corriendo este comando en la pestaña de la consola de Python en la GUI.&lt;br /&gt;
&lt;br /&gt;
  from datetime import datetime&lt;br /&gt;
  datetime.now().timetuple().tm_yday&lt;br /&gt;
  # or for an arbitrary day:&lt;br /&gt;
  datetime.datetime(2017, 6, 21).timetuple().tm_yday&lt;br /&gt;
&lt;br /&gt;
Use este número para la opción día.&lt;br /&gt;
Calcular la series ráster de la irradiancia del haz (sea paciente) con el siguiente comando.&lt;br /&gt;
La serie de tiempo es registrada automáticamente en un conjunto de datos ráster espacio temporales.&lt;br /&gt;
&lt;br /&gt;
  # first set region&lt;br /&gt;
  g.region raster=el_D783_6m -p&lt;br /&gt;
  r.sun.hourly -t elevation=el_D783_6m start_time=6 end_time=20 day=101 year=2017 time_step=0.5 beam_rad_basename=solar nprocs=4&lt;br /&gt;
&lt;br /&gt;
Ahora cerciorémonos que el conjunto de datos temporales haya sido creado:&lt;br /&gt;
&lt;br /&gt;
  t.list type=strds&lt;br /&gt;
&lt;br /&gt;
Enliste los metadatos y la información analítica sobre el conjunto de datos:&lt;br /&gt;
&lt;br /&gt;
  t.info input=solar type=strds&lt;br /&gt;
&lt;br /&gt;
Muestre cuales capas ráster están registradas:&lt;br /&gt;
&lt;br /&gt;
  t.rast.list input=solar&lt;br /&gt;
&lt;br /&gt;
Defina la paleta de colores para el conjunto de datos creado.&lt;br /&gt;
Use la herramienta interactiva en el díalogo de t.rast.colors (pestaña ''Definir'', bajo ''reglas'')&lt;br /&gt;
o cree un archivo de texto con la siguiente regla de colores y páselo a la opción ''reglas'':&lt;br /&gt;
&lt;br /&gt;
  0% 60:60:60&lt;br /&gt;
  70% yellow&lt;br /&gt;
  100% 255:70:0&lt;br /&gt;
&lt;br /&gt;
  t.rast.colors input=solar rules=rules.txt&lt;br /&gt;
&lt;br /&gt;
Ahora visualizaremos los resultados como una animación.&lt;br /&gt;
&lt;br /&gt;
Inicie la herramienta de animaciones de GRASS GIS desde ''Archivo'' - ''Herramienta de animación'' y cree una nueva animación. Seleccione ''conjunto de datos ráster espacio temporales'', vea la siguiente figura para más detalles.&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=1 widths=1100 heights=500&amp;gt;&lt;br /&gt;
Image:Animation_solar_example.png|Usando la Herramienta de animación de GRASS GIS para animar la irradiancia solar durante un día. Calculado con {{addonCmd|r.sun.hourly}}.&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Procesamiento de datos Lidar ==&lt;br /&gt;
Vamos a importar una nube de puntos lidar como un archivo LAS y usar binning (use binning) para analizar nuestros datos, y luego interpolarlos para crear un modelo digital de superficie.&lt;br /&gt;
Vamos a usar {{cmd|r.in.lidar}} y {{cmd|v.in.lidar}} para trabajar con archivos LAS. En caso que no esté disponible en su instalación GRASS (GRASS necesita estar compilado con libLAS), use {{cmd|r.in.xyz}} y {{cmd|v.in.ascii}} con los archivos de texto correspondientes, el flujo de trabajo es muy similar.&lt;br /&gt;
&lt;br /&gt;
Datos necesarios:&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.las mosaico LAS para Raleigh]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.txt versión ttxt para el mosaico (todos los puntos)] and [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm_first.txt y solamente los primeros puntos de retorno]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Análisis Lidar usando binning ===&lt;br /&gt;
&lt;br /&gt;
Calcular la densidad de la nube de puntos:&lt;br /&gt;
&lt;br /&gt;
  g.region  n=224034 s=223266 e=640086 w=639318 res=1&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=n output=tile_density_1m resolution=1&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=n output=tile_density_6m resolution=6&lt;br /&gt;
&lt;br /&gt;
Podemos usar el binning para calcular el rango de los valores de elevación y otras estadísticas:&lt;br /&gt;
&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=range output=tile_range_6m resolution=6&lt;br /&gt;
  # el mapa y las siguientes estadísticas muestran que hay un punto discrepante alrededor de los 600 m&lt;br /&gt;
  r.report map=tile_range_6m units=c&lt;br /&gt;
  # cambiar la paleta de colores al histograma ecualizado para ver el constraste&lt;br /&gt;
  r.colors map=tile_range_6m color=viridis -e&lt;br /&gt;
&lt;br /&gt;
Podemos flitrar los datos por clase o retorno:&lt;br /&gt;
&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=mean output=tile_ground_6m resolution=6 class_filter=2&lt;br /&gt;
  r.colors map=tile_ground_6m color=elevation&lt;br /&gt;
&lt;br /&gt;
=== Interpolación ===&lt;br /&gt;
Primero importamos los archivos LAS como puntos vectoriales, nos quedamos solamente con los primeros puntos de retorno y limitamos la importación verticalmente para impedir usar los puntos discrepantes encontrados en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
  v.in.lidar -obt input=tile_0793_016_spm.las  output=tile_points return_filter=first zrange=0,300&lt;br /&gt;
&lt;br /&gt;
Después interpolamos:&lt;br /&gt;
&lt;br /&gt;
  g.region -a -p vector=tile_points res=2&lt;br /&gt;
  v.surf.rst input=tile_points elevation=tile_dsm tension=25 smooth=1 npmin=100&lt;br /&gt;
&lt;br /&gt;
Puede visualizar el DSM usando la vista 3D (primero deseleccione todas las demás capas y luego cambie a 3D) o calculando el sombreado de relieve con {{cmd|r.relief}}.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[GRASS and Python]]&lt;br /&gt;
* [[GRASS Python Scripting Library]]&lt;br /&gt;
* [[R statistics/rgrass7|R and the rgrass7 package]]&lt;br /&gt;
* [[Temporal data processing/GRASS R raster time series processing|Processing raster time series with GRASS GIS and R]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Workshops]]&lt;br /&gt;
[[Category: 2017]]&lt;br /&gt;
[[Category: Python]]&lt;br /&gt;
[[Category: R]]&lt;br /&gt;
[[Category: Scripting‏‎]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Unleash_the_power_of_GRASS_GIS_at_US-IALE_2017/es&amp;diff=24260</id>
		<title>Unleash the power of GRASS GIS at US-IALE 2017/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Unleash_the_power_of_GRASS_GIS_at_US-IALE_2017/es&amp;diff=24260"/>
		<updated>2017-06-22T18:07:24Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: spanish translation of &amp;quot;Unleash the power of GRASS GIS at US-IALE 2017&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Us-iale_logo.jpg|300px|right|none]]&lt;br /&gt;
[[File:Grassgis logo colorlogo text whitebg.png|300px|right|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este es un material preparado para un taller de la [[GRASS GIS at US-IALE 2017 Annual Meeting|US-IALE 2017]], que lleva el nombre de ''Unleash the power of GRASS GIS'' y se realizó el 11 de Abril de 2017 en Baltimore. Este taller es introductorio a las capacidades de procesamiento de GRASS GIS relevantes para la ecología de paisaje.&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
Se usará GRASS GIS 7.2 y R (&amp;gt;=3.1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' MS Windows '''&lt;br /&gt;
&lt;br /&gt;
Si no tiene R, por favor instálelo primero.&lt;br /&gt;
Luego descargue los binarios de GRASS GIS 7.2 ([https://grass.osgeo.org/grass72/binary/mswindows/native/x86_64/WinGRASS-7.2.0-1-Setup-x86_64.exe version de 64-bit], o [https://grass.osgeo.org/grass72/binary/mswindows/native/x86/WinGRASS-7.2.0-1-Setup-x86.exe versión de 32-bit]) de [https://grass.osgeo.org/ grass.osgeo.org].&lt;br /&gt;
Durante la instalación puede descargar el conjunto de datos de muestra de Carolina del Norte, por favor seleccione esta opción. También puede descargar los datos después (vea la siguiente sección). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mac OSX'''&lt;br /&gt;
Instale GRASS GIS 7.2 usando homebrew [https://github.com/OSGeo/homebrew-osgeo4mac osgeo4mac]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew tap osgeo/osgeo4mac&lt;br /&gt;
brew install grass7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Ubuntu Linux '''&lt;br /&gt;
&lt;br /&gt;
Instale GRASS GIS desde el administrador de paquetes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para otras distribuciones de Linux, por favor encuentre GRASS GIS en su administrador de paquetes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Extensiones de GRASS GIS (addons) ====&lt;br /&gt;
&lt;br /&gt;
Se usarán las siguientes extensiones:&lt;br /&gt;
&lt;br /&gt;
* r.forestfrag&lt;br /&gt;
* r.sun.hourly&lt;br /&gt;
* r.diversity&lt;br /&gt;
&lt;br /&gt;
Las puede instalar desde la GUI, o usando la línea de comandos, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
  g.extension r.diversity&lt;br /&gt;
 &lt;br /&gt;
==== Paquetes de R ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install.packages(c(&amp;quot;rgdal&amp;quot;, &amp;quot;rgrass7&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datos para este taller ==&lt;br /&gt;
Para este taller, descargue los siguientes conjuntos de datos:&lt;br /&gt;
* [https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip Localización GRASS de muestra de North Carolina]&lt;br /&gt;
* [https://github.com/ncsu-geoforall-lab/grass-intro-workshop/raw/master/files/points_of_interest.zip points_of_interest.zip]&lt;br /&gt;
&lt;br /&gt;
Además, para la parte de scripts de R, necesita:&lt;br /&gt;
* US Census Bureau: [http://www2.census.gov/geo/tiger/GENZ2015/shp/cb_2015_us_state_20m.zip Límites cartográficos de los estados de EEUU]&lt;br /&gt;
* [http://services.nacse.org/prism/data/public/normals/4km/tmean/annual PRISM 30-year temperatura media anual normal, malla de 4 km]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/US_elevation.tif datos de elevación SRTM para EEUU]&lt;br /&gt;
&lt;br /&gt;
Para la parte de lidar:&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.las mosaico LAS para Raleigh]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.txt versión txt del mosaico (todos los puntos)] y [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm_first.txt y solamente los primeros puntos de retorno]&lt;br /&gt;
&lt;br /&gt;
== Introducción a GRASS GIS ==&lt;br /&gt;
Aquí se provee una reseña del proyecto GRASS GIS [https://grass.osgeo.org grass.osgeo.org] que puede ser útil para revisar si ud. es un usuario primerizo. Para este ejercicio no es necesario entender completamente cómo funciona GRASS GIS. Sin embargo, puede necesitar saber cómo colocar sus datos en el directorio de bases de datos correcto de GRASS GIS, así como algunas ideas básicas sobre las funciones de GRASS. Aquí introducimos los conceptos esenciales ecesarios para correr este tutorial:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  Estructura de la base de datos espacial de GRASS GIS ====&lt;br /&gt;
GRASS usa una terminología y estructura de la base de datos única ([https://grass.osgeo.org/grass71/manuals/grass_database.html base de datos GRASS]) que es importante entender para correr este tutorial, ya que es posible que necesite colocar los datos (ej. Localización en una base de datos específica de GRASS. En lo que sigue revisaremos la terminología y se dan las direcciones paso a paso de cómo descargar y colocar sus datos en el lugar correcto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Una '''Base de datos espacial de GRASS GIS''' (''GRASS database'') consiste de un directorio con  Localizaciones (proyectos) específicos donde los datos (datos capas/mapas) se guardan.&lt;br /&gt;
* '''Localización''' es un directorio con datos relacionados a una localidad geográfica o a un proyecto. Todos los datos dentro de una Localización tienen el mismos sistema de coordenadas de referencia.&lt;br /&gt;
* '''Directorio de mapas''' es una colección de mapas dentro de una Localización, contiene los datos relacionados a una tarea específica, usuario o subproyecto.&lt;br /&gt;
&lt;br /&gt;
[[File:Grass database.png]]&lt;br /&gt;
&lt;br /&gt;
==== Creando una base de datos de GRASS para el tutorial ====&lt;br /&gt;
Por favor descargue la [https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip Localización de muestra de  GRASS de North Carolina], ponga atención de la ubicación en la cual se guardan los archivos dentro de su computadora.&lt;br /&gt;
&lt;br /&gt;
Ahora, cree (a menos que ya lo haya hecho) una carpeta llamada &amp;lt;tt&amp;gt;grassdata&amp;lt;/tt&amp;gt; (base de datos de GRASS) en su carpeta Home (o Documentos). Descomprima los datos descargados en esta carpeta. Ahora debe teer la Localización  &amp;lt;tt&amp;gt;nc_spm_08_grass7&amp;lt;/tt&amp;gt; en &amp;lt;tt&amp;gt;grassdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=1 widths=500 heights=250&amp;gt;Image:GRASS_startup_ncspm.png|GRASS GIS 7.2 startup dialog with North Carolina sample dataset&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mostrar y explorar los datos ====&lt;br /&gt;
&lt;br /&gt;
Ahora que tenemos los datos en la base de datos de GRASS correcta, lanzamos la Interfaz Gráfica de Usuario (GUI) en el Directorio de mapas ''user1''.&lt;br /&gt;
&lt;br /&gt;
La interfaz GUI permite mostrar los datos vectoriales y ráster, así como acercarse y alejarse. Otras opciones de exploración y visualización también son posibles usando consultas o añadiendo leyendas, por ejemplo. La captura de pantalla de abajo muestra cómo se pueden añadir diferentes capas de mapas (izquierda) y mostrar los metadatos de las capas de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=2  widths=500 heights=250&amp;gt;&lt;br /&gt;
Image:Wxgui_add_elev_lid.png|Añadir capa de mapa ráster.&lt;br /&gt;
Image:Wxgui_add_legend_elev_lid.png|Añadir leyeda de ráster.&lt;br /&gt;
Image:GRASS FUTURES wxGUI display.png|Administrador de capas y Display de mapas. Las anotaciones muestran cómo añadir una capa ráster, hacer consultas, añadir leyenda.&lt;br /&gt;
Image:wxGUI_metadata_rinfo.png|Mostrar metadatos de mapa ráster al hacer click derecho en la capa.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Módulos de GRASS GIS ===&lt;br /&gt;
Una de las ventajas d eGRASS es la diversidad y cantidad de módulos que le permiten analizar los diferentes aspectos espaciales y temporales. GRASS GIS tiene más de  [https://grass.osgeo.org/grass70/manuals/full_index.html 500 módulos distintos] en la distribución núcleo y más de  [https://grass.osgeo.org/grass70/manuals/addons/ 230 módulos de extensión addon] que pueden ser usados para preparar y analizar capas de datos.&lt;br /&gt;
&lt;br /&gt;
La funcionalidad de GRASS está disponible a través de ''módulos'' (herramientas, funciones). Existe en GRASS una convención de nombrar a los módulos de acuerdo a su función, de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Prefijo !! Función !! Ejemplo&lt;br /&gt;
|-&lt;br /&gt;
| r.* || procesamiento ráster || ''{{cmd|r.mapcalc}}'': álgebra de mapas&lt;br /&gt;
|-&lt;br /&gt;
| v.* || procesamiento vectorial  || ''{{cmd|v.clean}}'': limpieza topológica&lt;br /&gt;
|-&lt;br /&gt;
| i.* || procesamiento de imágenes  || ''{{cmd|i.segment}}'': reconocimiento de objetos&lt;br /&gt;
|-&lt;br /&gt;
| db.* || administración de bases de datos || ''{{cmd|db.select}}'': seleccionar valores de una tabla&lt;br /&gt;
|-&lt;br /&gt;
| r3.* || procesamiento ráster 3D   || ''{{cmd|r3.stats}}'': estadísticas de ráster 3D&lt;br /&gt;
|-&lt;br /&gt;
| t.* || procesamiento de datos temporales  || ''{{cmd|t.rast.aggregate}}'': agregación temporal&lt;br /&gt;
|-&lt;br /&gt;
| g.* || administración general de datos || ''{{cmd|g.rename}}'': renombrar mapa&lt;br /&gt;
|-&lt;br /&gt;
| d.* || pantalla ||''{{cmd|d.rast}}'': mostrar mapa ráster&lt;br /&gt;
|}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos son los grupos de módulos principales. Hay algunos otros que son específicos. Note también que algunos módulos tienen varios puntos dentro del nombre. Esto sugiere otro agrupamiento. Por ejemplo, los módulos que inician con ''v.net.'' tienen que ver con análisis de redes vectoriales.&lt;br /&gt;
&lt;br /&gt;
El nombre del módulo ayuda a entender su función, por ejemplo ''v.in.lidar'' inicia con ''v'' así que tiene que ver con mapas vectoriales, el nombre continúa con ''in'' lo que indica que el módulo es para importar datos a la Base de datos espacial de GRASS GIS y finalmente ''lidar'' indica que tiene que ver con nubes de puntos lidar.&lt;br /&gt;
&lt;br /&gt;
==== Encontrando y corriendo un módulo ====&lt;br /&gt;
&lt;br /&gt;
Para encontrar un módulo para su análisis, escriba el término en la caja de búsqueda en la pestaña ''Módulos'' (''Modules'') en el ''Administrador de capas'' (''Layer manager''), luego presione Enter hasta que encuentre el módulo.&lt;br /&gt;
&lt;br /&gt;
De manera alternativa, puede buscar a través de el árbol de módulos en la pestaña ''Módulos'' (''Modules''). Puede también buscar en el menú principal. Por ejemplo, para encontrar información sobre un mapa ráster, use:''Ráster → Reportes y estadísticas → Metadatos básicos del ráster'' (''Raster → Reports and statistics → Basic raster metadata'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:wxGUI_module_search.png|Búsqueda de un módulo en el árbol de módulos (busca en nombre, descripción, palabras clave)&lt;br /&gt;
Image:wxGUI_menu_rinfo.png|Los módulos también están en el menú principal&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Correr un módulo como un comando ====&lt;br /&gt;
Si ya sabe el nombre del módulo, puede simplemente usar la línea de comandos. La GUI ofrece una pestaña de consola de Comandos, con una línea de comandos específicamente construida para correr los módulos de GRASS GIS. Si escribe el nombre ahí, obtendrá sugerencias para completar automáticamete el nombre. Luego de presionar Enter, obtendrá una GUI para el módulo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:wxGUI_console_completion.png|Sugerencia de autocompletado cuando se escribe el nombre del módulo: Al escribir el prefijo r. tenemos una lista de módulos que inician con el prefijo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puede usar la línea de comandos para correr todo el comando cuando ya lo tiene, esto es, módulo y lista de parámetros, en las instrucciones.&lt;br /&gt;
&lt;br /&gt;
==== Línea de comandos vs. Interfaz GUI ====&lt;br /&gt;
Los módulos de GRASS pueden ser ejecutados tanto a través de la GUI o por la interfaz de línea de comandos. La GUI ofrece una aproximación más amigable para ejecutar los módulos donde el usuario puede navegar en las capas de datos cuando quiera analizar y modificar las opciones de procesamiento simplemente haciendo click en las cajas de la GUI. La GUI también ofrece un manual fácilmente accesible de cómo ejecutar el módulo. LA interfaz de línea de comandos permite ejecutar un módulo usando las opciones del comando específicas para el módulo. Esto es conveniente cuando se están corriendo análisis similares con pequeñas modificaciones o cuando se está familiarizado con los comandos de los módulos para un procesamiento eficiente. En este taller se dan los comandos, que pueden ser copiados y pegados en la línea de comando, aunque también se puede usar de manera paralela la GUI y la línea de comandos, dependiendo de la preferencia personal. Eche un vistazo cómo la {{cmd|wxGUI.modules|version=71|desc=GUI y la línea de comandos}} representan la misma herramienta.&amp;lt;br /&amp;gt;''Ejercicio:'' calcular el aspecto (orientación) dado un modelo digital de elevación usando el módulo {{cmd|r.slope.aspect}} usando tanto la GUI del módulo y la línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ¿Cómo encontrar módulos? Los módulos están organizados por su funcionalidad en el menú de la wxGUI, o puede buscarlos en la pestaña de Buscar módulos. Si ya sabe qué modulo usar, puede simplemente escribirlo en la consola de comandos de la wxGUI.&lt;br /&gt;
&lt;br /&gt;
==== Parámetros de módulo ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Wxgui_module_parameters_r_neighbors.png|Diálogo del módulo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El mismo análisis se puede hacer usando el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 r.neighbors -c input=elevation output=elev_smooth size=5&lt;br /&gt;
&lt;br /&gt;
De manera alterna, puede rellenar parámetro por parámetro en la GUI, cuando ya tiene el comando.&lt;br /&gt;
&lt;br /&gt;
=== Región computacional ===&lt;br /&gt;
Antes de usar el módulo para calcular un nuevo mapa ráster, debe definir correctamente una región computacional. Todos los cálculos que se hacen sobre rásters se realizan dentro de una extensión especificada y con una resolución dada.&lt;br /&gt;
&lt;br /&gt;
La región computacional es un concepto de rásters importante dentro de GRASS GIS. En GRASS una región computacional puede ser definida dentro de una región ocupada por datos de mayor extensión para un análisis de prueba más rápido o por ejemplo dentro de regiones basadas en unidades administrativas. Proveemos algunos puntos para tener en cuenta cuando se use la función de región computacional:&lt;br /&gt;
* definida por extensión de la región y la resolución ráster&lt;br /&gt;
* aplica a todas las operaciones ráster&lt;br /&gt;
* persiste entre sesiones de GRASS, puede ser diferente para diferentes Directorios de mapas (mapsets)&lt;br /&gt;
* ventajas: mantiene la consistencia, evita el recorte, para tareas computacionalmente demandantes definir una región más pequeña, revisar si el resultado es bueno y luego definir la región computacional para toda el área de estudio y volver a correr el análisis.&lt;br /&gt;
* corra &amp;lt;code&amp;gt;g.region -p&amp;lt;/code&amp;gt;, o en el menú ''Configuraciones'' - ''Región'' - ''Mostrar región'' para ver la configuración actual de la región.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Computational_region_two_rasters.png| Concepto de región computacional: un ráster con una extensión grade (azul) se muestra junto con otro más pequeño (verde). La región computacional (rojo) se define para que sea igual al ráster pequeño, así los cálculos estarán limitados a la región que ocupa el ráster menor aún cuando la entrada sea el ráster mayor. (No se muestra en la imagen: también la resolución, no solo la extensión, es igual a la resolución del ráster menor.)&lt;br /&gt;
Image:WxGUI set region.png|Modos sencillos para definir la región computacional desde la GUI. A la izquierda, definir la región para que sea igual a un mapa ráster. A la derecha, seleccionar la opción señalada y luego defina la región dibujando un rectángulo.&lt;br /&gt;
Image:Wxgui_computational_region_set_from_raster.png|Definir la región computacional (extensión y resolución) para que sea igual a un ráster (pestaña de ''Capas'' en el ''Administrador de capas'')&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los valores numéricos de la región computacional pueden ser revisados usando:&lt;br /&gt;
&lt;br /&gt;
 g.region -p&lt;br /&gt;
&lt;br /&gt;
Luego de ejecutar el comando, obtendrá algo como esto:&lt;br /&gt;
&lt;br /&gt;
 norte:      220750&lt;br /&gt;
 sur:      220000&lt;br /&gt;
 oeste:       638300&lt;br /&gt;
 este:       639000&lt;br /&gt;
 nsres:      1&lt;br /&gt;
 eores:      1&lt;br /&gt;
 rows:       750&lt;br /&gt;
 columnas:       700&lt;br /&gt;
 celdas:      525000&lt;br /&gt;
&lt;br /&gt;
La región computacional también puede ser definida usando un mapa vectorial. En este caso, solamente se define la extensión (ya que el mapa vectorial no tiene resolución - al menos no en el sentido del mapa ráster). En la GUI, esto se puede hacer en la misma forma que con el mapa ráster. En la línea de comandos se ve así:&lt;br /&gt;
&lt;br /&gt;
 g.region vector=lakes&lt;br /&gt;
&lt;br /&gt;
La resolución se puede definir de manera separada usando el parámetro &amp;lt;code&amp;gt;res&amp;lt;/code&amp;gt; del módulo {{cmd|g.region}}. Las unidades son las mismas de la Localización actual, en nuestro caso metros. Esto se puede hacer en la pestaña ''Resolución'' del díalogo de {{cmd|g.region}} o en la línea de comandos del siguiente modo (usando también la bandera &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; para mostrar los nuevos valores:&lt;br /&gt;
&lt;br /&gt;
 g.region res=3 -p&lt;br /&gt;
&lt;br /&gt;
La nueva resolución puede modificarse ligeramente en este caso para ajustar a la región, que no estamos cambiando. Sin embargo, a menudo queremos que la resolución sea igual a los valores que proveemos y estamos de acuerdo con una pequeña modificación a la extensión. Para eso está la bandera &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
El siguiente comando de ejemplo usará la extensión del vectorial llamado &amp;lt;code&amp;gt;lakes&amp;lt;/code&amp;gt;, con una resolución &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, modificando la extensión para alinearla a que la resolución sea de 10 metros, y muestra los valores de la nueva región computacional:&lt;br /&gt;
&lt;br /&gt;
 g.region vector=lakes res=10 -a -p&lt;br /&gt;
&lt;br /&gt;
=== Correr módulos ===&lt;br /&gt;
Encuentre el módulo para calcular pendiente y aspecto en el menú o en el árbol de módulo en ''Ráster → Análisis de terreno → Pendiente y aspecto'' o simplemente corra {{cmd|r.slope.aspect}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:r_slope_aspect_1_required.png|Seleccione el mapa ráster de entrada de elevación.&lt;br /&gt;
Image:r_slope_aspect_2_outputs.png|Ingrese los nombres de los mapas ráster de salida. También note que el comando correspondiente aparece en la parte inferior del diálogo GUI.&lt;br /&gt;
Image:r_slope_aspect_3_manual.png|Maual de uso incluido en el diálogo GUI para ver más detalles.&lt;br /&gt;
Image:r_slope_aspect_4_run.png|Presione Ejecutar (1). Cuando se haya calculado, el resultado se añade al Administrador de capas y al Visualizador de mapas. Use Cerrar (2) para cerrar la ventana.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vista 3D ===&lt;br /&gt;
Podemos explorar nuestra área de estudio en vista 3D.&lt;br /&gt;
# Añada &amp;lt;tt&amp;gt;elev_lid792_1m&amp;lt;/tt&amp;gt; y quite de la selección (deseleccione) o remueva cualquier otra capa.&lt;br /&gt;
# Defina la región computacional a este ráster. Cambie a la vista 3D (en la esquina derecha del Visualizador de mapas).&lt;br /&gt;
# Ajuste la vista (perspectiva, altura, exageración vertical)&lt;br /&gt;
# En la pestaña ''Datos'', defina ''&lt;br /&gt;
In ''Data'' tab, set ''Resolución modo Fino'' a 1 y defina &amp;lt;tt&amp;gt;slope&amp;lt;/tt&amp;gt; (calculado en el paso anterior) como el color de la superficie.&lt;br /&gt;
# Cuando termine, cambie de nuevo a la vista 2D.&lt;br /&gt;
[[File:Elevation_slope_3D_view.png|800px|thumb|center| Vista 3D de el MDE elev_lid792_1m con slope como color]]&lt;br /&gt;
&lt;br /&gt;
== Análisis de rásters y vectoriales ==&lt;br /&gt;
&lt;br /&gt;
=== Distancia desde el borde del bosque ===&lt;br /&gt;
&lt;br /&gt;
Use álgebra de mapas para extraer una clase de bosque dada (en este caso la 5) del ráster de clasificación de uso de suelo:&lt;br /&gt;
&lt;br /&gt;
 r.mapcalc &amp;quot;forest = if(landclass96 == 5, 1, null())&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La función &amp;lt;code&amp;gt;if()&amp;lt;/code&amp;gt; que se usó tiene tres parámetros, con la siguiente sintáxis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 if(condición, valor si verdadero, valor si falso)&lt;br /&gt;
&lt;br /&gt;
Después usamos el operador &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; que evalúa como verdadero solo cuando ambos lados son iguales. Finalmente usamos la función &amp;lt;code&amp;gt;null()&amp;lt;/code&amp;gt; que representa valor nulo NULL (sin dato).&lt;br /&gt;
&lt;br /&gt;
Ahora podemos obtener la distancia al borde del bosque usando el módulo {{cmd|r.grow.distance}}, que calcula distancias a áreas con valores en áreas sin valores (con NULL) o al contrario. De manera predeterminada nos da la distancia al borde del bosque desde fuera del bosque, pero ahora usaremos la bandera &amp;lt;code&amp;gt;-n&amp;lt;/code&amp;gt; para obtener la distancia al borde desde dentro del mismo bosque:&lt;br /&gt;
&lt;br /&gt;
 r.grow.distance -n input=forest distance=distance&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Create new color table for raster map forest.png|Definiendo el color verde para el mapa ráster de bosque (Click derecho en la capa de mapa ráster, seleccione ''Establecer paleta de colores interactivamente'').&lt;br /&gt;
Image:Wxgui_r_grow_distance_from_forest_edge.png|Diálogo de r.grow.distance y las distancias calculadas como fondo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Etadísticas de putos (Point statistics) ===&lt;br /&gt;
&lt;br /&gt;
==== Importar un Archivo Shapefile ====&lt;br /&gt;
&lt;br /&gt;
Descargue el archivo Shape de muestra [https://github.com/ncsu-geoforall-lab/grass-intro-workshop/raw/master/files/points_of_interest.zip points_of_interest.zip] y descomprímalo.&lt;br /&gt;
&lt;br /&gt;
Importe el archivo usando el módulo v.in.ogr. Note que necesita especificar la ruta de búsqueda completa.&lt;br /&gt;
&lt;br /&gt;
 v.in.ogr input=/ruta/a/points_of_interest.shp output=points_of_interest&lt;br /&gt;
&lt;br /&gt;
==== Generando una malla hexagonal ====&lt;br /&gt;
&lt;br /&gt;
Para calcular la densidad de puntos en una malla hexagonal a partir del mapa vectorial de points_of_interest use el mapa vectorial mismo para definir la extesión de la región computacional. La resolución está basada en el tamaño deseado de los hexágonos.&lt;br /&gt;
&lt;br /&gt;
 g.region vector=points_of_interest res=2000 -pa&lt;br /&gt;
&lt;br /&gt;
Aunque la Región computacional generalmente no es usada para el procesamiento de vectoriales, la malla hexagonal es creada como un mapa vectorial basándose en la extensión previamente seleccionada y en el tamaño de la malla.&lt;br /&gt;
&lt;br /&gt;
 v.mkgrid map=hexagons -h&lt;br /&gt;
&lt;br /&gt;
==== Calculando estadísticas de puntos en polígonos ====&lt;br /&gt;
&lt;br /&gt;
Lo que sigue es el conteo del número de puntos por hexágonos usando el módulo v.vect.stats.&lt;br /&gt;
&lt;br /&gt;
 v.vect.stats points=points_of_interest areas=hexagons count_column=count&lt;br /&gt;
&lt;br /&gt;
Por último, el siguiente comando define la paleta de colores a viridis basada en la columna del conteo. Use la paleta de colores ryb si tiene GRASS GIS 7.0.&lt;br /&gt;
&lt;br /&gt;
 v.colors map=hexagons use=attr column=count color=viridis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:V_vect_stats_hexagons_with_module_tree.png|Hexágonos coloreados y módulos usados para crearlos.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Análisis de estructura de paisaje ==&lt;br /&gt;
Para el siguiente ejemplo usaremos el ráster &amp;lt;code&amp;gt;landuse96_28m&amp;lt;/code&amp;gt; de nuestro conjunto de datos de North Carolina, donde los parches representan diferentes coverturas de suelo (usos). Usamos el módulo &lt;br /&gt;
Vamos a usa el módulo {{cmd|r.neighbors}} y las extensiones (addons) {{addonCmd|r.diversity}} y {{addonCmd|r.forestfrag}}.&lt;br /&gt;
Primero instalamos las extensiones:&lt;br /&gt;
&lt;br /&gt;
  g.extension r.diversity&lt;br /&gt;
  g.extension r.forestfrag&lt;br /&gt;
&lt;br /&gt;
Cerramos la GUI de GRASS y la abrimos de nuevo.&lt;br /&gt;
&lt;br /&gt;
'''Riqueza'''&lt;br /&gt;
Primero calculamos la riqueza (cantidad de clases únicas o distintas), usando {{cmd|r.neighbors}}. Al usar una ventana móvil, creamos un ráster que representa la variabilidad espacial de la riqueza. El tamaño de la ventana está en celdas.&lt;br /&gt;
&lt;br /&gt;
  g.region raster=landuse96_28m&lt;br /&gt;
  r.neighbors input=landuse96_28m output=richness method=diversity size=15&lt;br /&gt;
&lt;br /&gt;
'''Índices de paisaje'''&lt;br /&gt;
&lt;br /&gt;
La extensión {{addonCmd|r.diversity}} calcula diversos índices de paisaje usando una ventana móvil.&lt;br /&gt;
Está basado en los módulos {{cmd|r.li}} para análisis de estructura de paisaje.&lt;br /&gt;
En este ejemplo calculamos los índices de diversidad de Simpson, Shannon y Renyi con un rango de ventanas móviles:&lt;br /&gt;
&lt;br /&gt;
  r.diversity input=landuse96_28m prefix=index alpha=0.8 size=9-21 method=simpson,shannon,renyi&lt;br /&gt;
&lt;br /&gt;
Esto genera 9 rásters con nombres como &amp;lt;code&amp;gt;index_simpson_size_9&amp;lt;/code&amp;gt;. Podemos añadirlos al Visualizador de mapas usando ''Añadir varios ráster o vectoriales' en el Administrador de capas, en el menú ''Archivo''.&lt;br /&gt;
&lt;br /&gt;
Para verlos, necesitamos definir la misma paleta de colores para mapas ráster del mismo índice.&lt;br /&gt;
&lt;br /&gt;
  r.colors map=index_shannon_size_21,index_shannon_size_15,index_shannon_size_9 color=viridis&lt;br /&gt;
  r.colors map=index_renyi_size_21_alpha_0.8,index_renyi_size_15_alpha_0.8,index_renyi_size_15_alpha_0.8 color=viridis&lt;br /&gt;
  # usamos la paleta de colores grey1.0 por que Simpson es de 0 a 1&lt;br /&gt;
  r.colors map=index_simpson_size_21,index_simpson_size_15,index_simpson_size_9 color=grey1.0&lt;br /&gt;
&lt;br /&gt;
'''Fragmentación del bosque'''&lt;br /&gt;
[[File:Forest_fragmentation.png|thumbnail|right|Fragmentación del bosque calculado con la extensión r.forestfrag]]&lt;br /&gt;
El módulo {{addonCmd|r.forestfrag}} calcula la fragmentación del bosque siguiendo una metodología propuesta por [https://www.ecologyandsociety.org/vol4/iss2/art3/ Riitters et al. (2000)].&lt;br /&gt;
&lt;br /&gt;
Primero se marcan todas las celdas que tienen bosque como 1 y todo lo demás como 0:&lt;br /&gt;
&lt;br /&gt;
  # Definir la región&lt;br /&gt;
  g.region raster=landclass96&lt;br /&gt;
  # listar las clases:&lt;br /&gt;
  r.category map=landclass96&lt;br /&gt;
  # seleccionar clases&lt;br /&gt;
  r.mapcalc &amp;quot;forest = if(landclass96 == 5, 1, 0)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Use el nuevo mapa ráster de presencia de bosque para calcular el índice de fragmentación del bosque con una ventana de tamaño 15:&lt;br /&gt;
&lt;br /&gt;
  r.forestfrag input=forest output=fragmentation window=15&lt;br /&gt;
&lt;br /&gt;
Reporte de la distribución de categorías de fragmentación:&lt;br /&gt;
&lt;br /&gt;
  r.report map=fragmentation units=k,p&lt;br /&gt;
&lt;br /&gt;
== Realizando scripts con Python ==&lt;br /&gt;
&lt;br /&gt;
El modo más sencillo de ejecutar el código de Python que use paquetes de GRASS GIS es simplemente usar el Editor Simple de Python integrado a GRASS GIS accesible desde la barra de herramientas o la pestaña Python en el Administrador de capas. Otra opción es escribir código de Python en su editor de texto favorito, como Notepad++ (note que los editores de Python son editores de texto simple). Luego corra el script en GRASS GIS usando el menú principal Archivo -&amp;gt; Lanzar script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=3 widths=380 heights=190&amp;gt;&lt;br /&gt;
Image:Simple python editor v buffer.png|''Editor simple de Python'' integrado a GRASS GIS (desde la versión 7.2) con la pestaña ''Python'' en el fondo y que contiene una consola de Python interactiva.&lt;br /&gt;
Image:GRASS GUI Python shell.png|Pestaña ''Python'' con una consola de Python interactiva.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La GRASS GIS 7 Pytho Scripting Library provee funciones para llamar los módulos de GRASS dentro de scripts como subprocesos. Las funciones más usadas incluyen: &lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.run_command run_command]''': usualmente usado con módulos cuya salida son datos ráster/vectorial y no se espera un texto como salida.&lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.read_command read_command]''': usado cuando se tiene interés en el texto de salida&lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.parse_command parse_command]''': usado con módulos que producen texto como salida en pares clave=valor.&lt;br /&gt;
* '''[https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.write_command write_command]''': usado con módulos que se espera un texto de entrada, ya sea de la entrada estándar o un archivo.&lt;br /&gt;
&lt;br /&gt;
Además de esto, esta librería provee varias funciones simplificadas (wrapper functions) para módulos que se llaman frecuentemente.&lt;br /&gt;
&lt;br /&gt;
==== Llamando módulos GRASS GIS ====&lt;br /&gt;
Usaremos la Consola de Python de GRASS GIS para correr los comandos. Para scripts más largos, puede crear un archivo de texto, guardarlo en el directorio de trabajo actual y correrlo con &amp;lt;tt&amp;gt;python myscript.py&amp;lt;/tt&amp;gt; a partir de la consola de comandos GUI o de una terminal.&lt;br /&gt;
&lt;br /&gt;
'''Tip''': Cuando copie fragmentos de código a la consola GUI de Python, de click derecho en la posición y seleccione '''Paste Plus''' en el menú de contexto. De otro modo no va a funcionar para fragmetos de código de varias líneas.&lt;br /&gt;
&lt;br /&gt;
Empezamos por importar la librería GRASS GIS Python Scriptig:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes de correr cualquier módulo de GRASS, necesita definir la región computacional usando {{cmd|g.region}}. En este ejemplo, definimos la extensión de la región computacional y la resolución a la capa ráster &amp;lt;tt&amp;gt;elevation&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('g.region', raster='elevation')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La función run_command() es la más frecuentemente usada. Aquí aplicamos la operación de promedio focal ({{cmd|r.neighbors}}) para suavizar la capa ráster de elevación. Note que la sintáxis es similar al usado en la consola, solo que las banderas se especifican como parámetros.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.run_command('r.neighbors', input='elevation', output='elev_smoothed', method='average', flags='c')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si corremos los comandos de Python desde la consola GUI de Python, podemos usar &amp;lt;tt&amp;gt;AddLayer&amp;lt;/tt&amp;gt; para añadir las capas recién creadas:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
AddLayer('elev_smoothed')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Llamado módulos de GRASS GIS con entrada o salida de texto ====&lt;br /&gt;
La salida de texto de los módulos puede ser capturada usando la función read_command().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.read_command('g.region', flags='p')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.read_command('r.univar', map='elev_smoothed', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Algunos módulos pueden producir una salida en formato de valores con clave (key-value), esto se realiza con la bandera '''-g'''. La función parse_command() automaticamente analiza esta salida y regresa un diccionario. En este ejemplo llamamos {{cmd|g.proj}} para mostrar los parámetros de la proyección de la Localización actual.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.parse_command('g.proj', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como comparación, abajo el mismo ejemplo, pero usando la función read_commad():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.read_command('g.proj', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Algunos módulos requieren que el texto de entrada esté en un archivo o sea proveído en la entrada estándar. Usando la función write_command() podemos pasar el texto al módulo. Aquí, estamos creando un nuevo vectorial con un punto con {{cmd|v.in.ascii}}. Note que el parámetro ''stdin'' no es usado como un parámetro de módulo, pero su contenido es pasado al subproceso como la entrada estándar.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.write_command('v.in.ascii', input='-', stdin='%s|%s' % (635818, 221342), output='point')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si corremos los comandos Python desde la consola GUI de Python, podemos usar &amp;lt;tt&amp;gt;AddLayer&amp;lt;/tt&amp;gt; para añadir la capa recién creada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
AddLayer('point')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Funciones simplificadas (wrapper functions) ====&lt;br /&gt;
Algunos módulos tienen funciones simplificadas (wrapper functions) para simplificar las tareas de uso común.&lt;br /&gt;
Por ejemplo podemos obtener la información sobre una capa ráster con [https://grass.osgeo.org/grass70/manuals/libpython/script.html?highlight=mapcalc#script.raster.raster_info raster_info] que es la función simplificada de {{cmd|r.info}},&lt;br /&gt;
o una capa vectorial con [https://grass.osgeo.org/grass70/manuals/libpython/script.html?script.vector.vector_info vector_info].&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.raster_info('elevation')&lt;br /&gt;
gscript.vector_info('point')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro ejemplo es usando la [https://grass.osgeo.org/grass70/manuals/libpython/script.html?highlight=mapcalc#script.raster.mapcalc simplificada de r.mapcalc] para álgebra ráster:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.mapcalc(&amp;quot;elev_strip = if(elevation &amp;gt; 100 &amp;amp;&amp;amp; elevation &amp;lt; 125, elevation, null())&amp;quot;)&lt;br /&gt;
gscript.read_command('r.univar', map='elev_strip', flags='g')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La función [https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.region region] es un modo conveniente de obtener la configuración de la región actual. Regresa un diccionario con valores convertido a los tipos apropiados (flotantes y enteros).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
region = gscript.region()&lt;br /&gt;
print region&lt;br /&gt;
# área de celdas en unidades de mapa (en Localizaciones proyectadas)&lt;br /&gt;
region['nsres'] * region['ewres']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos enlistar los datos guardados en una Localización de GRASS GIS con la simplificada de {{cmd|g.list}}. Con [https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.list_grouped list_grouped], las capas de mapas son agrupadas por Directorios de mapas (capas ráster en este ejemplo):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
gscript.list_grouped(type=['raster'])&lt;br /&gt;
gscript.list_grouped(type=['raster'], pattern=&amp;quot;landuse*&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí hay un ejemplo de un wrapper diferente para {{cmd|g.list}} [https://grass.osgeo.org/grass70/manuals/libpython/script.html#script.core.list_pairs list_pairs] que estrucutra la salida como listas de pares (nombre, Directorio de mapas). Obtenemos el Directorio de mapas actual con la wrapper de {{cmd|g.gisev}}.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
current_mapset = gscript.gisenv()['MAPSET']&lt;br /&gt;
gscript.list_pairs('raster', mapset=current_mapset)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ejercicio ====&lt;br /&gt;
Usando &amp;quot;elev_*&amp;quot; como prefijo en el nombre, exportar todas las capas ráster desde su Directorio de mapas como GeoTiff (vea {{cmd|r.out.gdal}}. No olvide definir la región actual {{cmd|g.region}}) para cada mapa para que sea igual a la extensión y resolución de cada uno, ya que pueden variar.&lt;br /&gt;
&lt;br /&gt;
== Creando una Localización GRASS GIS nueva e importar datos ==&lt;br /&gt;
Para el siguiente ejemplo con R, necesitamos crear primero una nueva Localización GRASS e importar datos. Vamos a usar los datos de temperatura PRISM y los límites vectoriales de los estados de EEUU.&lt;br /&gt;
Vamos a crear una nueva Localización basada en el código EPSG [http://epsg.io/4269 4269] (datum NAD83).&lt;br /&gt;
# Inicie GRASS GIS&lt;br /&gt;
# Seleccione ''Nueva'' en la parte izquierda de la pantalla de bienvenida para iniciar el Ayudante de Localizaciones&lt;br /&gt;
# En el ayudante, ingrese el nombre de la nueva Localización, por ejemplo PRISM, presione ''Siguiente''&lt;br /&gt;
# Seleccione ''Seleccionar código EPSG del sistema de referencia espacial'', presione ''Siguiente''&lt;br /&gt;
# Ingrese el número 4269 en el campo de ''Código EPSG'', presione ''Siguiente''&lt;br /&gt;
# Seleccione ''1'' en el diálogo de transformación del Datum&lt;br /&gt;
# Revise las definiciones PROJ.4 y presione &amp;quot;Finalizar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se crea automáticamente el Directorio de mapas PERMANENT, así que puede iniciar su sesión GRASS.&lt;br /&gt;
&lt;br /&gt;
Descargue y descomprima el siguiente conjunto de datos en una carpeta:&lt;br /&gt;
* US Census Bureau: [http://www2.census.gov/geo/tiger/GENZ2015/shp/cb_2015_us_state_20m.zip Límites cartográficos de los estados de EEUU]&lt;br /&gt;
* [http://services.nacse.org/prism/data/public/normals/4km/tmean/annual temperatura media anual normal de 30 años PRISM, malla de 4km]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/US_elevation.tif datos de elevación SRTM para los EEUU]&lt;br /&gt;
&lt;br /&gt;
Definir el Directorio de trabajo actual en GRASS GIS para hacer más fácil el encontrar los archivos extraidos. En el menú ''Configuraciones'' - ''Entorno de trabajo de GRASS'' - ''Cambiar de directorio de trabajo'' defina el directorio en el cual tenga los datos. De manera alternativa en la consola de comandos de la GUI escriba &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; y seleccione el directorio.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos importarlo a GRASS GIS:&lt;br /&gt;
&lt;br /&gt;
  r.import input=PRISM_tmean_30yr_normal_4kmM2_annual_bil.bil output=temp_mean&lt;br /&gt;
  v.import input=cb_2015_us_state_20m.shp output=boundaries&lt;br /&gt;
  r.import input=US_elevation.tif output=elevation&lt;br /&gt;
&lt;br /&gt;
No especificamos la ruta completa a los archivos gracias a que definimos más arriba el directorio de trabajo. Si usamos el diálogo, podemos explorar los archivos usando el botón Explorar.&lt;br /&gt;
&lt;br /&gt;
Ahora visualizamos los datos y definimos la rampa de colores apropiada para la temperatura:&lt;br /&gt;
&lt;br /&gt;
  r.colors map=temp_mean@PERMANENT color=celsius&lt;br /&gt;
&lt;br /&gt;
== Realizando scripts con R ==&lt;br /&gt;
&lt;br /&gt;
Usar R con GRASS GIS se puede hacer de dos maneras:&lt;br /&gt;
&lt;br /&gt;
* Usar ''R dentro de una sesión de GRASS GIS'', i.e. puede iniciar R (o RStudio) desde la línea de comandos de GRASS GIS.&lt;br /&gt;
** Trabaja con datos en la Base de datos espaciales GRASS GIS usando GRASS GIS&lt;br /&gt;
** No inicia la función &amp;lt;code&amp;gt;initGRASS()&amp;lt;/code&amp;gt; (GRASS GIS ya está corriendo).&lt;br /&gt;
* Usando ''GRASS GIS dentro de una sesión de R'', i.e. se conecta a la Base de datos espaciales de GRASS GIS desde R (o RStudio).&lt;br /&gt;
** Pone datos en la Base de datos GRASS GIS solamente para realizar las operaciones de GRASS GIS.&lt;br /&gt;
** Use la función &amp;lt;code&amp;gt;initGRASS()&amp;lt;/code&amp;gt; para iniciar GRASS GIS dentro de R.&lt;br /&gt;
&lt;br /&gt;
Vamos a correr R dentro de una sesión de GRASS GIS (la primer manera). Lanzar R dentro de GRASS GIS e instalar los paquetes ''rgrass7'' y ''rgdal''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
install.packages(&amp;quot;rgrass7&amp;quot;)&lt;br /&gt;
install.packages(&amp;quot;rgdal&amp;quot;)&lt;br /&gt;
library(&amp;quot;rgrass7&amp;quot;)&lt;br /&gt;
library(&amp;quot;rgdal&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ejecutar módulos GRASS usando la función &amp;lt;code&amp;gt;execGRASS&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;g.region&amp;quot;, raster=&amp;quot;temp_mean&amp;quot;, flags=&amp;quot;p&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar la relación entre la temperatura, la elevación y la latitud.&lt;br /&gt;
&lt;br /&gt;
Primero vamos a generar un ráster con los valores de latitud:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;r.mapcalc&amp;quot;, expression=&amp;quot;latitude = y()&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nota: en un sistema de coordenadas proyectada puede usar {{cmd|r.latlong}}.&lt;br /&gt;
&lt;br /&gt;
Después, vamos a generar puntos aleatorios y muestear el conjunto de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;v.random&amp;quot;, output=&amp;quot;samples&amp;quot;, npoints=1000)&lt;br /&gt;
# esto va a restrigir el muestreo dentro de los límites de EEUU&lt;br /&gt;
# estamos sobreescribiendo muestras vectoriales, así que necesitamos usar la bandera overwrite (sobreescribir)&lt;br /&gt;
execGRASS(&amp;quot;v.random&amp;quot;, output=&amp;quot;samples&amp;quot;, npoints=1000, restrict=&amp;quot;boundaries&amp;quot;, flags=c(&amp;quot;overwrite&amp;quot;))&lt;br /&gt;
# creamos la tabla de atributos&lt;br /&gt;
execGRASS(&amp;quot;v.db.addtable&amp;quot;, map=&amp;quot;samples&amp;quot;, columns=c(&amp;quot;elevation double precision&amp;quot;, &amp;quot;latitude double precision&amp;quot;, &amp;quot;temp double precision&amp;quot;))&lt;br /&gt;
# muestreamos rásters individuales&lt;br /&gt;
execGRASS(&amp;quot;v.what.rast&amp;quot;, map=&amp;quot;samples&amp;quot;, raster=&amp;quot;temp_mean&amp;quot;, column=&amp;quot;temp&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;v.what.rast&amp;quot;, map=&amp;quot;samples&amp;quot;, raster=&amp;quot;latitude&amp;quot;, column=&amp;quot;latitude&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;v.what.rast&amp;quot;, map=&amp;quot;samples&amp;quot;, raster=&amp;quot;elevation&amp;quot;, column=&amp;quot;elevation&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nota: hay un módulo de extensión (addon) {{addonCmd|r.sample.category}} que simplifica este proceso y muestrea múltiples rásters.&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el administrador de tablas de atributos de GRASS GIS para inspeccionar los valores muestreados o usar {{cmd|v.db.select}} para enlistar los valores.&lt;br /&gt;
Exploramos el conjunto de datos en R:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
samples &amp;lt;- readVECT(&amp;quot;samples&amp;quot;)&lt;br /&gt;
summary(samples)&lt;br /&gt;
plot(samples@data)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calculamos el modelo lineal multivariado:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
linmodel &amp;lt;- lm(temp ~ elevation + latitude, samples)&lt;br /&gt;
summary(linmodel)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Predecimos la temperatura usando este modelo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
maps &amp;lt;- readRAST(c(&amp;quot;elevation&amp;quot;, &amp;quot;latitude&amp;quot;))&lt;br /&gt;
maps$temp_model &amp;lt;- predict(linmodel, newdata=maps)&lt;br /&gt;
spplot(maps, &amp;quot;temp_model&amp;quot;)&lt;br /&gt;
# write modeled temperature to GRASS raster and set color ramp&lt;br /&gt;
writeRAST(maps, &amp;quot;temp_model&amp;quot;, zcol=&amp;quot;temp_model&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;r.colors&amp;quot;, map=&amp;quot;temp_model&amp;quot;, color=&amp;quot;celsius&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comparamos el modelo lineal simple con los datos reales:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
execGRASS(&amp;quot;r.mapcalc&amp;quot;, expression=&amp;quot;diff = temp_mean - temp_model&amp;quot;)&lt;br /&gt;
execGRASS(&amp;quot;r.colors&amp;quot;, map=&amp;quot;diff&amp;quot;, color=&amp;quot;differences&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la GUI de GRASS, añadimos las capas ''temp_mean'' y ''temp_model'', las seleccionamos y vamos a ''Archivo'' - ''Ventana de visualización móvil'' para comparar visualmente el modelo y la temperatura real.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=1 widths=1100 heights=400&amp;gt;&lt;br /&gt;
Image:US_temp_model_comparison.png|Comparasión de la temperatura media anual PRISM y la temperatura modelada basada en latitud y elevación. Izquierda: diferencias entre el modelado y el real, en grados Celsius. Derecha: Usando el Visualizador de ventana móvil para evaluar visualmente el modelo (temperatura modelada del lado derecho).&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manipulación y visualización de datos Espacio-temporales ==&lt;br /&gt;
GRASS GIS7 tiene una nueva librería y una serie de módulos para el manejo y análisis de datos espacio-temporales.&lt;br /&gt;
El sistema (framework) temporal de GRASS no trabaja con capas de mapas individuales, sino con conjuntos de datos espacio-temporales. Un conjunto de datos es una colección de capas de mapas individuales con una marca de tiempo asignada. Todos los datos espaciales son guardados en la base de datos GRASS estándar, el sistema temporal administra el metadato temporal en una base de datos temporales separada.&lt;br /&gt;
&lt;br /&gt;
Información general en el manual: https://grass.osgeo.org/grass72/manuals/temporalintro.html&lt;br /&gt;
&lt;br /&gt;
Conceptos y terminología importante:&lt;br /&gt;
* Conjunto de datos ráster espacio temporales ('''strds''') son diseñados para manejar series de tiempos de mapas ráster. Los módulos que procesan strds tienen el prefijo ''t.rast''.&lt;br /&gt;
* Conjunto de datos ráster espacio temporales 3D ('''str3ds''') son diseñados para manejar series de tiempo de mapas ráster 3D. Los módulos que procesan str3ds tienen el prefijo ''t.rast3d''.&lt;br /&gt;
* Conjuntos de datos vectoriales espacio temporales ('''stvds''') son diseñados para manejar series de tiempo de mapas vectoriales. Los módulos que procesan stvds tienen prefijo ''t.vect''.&lt;br /&gt;
* Los Conjuntos de datos pueden usar ''intervals'' (intervalos) (definidos por marca de tiempo de inicio y término) o ''instances'' (solo tiempo de inicio)&lt;br /&gt;
* Los conjuntos de datos pueden usar tiempos ''absolute'' (absolutos) (marcas de tiempo como 2017-04-06 22:39:49) o ''relative'' (relativos) (por ej. (e.g., 4 years, -90 days).&lt;br /&gt;
* La ''granularity'' (granularidad) es el divisor común menor de la extensión temporal (y posibles vacíos (gaps)) de todos los mapas del conjunto de datos.&lt;br /&gt;
* La ''topology'' (topología) temporal analiza las relaciones temporales entre intervalos de tiempo.&lt;br /&gt;
* El ''sampling'' (muestreo) temporal es usado para determinar el estado de un proceso durante un segundo proceso.&lt;br /&gt;
&lt;br /&gt;
Vista general del flujo de trabajo:&lt;br /&gt;
# Crear un conjunto de datos vacío: strds, str3ds o stvds ({{cmd|t.create}}),&lt;br /&gt;
# registrar los mapas GRASS GIS ({{cmd|t.register}}),&lt;br /&gt;
# revisar el conjunto de datos espacio temporales creado ({{cmd|t.list}}), {{cmd|t.info}}, {{cmd|t.rast.list}})&lt;br /&gt;
# hacer el análisis {{cmd|t.rast.aggregate}}, {{cmd|t.info}}, {{cmd|t.rast.univar}}, {{cmd|t.vect.univar}}, ... ¡y muchos más!&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo de modelación de radiación solar ===&lt;br /&gt;
Vamos a generar datos espacio-temporales y luego explorarlos usando los módulos temporales y visualizarlos como una animación.&lt;br /&gt;
&lt;br /&gt;
Vamos a usar {{addonCmd|r.sun.hourly}} para calcular una serie de irradiancias solares durante un día en un modelo digital de superficie (incluye copas de los árboles) derivado previamente en la parte de lidar de este taller.&lt;br /&gt;
&lt;br /&gt;
Descargue la extensión (addon) si no lo ha hecho previamente:&lt;br /&gt;
&lt;br /&gt;
 g.extension r.sun.hourly&lt;br /&gt;
&lt;br /&gt;
Convierta la fecha del fía de hoy (o cualquier fecha) a día del año corriendo este comando en la pestaña de la consola de Python en la GUI.&lt;br /&gt;
&lt;br /&gt;
  from datetime import datetime&lt;br /&gt;
  datetime.now().timetuple().tm_yday&lt;br /&gt;
  # or for an arbitrary day:&lt;br /&gt;
  datetime.datetime(2017, 6, 21).timetuple().tm_yday&lt;br /&gt;
&lt;br /&gt;
Use este número para la opción día.&lt;br /&gt;
Calcular la series ráster de la irradiancia del haz (sea paciente) con el siguiente comando.&lt;br /&gt;
La serie de tiempo es registrada automáticamente en un conjunto de datos ráster espacio temporales.&lt;br /&gt;
&lt;br /&gt;
  # first set region&lt;br /&gt;
  g.region raster=el_D783_6m -p&lt;br /&gt;
  r.sun.hourly -t elevation=el_D783_6m start_time=6 end_time=20 day=101 year=2017 time_step=0.5 beam_rad_basename=solar nprocs=4&lt;br /&gt;
&lt;br /&gt;
Ahora cerciorémonos que el conjunto de datos temporales haya sido creado:&lt;br /&gt;
&lt;br /&gt;
  t.list type=strds&lt;br /&gt;
&lt;br /&gt;
Enliste los metadatos y la información analítica sobre el conjunto de datos:&lt;br /&gt;
&lt;br /&gt;
  t.info input=solar type=strds&lt;br /&gt;
&lt;br /&gt;
Muestre cuales capas ráster están registradas:&lt;br /&gt;
&lt;br /&gt;
  t.rast.list input=solar&lt;br /&gt;
&lt;br /&gt;
Defina la paleta de colores para el conjunto de datos creado.&lt;br /&gt;
Use la herramienta interactiva en el díalogo de t.rast.colors (pestaña ''Definir'', bajo ''reglas'')&lt;br /&gt;
o cree un archivo de texto con la siguiente regla de colores y páselo a la opción ''reglas'':&lt;br /&gt;
&lt;br /&gt;
  0% 60:60:60&lt;br /&gt;
  70% yellow&lt;br /&gt;
  100% 255:70:0&lt;br /&gt;
&lt;br /&gt;
  t.rast.colors input=solar rules=rules.txt&lt;br /&gt;
&lt;br /&gt;
Ahora visualizaremos los resultados como una animación.&lt;br /&gt;
&lt;br /&gt;
Inicie la herramienta de animaciones de GRASS GIS desde ''Archivo'' - ''Herramienta de animación'' y cree una nueva animación. Seleccione ''conjunto de datos ráster espacio temporales'', vea la siguiente figura para más detalles.&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery perrow=1 widths=1100 heights=500&amp;gt;&lt;br /&gt;
Image:Animation_solar_example.png|Usando la Herramienta de animación de GRASS GIS para animar la irradiancia solar durante un día. Calculado con {{addonCmd|r.sun.hourly}}.&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Procesamiento de datos Lidar ==&lt;br /&gt;
Vamos a importar una nube de puntos lidar como un archivo LAS y usar binning (use binning) para analizar nuestros datos, y luego interpolarlos para crear un modelo digital de superficie.&lt;br /&gt;
Vamos a usar {{cmd|r.in.lidar}} y {{cmd|v.in.lidar}} para trabajar con archivos LAS. En caso que no esté disponible en su instalación GRASS (GRASS necesita estar compilado con libLAS), use {{cmd|r.in.xyz}} y {{cmd|v.in.ascii}} con los archivos de texto correspondientes, el flujo de trabajo es muy similar.&lt;br /&gt;
&lt;br /&gt;
Datos necesarios:&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.las mosaico LAS para Raleigh]&lt;br /&gt;
* [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm.txt versión ttxt para el mosaico (todos los puntos)] and [http://fatra.cnr.ncsu.edu/us-iale2017/tile_0793_016_spm_first.txt y solamente los primeros puntos de retorno]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Análisis Lidar usando binning ===&lt;br /&gt;
&lt;br /&gt;
Calcular la densidad de la nube de puntos:&lt;br /&gt;
&lt;br /&gt;
  g.region  n=224034 s=223266 e=640086 w=639318 res=1&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=n output=tile_density_1m resolution=1&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=n output=tile_density_6m resolution=6&lt;br /&gt;
&lt;br /&gt;
Podemos usar el binning para calcular el rango de los valores de elevación y otras estadísticas:&lt;br /&gt;
&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=range output=tile_range_6m resolution=6&lt;br /&gt;
  # el mapa y las siguientes estadísticas muestran que hay un punto discrepante alrededor de los 600 m&lt;br /&gt;
  r.report map=tile_range_6m units=c&lt;br /&gt;
  # cambiar la paleta de colores al histograma ecualizado para ver el constraste&lt;br /&gt;
  r.colors map=tile_range_6m color=viridis -e&lt;br /&gt;
&lt;br /&gt;
Podemos flitrar los datos por clase o retorno:&lt;br /&gt;
&lt;br /&gt;
  r.in.lidar -o input=tile_0793_016_spm.las method=mean output=tile_ground_6m resolution=6 class_filter=2&lt;br /&gt;
  r.colors map=tile_ground_6m color=elevation&lt;br /&gt;
&lt;br /&gt;
=== Interpolación ===&lt;br /&gt;
Primero importamos los archivos LAS como puntos vectoriales, nos quedamos solamente con los primeros puntos de retorno y limitamos la importación verticalmente para impedir usar los puntos discrepantes encontrados en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
  v.in.lidar -obt input=tile_0793_016_spm.las  output=tile_points return_filter=first zrange=0,300&lt;br /&gt;
&lt;br /&gt;
Después interpolamos:&lt;br /&gt;
&lt;br /&gt;
  g.region -a -p vector=tile_points res=2&lt;br /&gt;
  v.surf.rst input=tile_points elevation=tile_dsm tension=25 smooth=1 npmin=100&lt;br /&gt;
&lt;br /&gt;
Puede visualizar el DSM usando la vista 3D (primero deseleccione todas las demás capas y luego cambie a 3D) o calculando el sombreado de relieve con {{cmd|r.relief}}.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[GRASS and Python]]&lt;br /&gt;
* [[GRASS Python Scripting Library]]&lt;br /&gt;
* [[R statistics/rgrass7|R and the rgrass7 package]]&lt;br /&gt;
* [[Temporal data processing/GRASS R raster time series processing|Processing raster time series with GRASS GIS and R]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Workshops]]&lt;br /&gt;
[[Category: 2017]]&lt;br /&gt;
[[Category: Python]]&lt;br /&gt;
[[Category: R]]&lt;br /&gt;
[[Category: Scripting‏‎]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Cropping_maps/es&amp;diff=24204</id>
		<title>Cropping maps/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Cropping_maps/es&amp;diff=24204"/>
		<updated>2017-06-19T19:13:31Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Recortar un mapa significa agarrar el contenido de un mapa (''fuente'') y eliminar todos los datos que están fuera del área de estudio (''contorno'') para crear un nuevo mapa más pequeño (''mapa recortado''). Las técnicas difieren dependiendo de si los datos de entrada (fuente) son ráster o vectoriales y si el contorno es definido por otro mapa o si es definido por coordenadas. Quizás quiera hacerlo con datos vectoriales dado que GRASS siempre opera sobre todo el mapa vectorial, aun cuando los elementos estén fuera de la de la región en que se encuentra el usuario ([[current region]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa vectorial como fuente''' y  '''mapa vectorial como contorno'''. Use&lt;br /&gt;
 {{cmd|v.overlay}} operator=and&lt;br /&gt;
&lt;br /&gt;
Ejemplo: tiene un mapa de carreteras de Estados Unidos y quiere un mapa que contenga solamente los caminos de California. Antes el módulo &amp;lt;tt&amp;gt;v.cutter&amp;lt;/tt&amp;gt;  hacía esa tarea; sin embargo, se reemplazó por {{cmd|v.overlay}} en la versión 6 de GRASS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa vectorial como fuente''' y '''coordenadas como contorno'''. Definir la región a las coordenas deseadas  ({{cmd|g.region}}), crear un nuevo mvectorial a partir de la extensión de la región para usar el contorno  {{cmd|v.in.region}}, entonces  {{cmd|v.overlay}} como antes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De otro modo, considere [[Crop a shapefile during import]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa ráster como fuente''' y '''mapa ráster como contorno'''. Hacer un contorno usado {{cmd|r.mask}} luego copiar mapa ráster fuente a un nuevo mapa con el comando ({{cmd|g.copy}}). Todas las celdas fuera de la máscara serán omitidas al hacer la copia. De manera alternativa se puede usar el comando {{cmd|r.mapcalc}}:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.mapcalc}} &amp;quot;cropped = if(boundary,raster_source)&amp;quot;&lt;br /&gt;
{{cmd|r.colors}} map=cropped rast=source # puede requerir transferir la tabla de colores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa ráster como fuente''' y '''contorno vectorial'''. Convierte el vectorial a una máscara ráster (1 en la zona dentro, null (nulo) de otro modo):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.to.rast}} in=vector_boundary out=raster_boundary use=val value=1&lt;br /&gt;
&lt;br /&gt;
Luego se procesa como arriba para dos mapas ráster.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Extracting_coordinates_of_points_and_writing_them_to_the_attribute_table/es&amp;diff=23353</id>
		<title>Extracting coordinates of points and writing them to the attribute table/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Extracting_coordinates_of_points_and_writing_them_to_the_attribute_table/es&amp;diff=23353"/>
		<updated>2016-08-05T14:20:14Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se ve cómo se pueden extraer las coordenadas de puntos, y cómo pueden ser mostrados en una tabla de atributos.&lt;br /&gt;
El ejemplo se basa en el siguiente archivo '''CSV''', y funciona dentro de la Localización North Carolina, de los datos de muestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
674065.18600,3367985.59300,25.83&lt;br /&gt;
674066.43200,3367982.46800,25.96&lt;br /&gt;
674065.99100,3367983.83600,40.24&lt;br /&gt;
674065.92600,3367985.70100,26.00&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota: el ejemplo corre en GRASS 6.4, para GRASS 7 se hacen las aclaraciones en el mismo texto'''.&lt;br /&gt;
__TOC__&lt;br /&gt;
=== Importar puntos ===&lt;br /&gt;
Para importar los puntos del archivo CSV use {{cmd|v.in.ascii}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.in.ascii -z input=/path/to/points_map.csv output=points format=point skip=0 x=1 y=2 z=3 cat=0 fs=,&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Añadir tabla de atributos para el mapa vectorial  ===&lt;br /&gt;
Con {{cmd|v.db.addtable}} se crea una nueva tabla de atributos para el mapa de puntos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.addtable map=points_map table=points_map columns=&amp;quot;cat integer&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conectar el mapa vectorial con la tabla de atributos  ===&lt;br /&gt;
Use {{cmd|v.db.connect}} para conectar el mapa vectorial con su tabla de atributos correspondiente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.connect -o map=points_map table=points_map&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Añadir columnas ===&lt;br /&gt;
Use {{cmd|v.db.addcol}} para añadir columnas a la tabla de atributos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.addcol map=points columns=&amp;quot;x double precision, y double precision, z double precision&amp;quot;&lt;br /&gt;
v.db.addcolumn map=points columns=&amp;quot;x double precision, y double precision, z double precision&amp;quot; '''# GRASS 7'''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Añadir coordenadas  ===&lt;br /&gt;
Use {{cmd|v.to.db}} para escribir las coordenadas de los puntos en la tabla de atributos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.to.db map=points_map opt=coor columns=&amp;quot;x,y,z&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:TimNorwey|TimNorwey]] 14:01, 26 March 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Import]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Extracting_coordinates_of_points_and_writing_them_to_the_attribute_table/es&amp;diff=23352</id>
		<title>Extracting coordinates of points and writing them to the attribute table/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Extracting_coordinates_of_points_and_writing_them_to_the_attribute_table/es&amp;diff=23352"/>
		<updated>2016-08-05T14:19:23Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Extracting coordinates of points and writing them to the attribute table/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se ve cómo se pueden extraer las coordenadas de puntos, y cómo pueden ser mostrados en una tabla de atributos.&lt;br /&gt;
El ejemplo se basa en el siguiente archivo '''CSV''', y funciona dentro de la Localización North Carolina, de los datos de muestra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
674065.18600,3367985.59300,25.83&lt;br /&gt;
674066.43200,3367982.46800,25.96&lt;br /&gt;
674065.99100,3367983.83600,40.24&lt;br /&gt;
674065.92600,3367985.70100,26.00&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota: el ejemplo corre en GRASS 6.4, para GRASS 7 se hacen las aclaraciones en el mismo texto'''.&lt;br /&gt;
__TOC__&lt;br /&gt;
=== Importar puntos ===&lt;br /&gt;
Para importar los puntos del archivo CSV use {{cmd|v.in.ascii}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.in.ascii -z input=/path/to/points_map.csv output=points format=point skip=0 x=1 y=2 z=3 cat=0 fs=,&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Añadir tabla de atributos para el mapa vectorial  ===&lt;br /&gt;
Con {{cmd|v.db.addtable}} se crea una nueva tabla de atributos para el mapa de puntos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.addtable map=points_map table=points_map columns=&amp;quot;cat integer&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conectar el mapa vectorial con la tabla de atributos  ===&lt;br /&gt;
Use {{cmd|v.db.connect}} para conectar el mapa vectorial con su tabla de atributos correspondiente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.connect -o map=points_map table=points_map&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Añadir columnas ===&lt;br /&gt;
Use {{cmd|v.db.addcol}} para añadir columnas a la tabla de atributos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.addcol map=points columns=&amp;quot;x double precision, y double precision, z double precision&amp;quot;&lt;br /&gt;
v.db.addcolumn map=points columns=&amp;quot;x double precision, y double precision, z double precision&amp;quot; '''# GRASS 7'''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Añadir coordenadas  ===&lt;br /&gt;
Use {{cmd|v.to.db}} para escribir las coordenadas de los puntos en la tabla de atributos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.to.db map=points_map opt=coor columns=&amp;quot;x,y,z&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:TimNorwey|TimNorwey]] 14:01, 26 March 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Import]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Laguages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Extracting_coordinates_of_points_and_writing_them_to_the_attribute_table&amp;diff=23351</id>
		<title>Extracting coordinates of points and writing them to the attribute table</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Extracting_coordinates_of_points_and_writing_them_to_the_attribute_table&amp;diff=23351"/>
		<updated>2016-08-05T14:10:20Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The workflow below describes how coordinates can be extracted from points and how they can be written into the attribute table. &lt;br /&gt;
&lt;br /&gt;
The example is based on a '''CSV'''-File:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
674065.18600,3367985.59300,25.83&lt;br /&gt;
674066.43200,3367982.46800,25.96&lt;br /&gt;
674065.99100,3367983.83600,40.24&lt;br /&gt;
674065.92600,3367985.70100,26.00&lt;br /&gt;
&lt;br /&gt;
''' '''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
=== Import points ===&lt;br /&gt;
For the import of the CSV-File use {{cmd|v.in.ascii}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.in.ascii -z input=/path/to/points_map.csv output=points format=point skip=0 x=1 y=2 z=3 cat=0 fs=,&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add attribute table for vector ===&lt;br /&gt;
Through {{cmd|v.db.addtable}} an attribute table for the points is created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.addtable map=points_map table=points_map columns=&amp;quot;cat integer&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connect the vector to the attribute table ===&lt;br /&gt;
Use {{cmd|v.db.connect}} to connect the vector with its corresponding table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.connect -o map=points_map table=points_map&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add columns ===&lt;br /&gt;
Use {{cmd|v.db.addcol}} to add the columns to the attribute table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.db.addcol map=points columns=&amp;quot;x double precision, y double precision, z double precision&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add coordinates ===&lt;br /&gt;
Use {{cmd|v.to.db}} to write the coordinates of the points into the attribute table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
v.to.db map=points_map opt=coor columns=&amp;quot;x,y,z&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:TimNorwey|TimNorwey]] 14:01, 26 March 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Import]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Image_classification/es&amp;diff=23350</id>
		<title>Image classification/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Image_classification/es&amp;diff=23350"/>
		<updated>2016-08-05T13:47:36Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Clasificación de imágenes ==&lt;br /&gt;
&lt;br /&gt;
'''Métodos de clasificación en GRASS'''&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| ||'''radiométrica &amp;lt;BR&amp;gt; no supervisada'''||'''radiométrica &amp;lt;BR&amp;gt;supervisada 1'''||'''radiométrica &amp;lt;BR&amp;gt;supervisada 2'''||'''radiométrica y geométrica&amp;lt;BR&amp;gt; supervisada'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Prepocesamiento de imágenes''' || colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| {{AddonCmd|r.smooth.seg}} (opcional, en caso de que los datos originales tengan ruido)&lt;br /&gt;
|-&lt;br /&gt;
| '''Segmentación''' || colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| {{cmd|i.segment|version=70}}&lt;br /&gt;
|-&lt;br /&gt;
| '''Preprocesamiento'''||{{cmd|i.cluster}}||{{cmd|i.class}} (monitorea digitalización), {{cmd|g.gui.iclass|version=70}} (en GRASS 70)||{{cmd|i.gensig}} (usando mapas de entrenamiento)||{{cmd|i.gensigset}} (usando mapas de entrenamiento)&lt;br /&gt;
|-&lt;br /&gt;
| '''Clasificación'''||{{cmd|i.maxlik}}||{{cmd|i.maxlik}}||{{cmd|i.maxlik}}||{{cmd|i.smap}}&lt;br /&gt;
|-&lt;br /&gt;
| '''Aclaraciones'''||automático basado ||necesita digitalización previa||necesita digitalización previa||necesita digitalización previa&lt;br /&gt;
|-&lt;br /&gt;
|    ||en estadísticas de imágenes||de áreas de etremiento||de áreas de entreamiento||de áreas de entrenamiento&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Es posible digitalizar áreas de entrenamiento con r.digit (no recomendado) o &lt;br /&gt;
You can digitize training areas with either r.digit (not recommended), o la  [[herramienta de digitalización de GRASS]] + v.to.rast (recomendado). En versiones &amp;lt; 7.0 era posible usar el módulo v.digit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Preprocesamiento de imágenes (opcional) ===&lt;br /&gt;
* {{AddonCmd|r.smooth.seg}} - produce una aproximación suaviada de los datos y detecta discontinuidades. El módulo está basado en el modelo de variación Mumford-Shah para segmentación de imágenes. Usado como un análisis previo a la clasificación.&lt;br /&gt;
: Para más detalles revise el maual {{AddonCmd|r.smooth.seg}}. Este módulo anteriormente se llamaba r.seg.&lt;br /&gt;
* {{cmd|i.segment}} - identifica segmentos (objetos) de datos de imágenes basado (actualmente) en un algoritmo de crecimiento y unión. El resultado de la segmentación puede ser útil (por si misma) como un paso previo a la clasificación, por ej. reduciendo el ruido y aumentando la velocidad de la clasificación.&lt;br /&gt;
** Clasificación de estos segmentos: ver abajo en &amp;quot;Clasificación no supervisada&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Modo interactivo ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.class}} - Genera las firmas espectrales para una imagen al permitir al usuario marcar las regiones de interés.&lt;br /&gt;
: El archivo de firmas puede ser usado como entrada para {{cmd|i.maxlik}} o como un archivo inicial (semilla) para {{cmd|i.cluster}}.&lt;br /&gt;
* {{cmd|g.gui.iclass|version=70}} - Herramienta de clasificación supervisada de datos de imágenes.&lt;br /&gt;
&lt;br /&gt;
=== Preprocesamiento ===&lt;br /&gt;
&lt;br /&gt;
*  {{cmd|i.cluster}} - Genera firmas espectrales para tipos de cobertura en una imagen, usando un algoritmo de cluster.&lt;br /&gt;
: El archivo de firmas resltante es usado como entrada para {{cmd|i.maxlik}}, para generar una clasificación no supervisada.&lt;br /&gt;
* {{cmd|i.gensig}} - Genera estadísticas para  {{cmd|i.maxlik}} a partir de capas de mapas ráster.&lt;br /&gt;
* {{cmd|i.gensigset}} - Genera estadísticas para  {{cmd|i.smap}} a partir de capas de mapas ráster.&lt;br /&gt;
&lt;br /&gt;
Información relativa a {{cmd|i.cluster}}:&lt;br /&gt;
* Discusión: [https://lists.osgeo.org/pipermail/grass-user/2012-October/066046.html Is &amp;quot;i.cluster&amp;quot; an implementation of the ISODATA algorithm?]&lt;br /&gt;
* [[User:NikosA/About Clustering|About Clustering]]&lt;br /&gt;
&lt;br /&gt;
=== Clasificación no supervisada ===&lt;br /&gt;
&lt;br /&gt;
Para una introducción, revise por ejemplo {{wikipedia|Cluster_analysis}}.&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.maxlik}} - Clasifica reflectancias espectrales de las celdas de datos de imágenes.&lt;br /&gt;
: La clasificación está basada en la información de las firmas espectrales generada por {{cmd|i.cluster}} (ver abajo).&lt;br /&gt;
* GRASS GIS 7: {{cmd|i.segment}}&lt;br /&gt;
** La clasificación de estos segmentos puede realizarse con los siguientes complementos:  {{AddonCmd|v.class.mlR}}, {{AddonCmd|v.class.mlpy}}, {{AddonCmd|v.class.ml}}.&lt;br /&gt;
&lt;br /&gt;
Vea el ejemplo de más abajo.&lt;br /&gt;
&lt;br /&gt;
=== Clasificación supervisada ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.maxlik}} - Clasifica la reflectancia espectral de la celda de datos de imágenes.&lt;br /&gt;
: La clasificación está basada en la información de las firmas espectrales generada ya sae con {{cmd|i.class}}, o {{cmd|i.gensig}}.&lt;br /&gt;
* {{cmd|g.gui.iclass}} - Herramienta para clasificación supervisada de datos de imágenes.&lt;br /&gt;
* {{cmd|i.smap}}  - Realiza una clasificación de imágenes contextual (segmentación de imágenes) usando la estimación secuencial máxima a posteriori (SMAP).&lt;br /&gt;
* En caso de mapas pancromaticos o de una cantidad limitada de canales, generalmente se recomienda generar canales sintéticos a través de análiss de texturas ({{cmd|r.texture}}).&lt;br /&gt;
&lt;br /&gt;
Vea el ejemplo de más abajo.&lt;br /&gt;
&lt;br /&gt;
== Pequeño tutorial de clasificación ==&lt;br /&gt;
&lt;br /&gt;
Se necesita: GRASS &amp;gt;=  6.4 . Las instrucciones para GRASS 7 están señaladas con un ''#'''GRASS7''' '' al final del comando, si corre estas instrucciones en la consola de comandos de la GUI, copie la instrucción sin el ''#'' y todo lo que le sigue.&lt;br /&gt;
&lt;br /&gt;
Se usan los datos del satélite Landsat preparados para los datos de muestra de [http://www.grassbook.org/data_menu3rd.php North Carolina]. Es un conjunto de datos multiespectrales en donde cada canal está guardado en un mapa separado.&lt;br /&gt;
&lt;br /&gt;
Se usa la Localización North Carolina.&lt;br /&gt;
&lt;br /&gt;
=== Calentando motores con Landsat TM ===&lt;br /&gt;
&lt;br /&gt;
Ver qué mapas hay&lt;br /&gt;
  g.list rast &lt;br /&gt;
  g.list type=rast mapset=landsat # '''GRASS7'''&lt;br /&gt;
  # definir la región a partir de uno de las bandas y mostrar la configuración de la región&lt;br /&gt;
  g.region rast=lsat7_2002_10 -p&lt;br /&gt;
&lt;br /&gt;
Ver algunos mapas Landsat (1: azul, 2: verde, 3: rojo, 4: cercano al infrarojo, etc.)&lt;br /&gt;
  d.mon x0&lt;br /&gt;
  d.mon wx0 # '''GRASS7'''&lt;br /&gt;
  d.rast lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_20&lt;br /&gt;
  d.rast lsat7_2002_30 &lt;br /&gt;
  d.rast lsat7_2002_40&lt;br /&gt;
&lt;br /&gt;
Consultar el valor de puntos individuales&lt;br /&gt;
  d.what.rast lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40&lt;br /&gt;
&lt;br /&gt;
Histograma de un canal:&lt;br /&gt;
  d.histogram lsat7_2002_10&lt;br /&gt;
  d.erase&lt;br /&gt;
&lt;br /&gt;
Crear vistas RGB (rojo,verde,azul) al vuelo, con colores verdaderos y falsos:&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
&lt;br /&gt;
Revisar los canáles térmicos (codificados para ajustar a rango de datos 0-255):&lt;br /&gt;
# http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html&lt;br /&gt;
# Vea el LMIN/LMAX: &amp;quot;Table 11.2 ETM+ Spectral Radiance Range watts/(meter squared * ster * µm)&amp;quot;&lt;br /&gt;
# no se detalla el procedimiento, pero se usa r.mapcalc para convertir  grados Kelvin/Celsius.&lt;br /&gt;
&lt;br /&gt;
  # ver el canál térmico codificado&lt;br /&gt;
  d.rast lsat7_2002_61&lt;br /&gt;
&lt;br /&gt;
Cálculo de NDVI como ejemplo de álgebra de mapas:&lt;br /&gt;
  r.mapcalc &amp;quot;ndvi = 1.0 * (lsat7_2002_40 - lsat7_2002_30)/(lsat7_2002_40 + lsat7_2002_30)&amp;quot;&lt;br /&gt;
  d.rast.leg ndvi&lt;br /&gt;
  r.colors ndvi color=ndvi&lt;br /&gt;
  d.rast.leg ndvi&lt;br /&gt;
&lt;br /&gt;
Mostrar algunas &amp;quot;clases&amp;quot; seleccionadas de NDVI:&lt;br /&gt;
  d.erase&lt;br /&gt;
  d.rast ndvi val=0.3-1.0&lt;br /&gt;
  d.rast ndvi val=-1.0--0.1&lt;br /&gt;
  d.rast ndvi val=0.0-0.2&lt;br /&gt;
  d.rast ndvi val=0.0-0.3&lt;br /&gt;
&lt;br /&gt;
Ver el canal pancromático, comparar la resolución:&lt;br /&gt;
  r.info -g lsat7_2002_80 &lt;br /&gt;
  r.info -g lsat7_2002_30&lt;br /&gt;
  g.region rast=lsat7_2002_80 -p&lt;br /&gt;
  d.erase -f&lt;br /&gt;
  d.rast lsat7_2002_80&lt;br /&gt;
  d.zoom # '''no usar en GRASS7'''&lt;br /&gt;
  d.rast lsat7_2002_30&lt;br /&gt;
  d.rast lsat7_2002_80&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
=== Clasificación de imágenes ===&lt;br /&gt;
&lt;br /&gt;
Definir región al canal rojo:&lt;br /&gt;
  g.region rast=lsat7_2002_30 -p&lt;br /&gt;
&lt;br /&gt;
Crear un grupo:&lt;br /&gt;
  i.group group=lsat7_2002 subgroup=lsat7_2002 \&lt;br /&gt;
    input=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_70&lt;br /&gt;
&lt;br /&gt;
==== Clasificación no supervisada ====&lt;br /&gt;
&lt;br /&gt;
Generar estadísticas no supervisadas:&lt;br /&gt;
  i.cluster  group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt&lt;br /&gt;
  i.cluster  group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
  # ver el archivo de reporte &lt;br /&gt;
  cat lsat7_2002.txt # se puede usar también el comando gedit&lt;br /&gt;
&lt;br /&gt;
Asignar pixeles a clases, revisar la calidad de la asignación:&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class reject=lsat7_2002_reject&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class reject=lsat7_2002_reject  # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
  # color compuesto falso&lt;br /&gt;
  d.mon x0 ; d.font Vera&lt;br /&gt;
  d.mon wx0; d.font Vera # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  # classification result&lt;br /&gt;
  d.mon x1 ; d.font Vera&lt;br /&gt;
  d.mon wx1 ; d.font Vera # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_class&lt;br /&gt;
  # mapa de rechazo&lt;br /&gt;
  d.mon x2 ; d.font Vera&lt;br /&gt;
  d.mon wx2; d.font Vera  # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  # histograma de rechazo&lt;br /&gt;
  d.mon x3 ; d.font Vera&lt;br /&gt;
  d.mon wx3; d.font Vera  # '''GRASS7'''&lt;br /&gt;
  d.histogram lsat7_2002_reject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Map_lsat7_2002_r1g5b7.png|thumb|center|300px|Mapa NC Landsat 2002 - falso color compuesto]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_class.png|thumb|center|300px|Clasificación no supervisada]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Histogram_lsat7_2002_reject.png|thumb|center|300px|Histograma de rechazo de la clasificación no supervisada]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_reject.png|thumb|center|300px|Mapa de rechazo de la clasificación no supervisada]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Juegue con diferentes separaciones de los clusters:&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt separation=1.5&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=10 reportfile=lsat7_2002_2.txt separation=1.5 # '''GRASS7'''&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class2 reject=lsat7_2002_reject2&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class2 reject=lsat7_2002_reject2  # '''GRASS7'''&lt;br /&gt;
  d.mon x4&lt;br /&gt;
  d.mon wx4  # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_class2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_class2&lt;br /&gt;
&lt;br /&gt;
Comparar con RGB:&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class2 cat=1 -o&lt;br /&gt;
  d.rast lsat7_2002_class2 values=1 -n  # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class cat=1 -o&lt;br /&gt;
  d.rast lsat7_2002_class values=1 -n   # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class cat=1 -o&lt;br /&gt;
  d.rast lsat7_2002_class values=1 -n   # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
Un tercer intento con más clases:&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=15 reportfile=lsat7_2002.txt &lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=15 reportfile=lsat7_2002.txt  # '''GRASS7'''&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class3 reject=lsat7_2002_reject3&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class3 reject=lsat7_2002_reject3 # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_class3&lt;br /&gt;
&lt;br /&gt;
[[Image:Map_lsat7_2002_class_unsupervised_15.png|thumb|center|300px|Clasificación no supervisada con 15 clases]]&lt;br /&gt;
&lt;br /&gt;
====Clasificación supervisada====&lt;br /&gt;
&lt;br /&gt;
Lazar la GUI para digitalizar:&lt;br /&gt;
  g.gui wxpython&lt;br /&gt;
&lt;br /&gt;
Ahora digitalice las áreas de entrenamiento de agua, asfalto, bosque, suelo descubierto en el compuesto RGB en la GUI.&lt;br /&gt;
Digitalizar polígonos/centroides con atributos. La ventaja: sabemos que clases son.&lt;br /&gt;
&lt;br /&gt;
[[Image:Training_map_supervised.png|thumb|center|300px|Mapa NC Landsat 2002 - áreas de entrenamiento]]&lt;br /&gt;
&lt;br /&gt;
Asignar también una ID numérica para cada clase en una nueva columna:&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
  v.db.addcol lsat7_training col=&amp;quot;id integer&amp;quot;&lt;br /&gt;
  v.db.addcolum lsat7_training col=&amp;quot;id integer&amp;quot;&amp;quot;id integer&amp;quot;   # '''GRASS7'''&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'water'&amp;quot; val=1&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'forest'&amp;quot; val=2&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'asphalt'&amp;quot; val=3&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'soil'&amp;quot; val=4&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
&lt;br /&gt;
Transformar mapa vectorial de entrenamineto a modelo ráster:&lt;br /&gt;
  g.region vect=lsat7_training align=lsat7_2002_10 -p&lt;br /&gt;
  v.to.rast in=lsat7_training out=lsat7_training use=attr col=id labelcol=name --o&lt;br /&gt;
  v.to.rast input=lsat7_training out=lsat7_training use=attr attribute_column=id label_column=name --o   # '''GRASS7'''&lt;br /&gt;
  &lt;br /&gt;
  d.mon x0&lt;br /&gt;
  d.mon wx0   # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_training &lt;br /&gt;
&lt;br /&gt;
Generar estadísticas a partir de áreas de entrenamiento:&lt;br /&gt;
  i.gensigset group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap training=lsat7_training&lt;br /&gt;
  i.gensigset group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_smap training=lsat7_training   # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
Realizar clasificación supervisada:&lt;br /&gt;
  i.smap group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap  out=smap&lt;br /&gt;
  i.smap group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_smap  out=smap   # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
Colorear:&lt;br /&gt;
  r.colors smap rules=- &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
 1 aqua&lt;br /&gt;
 2 green&lt;br /&gt;
 3 180 180 180&lt;br /&gt;
 4 brown&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
  d.rast.leg smap&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Map_lsat7_2002_r1g5b7.png|thumb|center|300px|Mapa NC Landsat 2002 - compuesto de color falso]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_class_supervised.png|thumb|center|300px|Clasificación supervisada SMAP]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vectorizar el resultado:&lt;br /&gt;
  r.to.vect smap out=smap feat=area&lt;br /&gt;
  r.to.vect smap out=smap type=area   # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.vect smap  type=boundary col=red&lt;br /&gt;
&lt;br /&gt;
Y ahí lo tienes :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Clasificación basada en objetos  ===&lt;br /&gt;
''Created based on [http://lists.osgeo.org/pipermail/grass-user/2014-June/070384.html Summary of object-based classification possibilities in GRASS GIS (June 2014)]. Feel free to merge this with other content or with different page.''&lt;br /&gt;
&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2013-October/066181.html Moritz's steps and the main discussion: Object-based image classification in GRASS] ([http://osgeo-org.1560.x6.nabble.com/Object-based-image-classification-in-GRASS-td5086693.html nabble link])&lt;br /&gt;
* [http://geo.fsv.cvut.cz/gwiki/153ZODH_/_15._cvi%C4%8Den%C3%AD Moritz's steps in a nice guide by Martin, in Czech with images] ([http://translate.google.com/translate?sl=cs&amp;amp;tl=en&amp;amp;js=n&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;u=http%3A%2F%2Fgeo.fsv.cvut.cz%2Fgwiki%2F153ZODH_%2F_15._cvi%25C4%258Den%25C3%25AD&amp;amp;act=url English Google-translation])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-user/2013-November/069254.html Alternative notes by Moritz: Classification of segments] ([http://osgeo-org.1560.x6.nabble.com/Re-Classification-of-segments-td5088837.html nabble link])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2014-January/066804.html Pietro's steps and tools] ([http://osgeo-org.1560.x6.nabble.com/Object-based-image-classification-in-GRASS-tp5086693p5096826.html nabble link])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2013-August/065287.html Another discussion about what variables to use: Object-based classification] ([http://osgeo-org.1560.x6.nabble.com/i-segment-invalid-region-id-0-tp5066102p5070201.html nabble link])&lt;br /&gt;
* The source code of the classification tools (for inspiration in writing your own scripts):&lt;br /&gt;
** v.class.ml: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.ml/ (Pietro's tool)&lt;br /&gt;
** v.class.mlpy: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.mlpy/ (Vaclav's tool)&lt;br /&gt;
** i.mlpy.py: http://svn.osgeo.org/grass/sandbox/turek/i.mlpy.py (Stepan's tool)&lt;br /&gt;
* List of Python machine learning libraries:&lt;br /&gt;
** scikit-learn, http://scikit-learn.org/ (used by v.class.ml)&lt;br /&gt;
** mlpy, http://mlpy.sourceforge.net/ (used by v.class.ml, v.class.mlpy and i.mlpy)&lt;br /&gt;
** Pandas, http://pandas.pydata.org/&lt;br /&gt;
** Milk, http://luispedro.org/software/milk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Más lecturas sobre clasificación con  GRASS ==&lt;br /&gt;
* Micha Silver: [https://www.surfaces.co.il/analyzing-acacia-tree-health-in-the-arava-with-grass-gis/ Analyzing acacia tree health in the Arava with GRASS GIS]&lt;br /&gt;
* Perrygeo: [http://www.perrygeo.net/wordpress/?p=104 Impervious surface deliniation with GRASS]&lt;br /&gt;
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/159 Working with Landsat Data]&lt;br /&gt;
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/548 Canopy Quantification via Image Classification]&lt;br /&gt;
* [http://istgeo.ist.supsi.ch/site/node/24 Segmentazione o classificazione d'immagini con GRASS] (en italiano)&lt;br /&gt;
* [http://www.mdpi.com/2220-9964/5/7/109 Di Palma, F.; Amato, F.; Nolè, G.; Martellozzo, F.; Murgante, B. 2016: A SMAP Supervised Classification of Landsat Images for Urban Sprawl Evaluation. ISPRS Int. J. Geo-Inf. 2016, 5, 109.]&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Image processing]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Image_classification&amp;diff=23349</id>
		<title>Image classification</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Image_classification&amp;diff=23349"/>
		<updated>2016-08-05T13:46:27Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Image classification ==&lt;br /&gt;
&lt;br /&gt;
'''Classification methods in GRASS'''&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| ||'''radiometric&amp;lt;BR&amp;gt;unsupervised'''||'''radiometric&amp;lt;BR&amp;gt;supervised 1'''||'''radiometric&amp;lt;BR&amp;gt;supervised 2'''||'''radiometric &amp;amp; geometric&amp;lt;BR&amp;gt;supervised'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Image Preprocessing''' || colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| {{AddonCmd|r.smooth.seg}} (optional, in case of noisy original data)&lt;br /&gt;
|-&lt;br /&gt;
| '''Segmentation''' || colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| {{cmd|i.segment|version=70}}&lt;br /&gt;
|-&lt;br /&gt;
| '''Preprocessing'''||{{cmd|i.cluster}}||{{cmd|i.class}} (monitor digitizing), {{cmd|g.gui.iclass|version=70}} (in GRASS 70)||{{cmd|i.gensig}} (using training maps)||{{cmd|i.gensigset}} (using training maps)&lt;br /&gt;
|-&lt;br /&gt;
| '''Classification'''||{{cmd|i.maxlik}}||{{cmd|i.maxlik}}||{{cmd|i.maxlik}}||{{cmd|i.smap}}&lt;br /&gt;
|-&lt;br /&gt;
| '''Remarks'''||automated run based||requires digitalization||requires digitalization||requires digitalization&lt;br /&gt;
|-&lt;br /&gt;
|    ||on image statistics||of training areas||of training areas||of training areas&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can digitize training areas with either r.digit (not recommended) or &amp;lt;strike&amp;gt;v.digit&amp;lt;/strike&amp;gt; [[GRASS Digitizing tool]] + v.to.rast (recommended)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Image Preprocessing (optional) ===&lt;br /&gt;
* {{AddonCmd|r.smooth.seg}} - produces a smooth approximation of the data and performs discontinuity detection. The module is based on the Mumford-Shah variational model for image segmentation. Used as pre-analysis for a subsequent classification.&lt;br /&gt;
: For details, see the {{AddonCmd|r.smooth.seg}} manual (formerly called: r.seg)&lt;br /&gt;
* {{cmd|i.segment}} - identifies segments (objects) from imagery data  based (currently) on a region growing and merging algorithm. The image segmentation results can be useful (on their own or) as a preprocessing step for image classification, i.e. reduce noise and speed up the classification.&lt;br /&gt;
** Classification of these segments: see below in &amp;quot;Unsupervised classification&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Interactive setup ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.class}} - Generates spectral signatures for an image by allowing the user to outline regions of interest.&lt;br /&gt;
: The resulting signature file can be used as input for {{cmd|i.maxlik}} or as a seed signature file for {{cmd|i.cluster}}.&lt;br /&gt;
* {{cmd|g.gui.iclass|version=70}} - Tool for supervised classification of imagery data.&lt;br /&gt;
&lt;br /&gt;
=== Preprocessing ===&lt;br /&gt;
&lt;br /&gt;
*  {{cmd|i.cluster}} - Generates spectral signatures for land cover types in an image using a clustering algorithm.&lt;br /&gt;
: The resulting signature file is used as input for {{cmd|i.maxlik}}, to generate an unsupervised image classification.&lt;br /&gt;
* {{cmd|i.gensig}} - Generates statistics for {{cmd|i.maxlik}} from raster map layer.&lt;br /&gt;
* {{cmd|i.gensigset}} - Generate statistics for {{cmd|i.smap}} from raster map layer.&lt;br /&gt;
&lt;br /&gt;
Background information concerning {{cmd|i.cluster}}:&lt;br /&gt;
* Discussion: [https://lists.osgeo.org/pipermail/grass-user/2012-October/066046.html Is &amp;quot;i.cluster&amp;quot; an implementation of the ISODATA algorithm?]&lt;br /&gt;
* [[User:NikosA/About Clustering|About Clustering]]&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised classification ===&lt;br /&gt;
&lt;br /&gt;
For an introduction, see for example {{wikipedia|Cluster_analysis}}.&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.maxlik}} - Classifies the cell spectral reflectances in imagery data.&lt;br /&gt;
: Classification is based on the spectral signature information generated by {{cmd|i.cluster}} (see above)&lt;br /&gt;
* GRASS GIS 7: {{cmd|i.segment}}&lt;br /&gt;
** Classification of these segments could be achieved with these addons: {{AddonCmd|v.class.mlR}}, {{AddonCmd|v.class.mlpy}}, {{AddonCmd|v.class.ml}}.&lt;br /&gt;
&lt;br /&gt;
See example below.&lt;br /&gt;
&lt;br /&gt;
=== Supervised classification ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.maxlik}} - Classifies the cell spectral reflectances in imagery data.&lt;br /&gt;
: Classification is based on the spectral signature information generated by either {{cmd|i.class}}, or {{cmd|i.gensig}}.&lt;br /&gt;
* {{cmd|g.gui.iclass}} - Tool for supervised classification of imagery data.&lt;br /&gt;
* {{cmd|i.smap}}  - Performs contextual (image segmentation) image classification using sequential maximum a posteriori (SMAP) estimation.&lt;br /&gt;
* In case of panchromatic maps or limited amount of channels, it is often recommended to generate synthetic channels through texture analysis ({{cmd|r.texture}})&lt;br /&gt;
&lt;br /&gt;
See example below.&lt;br /&gt;
&lt;br /&gt;
== Small classification tutorial ==&lt;br /&gt;
&lt;br /&gt;
Required: GRASS &amp;gt;=  6.4&lt;br /&gt;
&lt;br /&gt;
We are using Landsat satellite data prepared for the [http://www.grassbook.org/data_menu3rd.php North Carolina] sampling site. It is a multispectral dataset where each channel is stored in a separate map.&lt;br /&gt;
&lt;br /&gt;
We are using the North Carolina location here.&lt;br /&gt;
&lt;br /&gt;
=== Warming up with Landsat TM ===&lt;br /&gt;
&lt;br /&gt;
  # look what maps are there&lt;br /&gt;
  g.list rast&lt;br /&gt;
  # set to one of the color channels and print current region settings&lt;br /&gt;
  g.region rast=lsat7_2002_10 -p&lt;br /&gt;
&lt;br /&gt;
  # look at some Landsat map (1: blue, 2: green, 3: red, 4: near infrared etc.)&lt;br /&gt;
  d.mon x0&lt;br /&gt;
  d.rast lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_20&lt;br /&gt;
  d.rast lsat7_2002_30 &lt;br /&gt;
  d.rast lsat7_2002_40&lt;br /&gt;
&lt;br /&gt;
We can easily query the spectrum for individual points:&lt;br /&gt;
  d.what.rast lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40&lt;br /&gt;
&lt;br /&gt;
Histogram of a channel:&lt;br /&gt;
  d.histogram lsat7_2002_10&lt;br /&gt;
&lt;br /&gt;
Create RGB view on the fly, true and false color:&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
&lt;br /&gt;
Check thermal channel (encoded to fit into 0.255 data range):&lt;br /&gt;
# http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html&lt;br /&gt;
# Look up LMIN/LMAX: &amp;quot;Table 11.2 ETM+ Spectral Radiance Range watts/(meter squared * ster * µm)&amp;quot;&lt;br /&gt;
# we won't go into details here, r.mapcalc would be used to convert to Kelvoin/degree Celsius.&lt;br /&gt;
&lt;br /&gt;
  # look at encoded thermal channel&lt;br /&gt;
  d.rast lsat7_2002_61&lt;br /&gt;
&lt;br /&gt;
NDVI as example for map algebra:&lt;br /&gt;
  r.mapcalc &amp;quot;ndvi = 1.0 * (lsat7_2002_40 - lsat7_2002_30)/(lsat7_2002_40 + lsat7_2002_30)&amp;quot;&lt;br /&gt;
  d.rast.leg ndvi&lt;br /&gt;
  r.colors ndvi color=ndvi&lt;br /&gt;
  d.rast.leg ndvi&lt;br /&gt;
&lt;br /&gt;
Show selected NDVI &amp;quot;classes&amp;quot;:&lt;br /&gt;
  d.rast ndvi val=0.3-1.0&lt;br /&gt;
  d.rast ndvi val=-1.0--0.1&lt;br /&gt;
  d.rast ndvi val=0.0-0.2&lt;br /&gt;
  d.rast ndvi val=0.0-0.3&lt;br /&gt;
&lt;br /&gt;
Look at panchromatic channel, compare resolution:&lt;br /&gt;
  g.region rast=lsat7_2002_80 -p&lt;br /&gt;
  d.erase -f&lt;br /&gt;
  d.rast lsat7_2002_80&lt;br /&gt;
  d.zoom&lt;br /&gt;
  d.rast lsat7_2002_30&lt;br /&gt;
  d.rast lsat7_2002_80&lt;br /&gt;
&lt;br /&gt;
=== Image Classification ===&lt;br /&gt;
&lt;br /&gt;
Set region setting to red image:&lt;br /&gt;
  g.region rast=lsat7_2002_30 -p&lt;br /&gt;
&lt;br /&gt;
Create a group&lt;br /&gt;
  i.group group=lsat7_2002 subgroup=lsat7_2002 \&lt;br /&gt;
    input=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_70&lt;br /&gt;
&lt;br /&gt;
==== Unsupervised classification====&lt;br /&gt;
&lt;br /&gt;
Generate unsupervised statistics&lt;br /&gt;
  i.cluster  group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt&lt;br /&gt;
&lt;br /&gt;
  # look at report file&lt;br /&gt;
  gedit lsat7_2002.txt &lt;br /&gt;
&lt;br /&gt;
Assign pixels to classes, check quality of assignment:&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class reject=lsat7_2002_reject&lt;br /&gt;
&lt;br /&gt;
  # false color composite&lt;br /&gt;
  d.mon x0 ; d.font Vera&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  # classification result&lt;br /&gt;
  d.mon x1 ; d.font Vera&lt;br /&gt;
  d.rast.leg lsat7_2002_class&lt;br /&gt;
  # rejection map&lt;br /&gt;
  d.mon x2 ; d.font Vera&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  # rejection histogram&lt;br /&gt;
  d.mon x3 ; d.font Vera&lt;br /&gt;
  d.histogram lsat7_2002_reject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Map_lsat7_2002_r1g5b7.png|thumb|center|300px|NC Landsat map 2002 - false color composite]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_class.png|thumb|center|300px|unsupervised classification]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Histogram_lsat7_2002_reject.png|thumb|center|300px|unsupervised classification rejection map histogram]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_reject.png|thumb|center|300px|unsupervised classification rejection map]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Play with different cluster separations:&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt separation=1.5&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class2 reject=lsat7_2002_reject2&lt;br /&gt;
  d.mon x4&lt;br /&gt;
  d.rast.leg lsat7_2002_class2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_class2&lt;br /&gt;
&lt;br /&gt;
Compare to RGB:&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class2 cat=1 -o&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class cat=1 -o&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class cat=1 -o&lt;br /&gt;
&lt;br /&gt;
We do a 3rd attempt with more classes&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=15 reportfile=lsat7_2002.txt &lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class3 reject=lsat7_2002_reject3&lt;br /&gt;
  d.rast.leg lsat7_2002_class3&lt;br /&gt;
&lt;br /&gt;
[[Image:Map_lsat7_2002_class_unsupervised_15.png|thumb|center|300px|unsupervised classification with 15 classes]]&lt;br /&gt;
&lt;br /&gt;
====Supervised classification====&lt;br /&gt;
&lt;br /&gt;
Launch GUI for digitizer:&lt;br /&gt;
  g.gui wxpython&lt;br /&gt;
 &lt;br /&gt;
Now digitize training areas of water, asphalt, forest, uncovered soil on RGB composite in GUI.&lt;br /&gt;
Digitize polygons/centroids with attributes. The advantage: we know what the classes are.&lt;br /&gt;
&lt;br /&gt;
[[Image:Training_map_supervised.png|thumb|center|300px|NC Landsat map 2002 - training areas]]&lt;br /&gt;
&lt;br /&gt;
Assign also numerical ID for each class in new column&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
  v.db.addcol lsat7_training col=&amp;quot;id integer&amp;quot;&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'water'&amp;quot; val=1&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'forest'&amp;quot; val=2&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'asphalt'&amp;quot; val=3&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'soil'&amp;quot; val=4&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
&lt;br /&gt;
Transform vector training map to raster model:&lt;br /&gt;
  g.region vect=lsat7_training align=lsat7_2002_10 -p&lt;br /&gt;
  v.to.rast in=lsat7_training out=lsat7_training use=attr col=id labelcol=name --o&lt;br /&gt;
  &lt;br /&gt;
  d.mon x0&lt;br /&gt;
  d.rast.leg lsat7_training &lt;br /&gt;
&lt;br /&gt;
Generate statistics from training areas&lt;br /&gt;
  i.gensigset group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap training=lsat7_training&lt;br /&gt;
&lt;br /&gt;
Perform supervised classification&lt;br /&gt;
  i.smap group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap  out=smap&lt;br /&gt;
&lt;br /&gt;
Colorize:&lt;br /&gt;
  r.colors smap rules=- &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
 1 aqua&lt;br /&gt;
 2 green&lt;br /&gt;
 3 180 180 180&lt;br /&gt;
 4 brown&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
  d.rast.leg smap&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Map_lsat7_2002_r1g5b7.png|thumb|center|300px|NC Landsat map 2002 - false color composite]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_class_supervised.png|thumb|center|300px|SMAP supervised classification]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vectorize result:&lt;br /&gt;
  r.to.vect smap out=smap feat=area&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.vect smap  type=boundary col=red&lt;br /&gt;
&lt;br /&gt;
That's it :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Object-based classification ===&lt;br /&gt;
''Created based on [http://lists.osgeo.org/pipermail/grass-user/2014-June/070384.html Summary of object-based classification possibilities in GRASS GIS (June 2014)]. Feel free to merge this with other content or with different page.''&lt;br /&gt;
&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2013-October/066181.html Moritz's steps and the main discussion: Object-based image classification in GRASS] ([http://osgeo-org.1560.x6.nabble.com/Object-based-image-classification-in-GRASS-td5086693.html nabble link])&lt;br /&gt;
* [http://geo.fsv.cvut.cz/gwiki/153ZODH_/_15._cvi%C4%8Den%C3%AD Moritz's steps in a nice guide by Martin, in Czech with images] ([http://translate.google.com/translate?sl=cs&amp;amp;tl=en&amp;amp;js=n&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;u=http%3A%2F%2Fgeo.fsv.cvut.cz%2Fgwiki%2F153ZODH_%2F_15._cvi%25C4%258Den%25C3%25AD&amp;amp;act=url English Google-translation])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-user/2013-November/069254.html Alternative notes by Moritz: Classification of segments] ([http://osgeo-org.1560.x6.nabble.com/Re-Classification-of-segments-td5088837.html nabble link])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2014-January/066804.html Pietro's steps and tools] ([http://osgeo-org.1560.x6.nabble.com/Object-based-image-classification-in-GRASS-tp5086693p5096826.html nabble link])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2013-August/065287.html Another discussion about what variables to use: Object-based classification] ([http://osgeo-org.1560.x6.nabble.com/i-segment-invalid-region-id-0-tp5066102p5070201.html nabble link])&lt;br /&gt;
* The source code of the classification tools (for inspiration in writing your own scripts):&lt;br /&gt;
** v.class.ml: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.ml/ (Pietro's tool)&lt;br /&gt;
** v.class.mlpy: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.mlpy/ (Vaclav's tool)&lt;br /&gt;
** i.mlpy.py: http://svn.osgeo.org/grass/sandbox/turek/i.mlpy.py (Stepan's tool)&lt;br /&gt;
* List of Python machine learning libraries:&lt;br /&gt;
** scikit-learn, http://scikit-learn.org/ (used by v.class.ml)&lt;br /&gt;
** mlpy, http://mlpy.sourceforge.net/ (used by v.class.ml, v.class.mlpy and i.mlpy)&lt;br /&gt;
** Pandas, http://pandas.pydata.org/&lt;br /&gt;
** Milk, http://luispedro.org/software/milk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further reading classification with GRASS ==&lt;br /&gt;
* Micha Silver: [https://www.surfaces.co.il/analyzing-acacia-tree-health-in-the-arava-with-grass-gis/ Analyzing acacia tree health in the Arava with GRASS GIS]&lt;br /&gt;
* Perrygeo: [http://www.perrygeo.net/wordpress/?p=104 Impervious surface deliniation with GRASS]&lt;br /&gt;
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/159 Working with Landsat Data]&lt;br /&gt;
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/548 Canopy Quantification via Image Classification]&lt;br /&gt;
* [http://istgeo.ist.supsi.ch/site/node/24 Segmentazione o classificazione d'immagini con GRASS] (in italiano)&lt;br /&gt;
* Di Palma, F.; Amato, F.; Nolè, G.; Martellozzo, F.; Murgante, B. 2016: A SMAP Supervised Classification of Landsat Images for Urban Sprawl Evaluation. ISPRS Int. J. Geo-Inf. 2016, 5, 109. PDF: http://www.mdpi.com/2220-9964/5/7/109&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Image processing]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_6_Tutorial/Vector_data_management/es&amp;diff=23338</id>
		<title>GRASS 6 Tutorial/Vector data management/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_6_Tutorial/Vector_data_management/es&amp;diff=23338"/>
		<updated>2016-08-04T14:21:00Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: GRASS 6 Tutorial/Vector data management/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Manejo de datos vectoriales==&lt;br /&gt;
===Importación de datos vectoriales===&lt;br /&gt;
Los módulos ''&amp;lt;code&amp;gt;v.in.*&amp;lt;/code&amp;gt;'' and '''&amp;lt;code&amp;gt;v.out.*&amp;lt;/code&amp;gt;''' manejan la importación y exportación de datos vectoriales.&lt;br /&gt;
&amp;lt;code&amp;gt;v.in.ogr&amp;lt;/code&amp;gt; es muy usado y simplifica la importación de datos vectoriales; [http://www.gdal.org/ogr/ogr_formats.html OGR] soporta una gran variedad de formatos.&lt;br /&gt;
&amp;lt;code&amp;gt;v.out.ogr&amp;lt;/code&amp;gt; siempre exporta todo el mapa vectorial (independientemente de la [[Computational region/es región computacional]].&lt;br /&gt;
&lt;br /&gt;
====Importando un Shapefile de ESRI====&lt;br /&gt;
El siguiente ejemplo muestra el uso sencillo de &amp;lt;code&amp;gt;v.in.ogr&amp;lt;/code&amp;gt;, realiza la importación de un archivo Shapefile de ESRI al formato vectorial nativo:&lt;br /&gt;
&lt;br /&gt;
 v.in.ogr dsn=boundary_county.shp out=boundary_county &lt;br /&gt;
&lt;br /&gt;
Sin embargo, &amp;lt;code&amp;gt;v.in.ogr&amp;lt;/code&amp;gt; tiene muchas opciones para importar subconjuntos (definidos espacialmente, o con SQL) y tipos de datos vectoriales.&lt;br /&gt;
&lt;br /&gt;
Se puede hacer lo mismo usando la interfaz gráfica (GUI). La importación se realiza a través del Administrador de capas, en el menú Archivo-&amp;gt;Importar datos vectoriales-&amp;gt;Formatos de importación comunes [r.in.ogr]:&lt;br /&gt;
&lt;br /&gt;
[[File:Vector_layer_manager.png|400px]]&lt;br /&gt;
[[File:Vector_layer_import.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Se puede seleccionar un '''subconjunto'' de sus datos especificando la extensión espacial, o una consulta SQL definida con el parámetro &amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 v.in.ogr --o dsn=./ output=subset layer=boundary_county where=&amp;quot;NAME = 'DUPLIN' OR NAME = 'WAKE'&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  +----------------------------------------------------------------------------+&lt;br /&gt;
 | Layer:           subset                                                    |&lt;br /&gt;
 | Mapset:          PERMANENT                                                 |&lt;br /&gt;
 | Location:        nc_spm_08_geostat                                         |&lt;br /&gt;
 | Database:        /home/daniel/GRASSWiki/data                               |&lt;br /&gt;
 | Title:                                                                     |&lt;br /&gt;
 | Map scale:       1:1                                                       |&lt;br /&gt;
 | Map format:      native                                                    |&lt;br /&gt;
 | Name of creator: daniel                                                    |&lt;br /&gt;
 | Organization:                                                              |&lt;br /&gt;
 | Source date:     Wed Nov  7 16:10:01 2012                                  |&lt;br /&gt;
 |----------------------------------------------------------------------------|&lt;br /&gt;
 |   Type of Map:  vector (level: 2)                                          |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 |   Number of points:       0               Number of areas:      2          |&lt;br /&gt;
 |   Number of lines:        0               Number of islands:    2          |&lt;br /&gt;
 |   Number of boundaries:   2               Number of faces:      0          |&lt;br /&gt;
 |   Number of centroids:    2               Number of kernels:    0          |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 |   Map is 3D:              No                                               |&lt;br /&gt;
 |   Number of dblinks:      1                                                |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 |         Projection: Lambert Conformal Conic                                |&lt;br /&gt;
 |               N:   258121.97732598    S:   106860.16001618                 |&lt;br /&gt;
 |               E:   732841.78315847    W:   610047.98051883                 |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 |   Digitization threshold: 0                                                |&lt;br /&gt;
 |   Comments:                                                                |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 +----------------------------------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
====Enlace virtual a un Shapefile de ESRI====&lt;br /&gt;
Si prefiere no importar los datos vectoriales al formato nativo de GRASS, puede crear un enlace usando el módulo &amp;lt;code&amp;gt;v.external&amp;lt;/code&amp;gt;:&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
 v.external dsn=./ output=boundary_county layer=boundary_county&lt;br /&gt;
 Building topology for vector map &amp;lt;boundary_county&amp;gt;...&lt;br /&gt;
 Number of nodes: 1707&lt;br /&gt;
 Number of primitives: 1981&lt;br /&gt;
 Number of points: 0&lt;br /&gt;
 Number of lines: 0&lt;br /&gt;
 Number of boundaries: 1055&lt;br /&gt;
 Number of centroids: 926&lt;br /&gt;
 Number of areas: 1055 &lt;br /&gt;
 Number of isles: 1055&lt;br /&gt;
 Number of areas without centroid: 129&lt;br /&gt;
&lt;br /&gt;
====Importación de un archivo ASCII XY/XYZ ====&lt;br /&gt;
&lt;br /&gt;
También puede generar un mapa de puntos vectoriales a partir de un archivo de texto que contenga coordenadas X,Y.&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
 642934|95324&lt;br /&gt;
 675695|139878&lt;br /&gt;
 623277|158224&lt;br /&gt;
 716318|138568&lt;br /&gt;
 742527|164776&lt;br /&gt;
 735975|196227&lt;br /&gt;
 755631|200158&lt;br /&gt;
&lt;br /&gt;
Redirija las coordenadas al módulo &amp;lt;code&amp;gt;v.in.ascii&amp;lt;/code&amp;gt; :&lt;br /&gt;
 cat coords.txt | v.in.ascii out=points&lt;br /&gt;
&lt;br /&gt;
Añada las categorías a los puntos vectoriales, para facilitar la unión con atributos:&lt;br /&gt;
 v.category in=points out=points_final op=add&lt;br /&gt;
 v.category points_final op=report&lt;br /&gt;
&lt;br /&gt;
También puede añadir una nueva tabla de atributos al mapa vectorial, usando &amp;lt;code&amp;gt;v.db.addtable&amp;lt;/code&amp;gt;:&lt;br /&gt;
 v.db.addtable map=points&lt;br /&gt;
&lt;br /&gt;
Es posible replicar el mismo procedimiento con datos tridimensionales (XYZ), modificando los argumentos de &amp;lt;code&amp;gt;v.in.ascii&amp;lt;/code&amp;gt;.&lt;br /&gt;
Es sencillo generar el mapa vectorial en GRASS a partir de un archivo de coordenadas X,Y,Z:&lt;br /&gt;
 642934|95324|212&lt;br /&gt;
 675695|139878|233&lt;br /&gt;
 623277|158224|211&lt;br /&gt;
 716318|138568|219&lt;br /&gt;
 742527|164776|240&lt;br /&gt;
 735975|196227|221&lt;br /&gt;
 755631|200158|210&lt;br /&gt;
&lt;br /&gt;
 cat coords.txt | v.in.ascii -z out=points&lt;br /&gt;
&lt;br /&gt;
====Importar una tabla XY a partir de un DBMS o una hoja de cálculo (''spreadsheet'')====&lt;br /&gt;
Si tiene una lista de coordenadas (x,y) con los atributos asociados guardada en una hoja de cálculo (DBF, CSV, Excel, etc). Es sencillo generar el mapa usando &amp;lt;code&amp;gt;v.in.db&amp;lt;/code&amp;gt;. En el siguiente ejemplo se importa la tabla &amp;quot;meteostations&amp;quot; que tiene las columnas 'east', 'north', 'quota' (z) y algunas columnas de atributos.&lt;br /&gt;
&lt;br /&gt;
 v.in.db driver=pg database=&amp;quot;host=myserver.itc.it,dbname=mydb,user=name&amp;quot; table=meteostations x=east y=north z=quota  key=id output=meteostations&lt;br /&gt;
&lt;br /&gt;
Este comando crea un nuevo mapa vectorial (formato nativo) con los la tabla de atributos en un archivo DBF.&lt;br /&gt;
&lt;br /&gt;
Podemos visualizar estos puntos en un monitor y consultarlos:&lt;br /&gt;
 &lt;br /&gt;
 d.mon start=x0&lt;br /&gt;
 d.vect meteostations&lt;br /&gt;
 d.what.vect&lt;br /&gt;
&lt;br /&gt;
====Importar un archivo DXF====&lt;br /&gt;
Se pueden importar archivos DXF 2D o 3D a GRASS usando el módulo &amp;lt;code&amp;gt;&amp;lt;b&amp;gt;v.in.dxf&amp;lt;/b&amp;gt;&amp;lt;/code&amp;gt;. Hacerlo desde la línea de comandos es muy sencillo:&lt;br /&gt;
 v.in.dxf -1 Masterplanxy.dxf&lt;br /&gt;
&lt;br /&gt;
  100%&lt;br /&gt;
 Following DXF layers found:&lt;br /&gt;
 Layer 1: line&lt;br /&gt;
 Building topology for vector map &amp;lt;Masterplanxy&amp;gt;...&lt;br /&gt;
 Registering primitives...&lt;br /&gt;
 64302 primitives registered&lt;br /&gt;
 405521 vertices registered&lt;br /&gt;
 Building areas...&lt;br /&gt;
  100%&lt;br /&gt;
 0 areas built&lt;br /&gt;
 0 isles built&lt;br /&gt;
 Attaching islands...&lt;br /&gt;
 Attaching centroids...&lt;br /&gt;
  100%&lt;br /&gt;
 Number of nodes: 71142&lt;br /&gt;
 Number of primitives: 64302&lt;br /&gt;
 Number of points: 0&lt;br /&gt;
 Number of lines: 64302&lt;br /&gt;
 Number of boundaries: 0&lt;br /&gt;
 Number of centroids: 0&lt;br /&gt;
 Number of areas: 0&lt;br /&gt;
 Number of isles: 0&lt;br /&gt;
&lt;br /&gt;
También es posible realizarlo desde la GUI:&lt;br /&gt;
&lt;br /&gt;
[[File:import_dxf.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Y visualizarlo en el visualizador de mapas&lt;br /&gt;
&lt;br /&gt;
[[File:dxf_display.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Exportación de datos vectoriales===&lt;br /&gt;
&lt;br /&gt;
Usando el módulo &amp;lt;code&amp;gt;v.out.ogr&amp;lt;/code&amp;gt; es posible exportar datos vectoriales del formato nativo de GRASS a una gran variedad de formatos:&lt;br /&gt;
   ESRI_Shapefile,MapInfo_File,TIGER,S57,DGN,Memory,BNA,CSV,GML,GPX,KML,GeoJSON,GMT,SQLite,ODBC,MSSQLSpatial,&lt;br /&gt;
   PostgreSQL,MySQL,PCIDSK,DXF,Geoconcept,GeoRSS,GPSTrackMaker,PGDump,GPSBabel,&lt;br /&gt;
&lt;br /&gt;
[[File:Vector_out_ogr.png|400px]]&lt;br /&gt;
[[File:Vector_layer_export.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Información introductoria sobre el [http://grass.ibiblio.org/grass63/manuals/html63_user/vectorintro.html procesamiento de datos vectoriales] está disponible en las páginas del manual de GRASS.&lt;br /&gt;
&lt;br /&gt;
===[[Grass Six Tutorial Attribute Management]]===&lt;br /&gt;
http://grass.osgeo.org/grass57/tutorial/attrib_storage.html&lt;br /&gt;
        - General notes on Attribute &lt;br /&gt;
          management; Managing the default settings; Examples;&lt;br /&gt;
          Database Schema&lt;br /&gt;
&lt;br /&gt;
[[File:Catsnlayers.png|800px|thumb|alt=cats and layers in GRASS GIS|center|Imagen tomada de [[Vector Database Management]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_6_Tutorial/Raster_data/es&amp;diff=23337</id>
		<title>GRASS 6 Tutorial/Raster data/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_6_Tutorial/Raster_data/es&amp;diff=23337"/>
		<updated>2016-08-04T13:56:14Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: GRASS 6 Tutorial/Raster data/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Manejo de datos ráster==&lt;br /&gt;
===Importación de datos===&lt;br /&gt;
De manera similar al caso de los datos vectoriales, la importación y exportación de los datos es realizada con GDAL. De tal manera que se usan los módulos: &amp;lt;code&amp;gt;r.in.*&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;r.out.*&amp;lt;/code&amp;gt;, especificamente  &amp;lt;code&amp;gt;r.in.gdal&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;r.out.gdal&amp;lt;/code&amp;gt;. Es posible también usar el módulo &amp;lt;code&amp;gt;r.extenal&amp;lt;/code&amp;gt; para enlazar los datos, en vez de importarlos.&lt;br /&gt;
&lt;br /&gt;
De esta manera, un archivo Geotiff puede ser importado a GRASS usando la línea de comandos, o la GUI.&lt;br /&gt;
&lt;br /&gt;
 r.in.gdal input=elev_input_state500m.tif output=elev_input_state500m&lt;br /&gt;
&lt;br /&gt;
[[File:Grass raster import.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Algunas veces, se desea definir la región del Directorio de mapas a la extensión del ráster. Por ejemplo, continuando  el ejercicio anterior, se haría lo siguiente:&lt;br /&gt;
 &lt;br /&gt;
 g.region rast=elev_input_state500m&lt;br /&gt;
&lt;br /&gt;
Un problema común es el de la importación de varios archivos. Desde la GUI, en &amp;lt;code&amp;gt;r.in.gdal&amp;lt;/code&amp;gt;, solamente se selecciona la opción &amp;quot;Directorio&amp;quot;, en la sección de &amp;quot;Tipo de Fuente&amp;quot;, y se escogen todos los archivos que se deseen. Desde la línea de comandos, se puede utilizar un bucle (''loop''), como el del siguiente código:&lt;br /&gt;
&lt;br /&gt;
 for file in `ls *.tif`&lt;br /&gt;
  do&lt;br /&gt;
   r.in.gdal input=$file output=${file%.tif}&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Nota - cuando se usa r.in.gdal, se importa el mapa completo, i.e. toda la extensión''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Count_points_in_polygon/es&amp;diff=23336</id>
		<title>Count points in polygon/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Count_points_in_polygon/es&amp;diff=23336"/>
		<updated>2016-08-03T21:39:07Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: count points in polygons/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
'''P:''' ¿Cómo puedo contar la cantidad de puntos que caen dentro de polígonos?&lt;br /&gt;
&lt;br /&gt;
'''R:''' hay al menos dos opciones:&lt;br /&gt;
&lt;br /&gt;
== Solución basada en los atributos ==&lt;br /&gt;
&lt;br /&gt;
Carga un atributo de los polígonos a los puntos, luego cuenta la cantidad de atributos iguales a través del agrupamiento con SQL.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: ¿Cuantos sitios arqueológicos tiene cada dueño de parcela?&lt;br /&gt;
&lt;br /&gt;
  # Aŕea de Spearfish&lt;br /&gt;
  # (Nota: el controlador DBF no está soportado, use  SQLite, MySQL o PostgreSQL)&lt;br /&gt;
  g.copy vect=archsites,myarchsites&lt;br /&gt;
  v.db.addcol myarchsites col=&amp;quot;owner varchar(25)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ahora transferimos el nombre del dueño a los sitios arqueológicos (puntos):&lt;br /&gt;
&lt;br /&gt;
  v.what.vect myarchsites qvect=fields column=owner qcolumn=label&lt;br /&gt;
  # verification:&lt;br /&gt;
  v.db.select myarchsites&lt;br /&gt;
 &lt;br /&gt;
  d.mon wx0&lt;br /&gt;
  d.vect -c fields&lt;br /&gt;
  d.vect myarchsites icon=basic/diamond size=10&lt;br /&gt;
 &lt;br /&gt;
  # prueba&lt;br /&gt;
  echo &amp;quot;SELECT *,count(owner) FROM myarchsites GROUP BY owner&amp;quot; | db.select&lt;br /&gt;
 &lt;br /&gt;
  # subir al mapa de polígonos&lt;br /&gt;
  g.copy vect=fields,myfields&lt;br /&gt;
  v.db.addcol myfields col=&amp;quot;numpoints integer&amp;quot;&lt;br /&gt;
  v.db.update myfields column=numpoints value=&amp;quot;(SELECT count(owner) FROM myarchsites WHERE \&lt;br /&gt;
  myarchsites.owner=myfields.label GROUP BY owner);&amp;quot;&lt;br /&gt;
  # verificar:&lt;br /&gt;
  v.db.select myfields&lt;br /&gt;
&lt;br /&gt;
La tabla resultante contiene la cantidadde puntos que cae dentro de cada polígono.&lt;br /&gt;
&lt;br /&gt;
Problema:&lt;br /&gt;
En este procedimiento se cuentan los atributos, no los elementos. Esto significa que si hay más de una categoría que enlace un mismo elemento a la tabla de atributos, se estarían contando elementos de más. También es posible que varios elementos se enlacen a una categoría y en este caso se estaría subestimando. El primer escenario puede ocurrir al usar v.edit para eliminar duplicados, por ejemplo Punto A y Punto B son ensamblados para producir el Punto C (elementos A y B son eliminados) y el elemento C hereda los atributos de A y B. Las dos categorías se enlazan a C. Para evitar estos problemas es necesario que haya una correspondencia 1:1 entre elementos y categorías, por lo que sería necesario hacer una nueva tabla. La nueva tabla (MyCats) puede ser usada como un filtro, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
  # prueba&lt;br /&gt;
  echo &amp;quot;SELECT *,count(owner) FROM myarchsites WHERE &amp;quot;&amp;quot;cat in (select * from MyCats)&amp;quot;&amp;quot; GROUP \&lt;br /&gt;
  BY owner&amp;quot; | db.select&lt;br /&gt;
&lt;br /&gt;
== Solución basada en la geometría ==&lt;br /&gt;
&lt;br /&gt;
* {{cmd|v.vect.stats}} cuenta la cantidad de puntos que caen dentro de un polígono y opcionalmente calcula estadísticas para atributos numéricos de los putos. v.vect.stats es un módulo C disponible desde GRASS 6.4.3 y superiores. {{cmd|v.vect.stats}} crea una columna para actualizar los datos automáticamente, de manera alternativa es posible actualizar una columna existente, dado que el tipo sea entero.&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.vect.stats}} points=mypoints areas=mypolygons count_column=pointcnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=HOWTO_get_centroid_coordinates/es&amp;diff=23335</id>
		<title>HOWTO get centroid coordinates/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=HOWTO_get_centroid_coordinates/es&amp;diff=23335"/>
		<updated>2016-08-03T20:00:33Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''P:''' Tengo un mapa vectorial con polígonos y quiero crear un mapa vectorial de puntos con los centroides de los polígonos, que además tenga una tabla de atributos que contenga solamente sus coordenadas. ¿Cuál es la manera más sencilla de realizar esto?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''R:''' En Grass 7:&lt;br /&gt;
&lt;br /&gt;
 # Extraer centroides de un mapa de polígonos&lt;br /&gt;
 v.extract in=poly out=centr type=centroid&lt;br /&gt;
 # Si es necesario, convertir los centroides a puntos&lt;br /&gt;
 v.type in=centr out=centr_pts  from_type=centroid to_type=point&lt;br /&gt;
 # Transferir categorías de la tabla 1 a una tabla nueva&lt;br /&gt;
 v.category option=transfer input=centr_pts output=centr_pts2 layer=1,2&lt;br /&gt;
 # Añadir tabla de atributos a los puntos&lt;br /&gt;
 v.db.addtable centr_pts2 col=&amp;quot;x double,y double,z double&amp;quot; layer=2&lt;br /&gt;
 # Insertar coordenadas en la tabla&lt;br /&gt;
 v.to.db centr_pts2 option=coor col=x,y,z layer=2&lt;br /&gt;
&lt;br /&gt;
En Grass 7, adicionalmente se puede exportar de manera directa:&lt;br /&gt;
&lt;br /&gt;
 v.out.ascii in=poly type=centroid&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=HOWTO_get_centroid_coordinates/es&amp;diff=23334</id>
		<title>HOWTO get centroid coordinates/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=HOWTO_get_centroid_coordinates/es&amp;diff=23334"/>
		<updated>2016-08-03T20:00:08Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''P:''' Tengo un mapa vectorial con polígonos y quiero crear un mapa vectorial de puntos con los centroides de los polígonos, que además tenga una tabla de atributos que contenga solamente sus coordenadas. ¿Cuál es la manera más sencilla de realizar esto?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''R:''' En Grass 7:&lt;br /&gt;
&lt;br /&gt;
 # Extraer centroides de un mapa de polígonos&lt;br /&gt;
 v.extract in=poly out=centr type=centroid&lt;br /&gt;
 # Si es necesario, convertir los centroides a puntos&lt;br /&gt;
 v.type in=centr out=centr_pts  from_type=centroid to_type=point&lt;br /&gt;
 # Transferir categorías de la tabla 1 a una tabla nueva&lt;br /&gt;
 v.category option=transfer input=centr_pts output=centr_pts2 layer=1,2&lt;br /&gt;
 # Añadir tabla de atributos a los puntos&lt;br /&gt;
 v.db.addtable centr_pts2 col=&amp;quot;x double,y double,z double&amp;quot; layer=2&lt;br /&gt;
 # Insertar coordenadas en la tabla&lt;br /&gt;
 v.to.db centr_pts2 option=coor col=x,y,z layer=2&lt;br /&gt;
&lt;br /&gt;
En Grass 7, adicionalmente se puede exportar de manera directa:&lt;br /&gt;
&lt;br /&gt;
 v.out.ascii in=poly type=centroid&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=HOWTO_get_centroid_coordinates/es&amp;diff=23333</id>
		<title>HOWTO get centroid coordinates/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=HOWTO_get_centroid_coordinates/es&amp;diff=23333"/>
		<updated>2016-08-03T19:59:31Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: HOWTO get centroid coordinates/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''P:''' Tengo un mapa vectorial con polígonos y quiero crear un mapa vectorial de puntos con los centroides de los polígonos, que además tenga una tabla de atributos que contenga solamente sus coordenadas. ¿Cuál es la manera más sencilla de realizar esto?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''R:''' En Grass 7:&lt;br /&gt;
&lt;br /&gt;
 # 1) Extraer centroides de un mapa de polígonos&lt;br /&gt;
 v.extract in=poly out=centr type=centroid&lt;br /&gt;
 # 2) Si es necesario, convertir los centroides a puntos&lt;br /&gt;
 v.type in=centr out=centr_pts  from_type=centroid to_type=point&lt;br /&gt;
 # 3) Transferir categorías de la tabla 1 a una tabla nueva&lt;br /&gt;
 v.category option=transfer input=centr_pts output=centr_pts2 layer=1,2&lt;br /&gt;
 # 4) Añadir tabla de atributos a los puntos&lt;br /&gt;
 v.db.addtable centr_pts2 col=&amp;quot;x double,y double,z double&amp;quot; layer=2&lt;br /&gt;
 # 4) Insertar coordenadas en la tabla&lt;br /&gt;
 v.to.db centr_pts2 option=coor col=x,y,z layer=2&lt;br /&gt;
&lt;br /&gt;
En Grass 7, adicionalmente se puede exportar de manera directa:&lt;br /&gt;
&lt;br /&gt;
 v.out.ascii in=poly type=centroid&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Changing_Region/es&amp;diff=23332</id>
		<title>Changing Region/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Changing_Region/es&amp;diff=23332"/>
		<updated>2016-08-03T19:19:50Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Changing Region/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''P:''' Estoy tratando de hacer una interpolación de superficies, y toma mucho tiempo (en un conjunto de datos grande). Dado que el programa no corre en el fondo, ¿qué puede pasar con mis cálculos si cambio la región mientras está corriendo?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''R:''' Probablemente nada, pero no necesariamente... la mayoría de los programas leen la región casi al inicio. Si el archivo WIND cambia luego de que esto sucede, entonces no importará. Pero, no hay garantía de que todos los módulos funcionen así...&lt;br /&gt;
&lt;br /&gt;
Fuente: http://op.gfz-potsdam.de/GRASS-List/Archive/msg06684.html&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=DEM_to_contour_lines/es&amp;diff=23331</id>
		<title>DEM to contour lines/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=DEM_to_contour_lines/es&amp;diff=23331"/>
		<updated>2016-08-03T15:17:53Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Líneas de contorno a partir de un MDE ==&lt;br /&gt;
&lt;br /&gt;
La extracción de isolíneas (contornos, en el caso de una superficie de elevación), se puede derivar de datos ráster usando el módulo {{cmd|r.contour}}.De manera predeterminada, el módulo determina el valor máximo y mínimo de las isolíneas para un mapa ráster dado. El intervalo de isolínea/contorno debe ser definido con el parámetro &amp;quot;step&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: generar contornos con un intervalo de 10m a partir del mapa ráster &amp;quot;elevation&amp;quot; (conjunto de datos de muestra de [http://grass.osgeo.org/download/sample-data/ North Carolina]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Establecer la región computacional:&lt;br /&gt;
g.region rast=elevation -p&lt;br /&gt;
&lt;br /&gt;
r.contour elevation out=elev_contour_10m step=10&lt;br /&gt;
&lt;br /&gt;
# visualizar&lt;br /&gt;
d.mon x0&lt;br /&gt;
d.erase&lt;br /&gt;
d.rast elevation&lt;br /&gt;
d.vect elev_contour_10m&lt;br /&gt;
d.barscale -mt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las líneas de contorno resultantes están guardadas en un mapa vectorial llamado &amp;quot;elev_contour_10m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Contour lines from DEM.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Vea también ==&lt;br /&gt;
* [[Contour lines to DEM]]&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Vector]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=DEM_to_contour_lines/es&amp;diff=23330</id>
		<title>DEM to contour lines/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=DEM_to_contour_lines/es&amp;diff=23330"/>
		<updated>2016-08-03T15:17:23Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: DEM to contour lines/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Líneas de contorno a partir de un MDE ==&lt;br /&gt;
&lt;br /&gt;
La extracción de isolíneas (contornos, en el caso de una superficie de elevación), se puede derivar de datos ráster usando el módulo {{cmd|r.contour}}.De manera predeterminada, el módulo determina el valor máximo y mínimo de las isolíneas para un mapa ráster dado. El intervalo de isolínea/contorno debe ser definido con el parámetro &amp;quot;step&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: generar contornos con un intervalo de 10m a partir del mapa ráster &amp;quot;elevation&amp;quot; (conjunto de datos de muestra de [http://grass.osgeo.org/download/sample-data/ North Carolina]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Establecer la región computacional:&lt;br /&gt;
g.region rast=elevation -p&lt;br /&gt;
&lt;br /&gt;
r.contour elevation out=elev_contour_10m step=10&lt;br /&gt;
&lt;br /&gt;
# visualizar&lt;br /&gt;
d.mon x0&lt;br /&gt;
d.erase&lt;br /&gt;
d.rast elevation&lt;br /&gt;
d.vect elev_contour_10m&lt;br /&gt;
d.barscale -mt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las líneas de contorno resultantes están guardadas en un mapa vectorial llamado &amp;quot;elev_contour_10m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Contour lines from DEM.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Vea también ==&lt;br /&gt;
* [[Contour lines to DEM]]&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Vector]]&lt;br /&gt;
[[Category: Languanges/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23329</id>
		<title>Interpolation/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23329"/>
		<updated>2016-08-03T15:08:04Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Métodos de remuestreo y interpolación en GRASS ==&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de un mapa ráster &amp;quot;lleno&amp;quot; (continuidad de datos) a una resolución distinta ===&lt;br /&gt;
&lt;br /&gt;
==== Remuestreo de mapas ráster a una resolución más fina ====&lt;br /&gt;
* {{cmd|r.resample}} usa el método de vecino más cercano, produce un resultado idéntico que un remuestreo al vuelo realizado a través de los módulos de importación ráster.&lt;br /&gt;
* {{cmd|r.resamp.interp}} remuestreo de vecino más cercano, bilineal, y bicúbico: method=nearest usa el mismo algoritmo que {{cmd|r.resample}}, pero no el mismo código así que no necesariamente produce los mismo resultados en casos donde haya redondeo de número de punto flotante. Para {{cmd|r.resamp.interp}} method=bilinear y method=bicubic, los valores ráster son tratados como muestras en cada centro de celda, que definen una superficie continua (''piecewise''). Los valores ráster resultantes son obtenidos muestreando la superficie en caad centro de celda. Dado que el algoritmo interpola, y no extrapola, hay un margen de 0.5 (para bilineal) y 1.5 (para bicúbico) celdas que se pierden. Todas las muestras que estén en este margen se volverán nulas.&lt;br /&gt;
* {{cmd|r.resamp.rst}} interpolación de spline regularizado con tensión (''Regularized Spline with Tension (RST)''): se comporta de manera similar, i.e. calcula una superficie asumiendo que los valores son muestras en cada centro de celda, y muestrea la superficie en la zona del centro de la celda.&lt;br /&gt;
&lt;br /&gt;
Métodos presentes solamente en GRASS 7:&lt;br /&gt;
* {{cmd|r.resamp.bspline|version=70}} remuestreo con interpolación spline bicúbica o bilineal, con regularización Tykhonov.&lt;br /&gt;
* {{cmd|r.resamp.filter|version=70}} remuestrea capas de mapa ráster usando un kernel analítico (''analytic kernel''). Ofrece los kernels: box, bartlett, gauss, normal, hermite, sinc, lanczos1, lanczos2, lanczos3, hann, hamming, y blackman.&lt;br /&gt;
&lt;br /&gt;
==== Remusetreo de mapas ráster a una resolución más gruesa ====&lt;br /&gt;
*  {{cmd|r.resamp.stats}} remuestrea capas de mapas ráster a una resolución más gruesa utilizando agregación. Si se usa son -w, el valor de cada región de celda es el valor agregado de los valores de todas las celdas ráster cuyos centros caen dentro del contorno de la región de la celda. Con la bandera -w, las muestras son ponderadas de acuerdo a la proporción de la celda ráster que cae dentro del contorno de la región de la celda, así el resultado normalmente no es afectado por errores de redondeo (un cambio pequeño en la posición del contorno resulta en una pequeña substracción o adición de la ponderación; así mismo, en los métodos &amp;quot;method=minimum&amp;quot; o &amp;quot;method=maximum&amp;quot;, la agregación no usa la ponderación, así que no la bandera -w no tiene efecto).&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de mapas &amp;quot;dispersos&amp;quot; (''&amp;quot;sparse&amp;quot;'') (puntos o líneas dispersas)  ===&lt;br /&gt;
&amp;lt;!-- screenshot moved up for cosmetic reasons --&amp;gt;&lt;br /&gt;
[[Image:Inlets_03_SurfSal_icw_big.png|200px|right|thumb|v.surf.icw interpolación alrededor de barreras]]&lt;br /&gt;
&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia (''Inverse distance weighted average'') ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y el Complemento {{AddonCmd|r.surf.idw2|version=7}}).&lt;br /&gt;
* Interpolación a partir de líneas de contorno ({{cmd|r.surf.contour}}), vea [[Contour lines to DEM]].&lt;br /&gt;
* Interpolación usando el método {{wikipedia|Natural_neighbor}}  ({{AddonCmd|r.surf.nnbathy}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|B-spline}}s ({{cmd|v.surf.bspline}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con splines regularizadas con tensión ({{cmd|v.surf.rst}} y {{cmd|v.vol.rst}}), vea también [[RST Spline Surfaces]].&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|Kriging}} ({{cmd|v.krige|version=70}}, GRASS 7+).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales al rededor de barreras o superficies de coste  ({{AddonCmd|v.surf.icw}}).&lt;br /&gt;
&lt;br /&gt;
=== Mapas de calor  (densidad kernel) ===&lt;br /&gt;
* Crear mapas ráster a partir de puntos vectoriales con  ({{cmd|v.kernel}}).&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y {{cmd|r.surf.idw2}}).&lt;br /&gt;
&lt;br /&gt;
=== Binning ===&lt;br /&gt;
&lt;br /&gt;
Realmente no es un método de interpolación, el binning genera mapas ráster a partir de puntos vectoriales.&lt;br /&gt;
Puntos vectoriales en el formato XYZ (archivos CSV o ASCII) pueden ser rasterizados (convertidos a celdas ráster) usando estadísticas univariadas:&lt;br /&gt;
* ver ({{cmd|r.in.xyz}})&lt;br /&gt;
&lt;br /&gt;
== Comparación de los datos originales y los interpolados ==&lt;br /&gt;
&lt;br /&gt;
* Comparación estadística: use {{cmd|r.mapcalc}} para calcular un mapa de diferencia, luego {{cmd|r.univar}} para calcular estadísticas univariadas de las dferencias.&lt;br /&gt;
* Comparación gráfica {{cmd|g.gui.mapswipe|version=70}} - Compara de manera interactiva dos mapas en una ventana deslizante.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[Contour lines to DEM]]&lt;br /&gt;
* [[RST Spline Surfaces]]&lt;br /&gt;
* [[LIDAR]]&lt;br /&gt;
* GRASS {{cmd|rasterintro}}&lt;br /&gt;
* GRASS {{cmd|vectorintro}}&lt;br /&gt;
* [[Import XYZ]]&lt;br /&gt;
* [[Grid registration]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Interpolation]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23328</id>
		<title>Interpolation/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23328"/>
		<updated>2016-08-03T15:07:38Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Métodos de remuestreo y interpolación en GRASS ==&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de un mapa ráster &amp;quot;lleno&amp;quot; (continuidad de datos) a una resolución distinta ===&lt;br /&gt;
&lt;br /&gt;
==== Remuestreo de mapas ráster a una resolución más fina ====&lt;br /&gt;
* {{cmd|r.resample}} usa el método de vecino más cercano, produce un resultado idéntico que un remuestreo al vuelo realizado a través de los módulos de importación ráster.&lt;br /&gt;
* {{cmd|r.resamp.interp}} remuestreo de vecino más cercano, bilineal, y bicúbico: method=nearest usa el mismo algoritmo que {{cmd|r.resample}}, pero no el mismo código así que no necesariamente produce los mismo resultados en casos donde haya redondeo de número de punto flotante. Para {{cmd|r.resamp.interp}} method=bilinear y method=bicubic, los valores ráster son tratados como muestras en cada centro de celda, que definen una superficie continua (''piecewise''). Los valores ráster resultantes son obtenidos muestreando la superficie en caad centro de celda. Dado que el algoritmo interpola, y no extrapola, hay un margen de 0.5 (para bilineal) y 1.5 (para bicúbico) celdas que se pierden. Todas las muestras que estén en este margen se volverán nulas.&lt;br /&gt;
* {{cmd|r.resamp.rst}} interpolación de spline regularizado con tensión (''Regularized Spline with Tension (RST)''): se comporta de manera similar, i.e. calcula una superficie asumiendo que los valores son muestras en cada centro de celda, y muestrea la superficie en la zona del centro de la celda.&lt;br /&gt;
&lt;br /&gt;
Métodos presentes solamente en GRASS 7:&lt;br /&gt;
* {{cmd|r.resamp.bspline|version=70}} remuestreo con interpolación spline bicúbica o bilineal, con regularización Tykhonov.&lt;br /&gt;
* {{cmd|r.resamp.filter|version=70}} remuestrea capas de mapa ráster usando un kernel analítico (''analytic kernel''). Ofrece los kernels: box, bartlett, gauss, normal, hermite, sinc, lanczos1, lanczos2, lanczos3, hann, hamming, y blackman.&lt;br /&gt;
&lt;br /&gt;
==== Remusetreo de mapas ráster a una resolución más gruesa ====&lt;br /&gt;
*  {{cmd|r.resamp.stats}} remuestrea capas de mapas ráster a una resolución más gruesa utilizando agregación. Si se usa son -w, el valor de cada región de celda es el valor agregado de los valores de todas las celdas ráster cuyos centros caen dentro del contorno de la región de la celda. Con la bandera -w, las muestras son ponderadas de acuerdo a la proporción de la celda ráster que cae dentro del contorno de la región de la celda, así el resultado normalmente no es afectado por errores de redondeo (un cambio pequeño en la posición del contorno resulta en una pequeña substracción o adición de la ponderación; así mismo, en los métodos &amp;quot;method=minimum&amp;quot; o &amp;quot;method=maximum&amp;quot;, la agregación no usa la ponderación, así que no la bandera -w no tiene efecto).&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de mapas &amp;quot;dispersos&amp;quot; (''&amp;quot;sparse&amp;quot;'') (puntos o líneas dispersas)  ===&lt;br /&gt;
&amp;lt;!-- screenshot moved up for cosmetic reasons --&amp;gt;&lt;br /&gt;
[[Image:Inlets_03_SurfSal_icw_big.png|200px|right|thumb|v.surf.icw interpolación al rededor de barreras]]&lt;br /&gt;
&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia (''Inverse distance weighted average'') ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y el Complemento {{AddonCmd|r.surf.idw2|version=7}}).&lt;br /&gt;
* Interpolación a partir de líneas de contorno ({{cmd|r.surf.contour}}), vea [[Contour lines to DEM]].&lt;br /&gt;
* Interpolación usando el método {{wikipedia|Natural_neighbor}}  ({{AddonCmd|r.surf.nnbathy}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|B-spline}}s ({{cmd|v.surf.bspline}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con splines regularizadas con tensión ({{cmd|v.surf.rst}} y {{cmd|v.vol.rst}}), vea también [[RST Spline Surfaces]].&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|Kriging}} ({{cmd|v.krige|version=70}}, GRASS 7+).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales al rededor de barreras o superficies de coste  ({{AddonCmd|v.surf.icw}}).&lt;br /&gt;
&lt;br /&gt;
=== Mapas de calor  (densidad kernel) ===&lt;br /&gt;
* Crear mapas ráster a partir de puntos vectoriales con  ({{cmd|v.kernel}}).&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y {{cmd|r.surf.idw2}}).&lt;br /&gt;
&lt;br /&gt;
=== Binning ===&lt;br /&gt;
&lt;br /&gt;
Realmente no es un método de interpolación, el binning genera mapas ráster a partir de puntos vectoriales.&lt;br /&gt;
Puntos vectoriales en el formato XYZ (archivos CSV o ASCII) pueden ser rasterizados (convertidos a celdas ráster) usando estadísticas univariadas:&lt;br /&gt;
* ver ({{cmd|r.in.xyz}})&lt;br /&gt;
&lt;br /&gt;
== Comparación de los datos originales y los interpolados ==&lt;br /&gt;
&lt;br /&gt;
* Comparación estadística: use {{cmd|r.mapcalc}} para calcular un mapa de diferencia, luego {{cmd|r.univar}} para calcular estadísticas univariadas de las dferencias.&lt;br /&gt;
* Comparación gráfica {{cmd|g.gui.mapswipe|version=70}} - Compara de manera interactiva dos mapas en una ventana deslizante.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[Contour lines to DEM]]&lt;br /&gt;
* [[RST Spline Surfaces]]&lt;br /&gt;
* [[LIDAR]]&lt;br /&gt;
* GRASS {{cmd|rasterintro}}&lt;br /&gt;
* GRASS {{cmd|vectorintro}}&lt;br /&gt;
* [[Import XYZ]]&lt;br /&gt;
* [[Grid registration]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Interpolation]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23327</id>
		<title>Interpolation/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23327"/>
		<updated>2016-08-03T15:06:59Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Métodos de remuestreo y interpolación en GRASS ==&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de un mapa ráster &amp;quot;lleno&amp;quot; (continuidad de datos) a una resolución distinta ===&lt;br /&gt;
&lt;br /&gt;
==== Remuestreo de mapas ráster a una resolución más fina ====&lt;br /&gt;
* {{cmd|r.resample}} usa el método de vecino más cercano, produce un resultado idéntico que un remuestreo al vuelo realizado a través de los módulos de importación ráster.&lt;br /&gt;
* {{cmd|r.resamp.interp}} remuestreo de vecino más cercano, bilineal, y bicúbico: method=nearest usa el mismo algoritmo que {{cmd|r.resample}}, pero no el mismo código así que no necesariamente produce los mismo resultados en casos donde haya redondeo de número de punto flotante. Para {{cmd|r.resamp.interp}} method=bilinear y method=bicubic, los valores ráster son tratados como muestras en cada centro de celda, que definen una superficie continua (''piecewise''). Los valores ráster resultantes son obtenidos muestreando la superficie en caad centro de celda. Dado que el algoritmo interpola, y no extrapola, hay un margen de 0.5 (para bilineal) y 1.5 (para bicúbico) celdas que se pierden. Todas las muestras que estén en este margen se volverán nulas.&lt;br /&gt;
* {{cmd|r.resamp.rst}} interpolación de spline regularizado con tensión (''Regularized Spline with Tension (RST)''): se comporta de manera similar, i.e. calcula una superficie asumiendo que los valores son muestras en cada centro de celda, y muestrea la superficie en la zona del centro de la celda.&lt;br /&gt;
&lt;br /&gt;
Métodos presentes solamente en GRASS 7:&lt;br /&gt;
* {{cmd|r.resamp.bspline|version=70}} remuestreo con interpolación spline bicúbica o bilineal, con regularización Tykhonov.&lt;br /&gt;
* {{cmd|r.resamp.filter|version=70}} remuestrea capas de mapa ráster usando un kernel analítico (''analytic kernel''). Ofrece los kernels: box, bartlett, gauss, normal, hermite, sinc, lanczos1, lanczos2, lanczos3, hann, hamming, y blackman.&lt;br /&gt;
&lt;br /&gt;
==== Remusetreo de mapas ráster a una resolución más gruesa ====&lt;br /&gt;
*  {{cmd|r.resamp.stats}} remuestrea capas de mapas ráster a una resolución más gruesa utilizando agregación. Si se usa son -w, el valor de cada región de celda es el valor agregado de los valores de todas las celdas ráster cuyos centros caen dentro del contorno de la región de la celda. Con la bandera -w, las muestras son ponderadas de acuerdo a la proporción de la celda ráster que cae dentro del contorno de la región de la celda, así el resultado normalmente no es afectado por errores de redondeo (un cambio pequeño en la posición del contorno resulta en una pequeña substracción o adición de la ponderación; así mismo, en los métodos &amp;quot;method=minimum&amp;quot; o &amp;quot;method=maximum&amp;quot;, la agregación no usa la ponderación, así que no la bandera -w no tiene efecto).&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de mapas &amp;quot;dispersos&amp;quot; (''&amp;quot;sparse&amp;quot;'') (puntos o líneas dispersas)  ===&lt;br /&gt;
&amp;lt;!-- screenshot moved up for cosmetic reasons --&amp;gt;&lt;br /&gt;
[[Image:Inlets_03_SurfSal_icw_big.png|200px|right|thumb|v.surf.icw interpolating around barriers]]&lt;br /&gt;
&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia (''Inverse distance weighted average'') ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y el Complemento {{AddonCmd|r.surf.idw2|version=7}}).&lt;br /&gt;
* Interpolación a partir de líneas de contorno ({{cmd|r.surf.contour}}), vea [[Contour lines to DEM]].&lt;br /&gt;
* Interpolación usando el método {{wikipedia|Natural_neighbor}}  ({{AddonCmd|r.surf.nnbathy}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|B-spline}}s ({{cmd|v.surf.bspline}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con splines regularizadas con tensión ({{cmd|v.surf.rst}} y {{cmd|v.vol.rst}}), vea también [[RST Spline Surfaces]].&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|Kriging}} ({{cmd|v.krige|version=70}}, GRASS 7+).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales al rededor de barreras o superficies de coste  ({{AddonCmd|v.surf.icw}}).&lt;br /&gt;
&lt;br /&gt;
=== Mapas de calor  (densidad kernel) ===&lt;br /&gt;
* Crear mapas ráster a partir de puntos vectoriales con  ({{cmd|v.kernel}}).&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y {{cmd|r.surf.idw2}}).&lt;br /&gt;
&lt;br /&gt;
=== Binning ===&lt;br /&gt;
&lt;br /&gt;
Realmente no es un método de interpolación, el binning genera mapas ráster a partir de puntos vectoriales.&lt;br /&gt;
Puntos vectoriales en el formato XYZ (archivos CSV o ASCII) pueden ser rasterizados (convertidos a celdas ráster) usando estadísticas univariadas:&lt;br /&gt;
* ver ({{cmd|r.in.xyz}})&lt;br /&gt;
&lt;br /&gt;
== Comparación de los datos originales y los interpolados ==&lt;br /&gt;
&lt;br /&gt;
* Comparación estadística: use {{cmd|r.mapcalc}} para calcular un mapa de diferencia, luego {{cmd|r.univar}} para calcular estadísticas univariadas de las dferencias.&lt;br /&gt;
* Comparación gráfica {{cmd|g.gui.mapswipe|version=70}} - Compara de manera interactiva dos mapas en una ventana deslizante.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[Contour lines to DEM]]&lt;br /&gt;
* [[RST Spline Surfaces]]&lt;br /&gt;
* [[LIDAR]]&lt;br /&gt;
* GRASS {{cmd|rasterintro}}&lt;br /&gt;
* GRASS {{cmd|vectorintro}}&lt;br /&gt;
* [[Import XYZ]]&lt;br /&gt;
* [[Grid registration]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Interpolation]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23326</id>
		<title>Interpolation/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Interpolation/es&amp;diff=23326"/>
		<updated>2016-08-03T15:06:43Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: interpolation/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Métodos de remuestreo y interpolación en GRASS ==&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de un mapa ráster &amp;quot;lleno&amp;quot; (continuidad de datos) a una resolución distinta ===&lt;br /&gt;
&lt;br /&gt;
==== Remuestreo de mapas ráster a una resolución más fina ====&lt;br /&gt;
* {{cmd|r.resample}} usa el método de vecino más cercano, produce un resultado idéntico que un remuestreo al vuelo realizado a través de los módulos de importación ráster.&lt;br /&gt;
* {{cmd|r.resamp.interp}} remuestreo de vecino más cercano, bilineal, y bicúbico: method=neares usa el mismo algoritmo que {{cmd|r.resample}}, pero no el mismo código así que no necesariamente produce los mismo resultados en casos donde haya redondeo de número de punto flotante. Para {{cmd|r.resamp.interp}} method=bilinear y method=bicubic, los valores ráster son tratados como muestras en cada centro de celda, que definen una superficie continua (''piecewise''). Los valores ráster resultantes son obtenidos muestreando la superficie en caad centro de celda. Dado que el algoritmo interpola, y no extrapola, hay un margen de 0.5 (para bilineal) y 1.5 (para bicúbico) celdas que se pierden. Todas las muestras que estén en este margen se volverán nulas.&lt;br /&gt;
* {{cmd|r.resamp.rst}} interpolación de spline regularizado con tensión (''Regularized Spline with Tension (RST)''): se comporta de manera similar, i.e. calcula una superficie asumiendo que los valores son muestras en cada centro de celda, y muestrea la superficie en la zona del centro de la celda.&lt;br /&gt;
&lt;br /&gt;
Métodos presentes solamente en GRASS 7:&lt;br /&gt;
* {{cmd|r.resamp.bspline|version=70}} remuestreo con interpolación spline bicúbica o bilineal, con regularización Tykhonov.&lt;br /&gt;
* {{cmd|r.resamp.filter|version=70}} remuestrea capas de mapa ráster usando un kernel analítico (''analytic kernel''). Ofrece los kernels: box, bartlett, gauss, normal, hermite, sinc, lanczos1, lanczos2, lanczos3, hann, hamming, y blackman.&lt;br /&gt;
&lt;br /&gt;
==== Remusetreo de mapas ráster a una resolución más gruesa ====&lt;br /&gt;
*  {{cmd|r.resamp.stats}} remuestrea capas de mapas ráster a una resolución más gruesa utilizando agregación. Si se usa son -w, el valor de cada región de celda es el valor agregado de los valores de todas las celdas ráster cuyos centros caen dentro del contorno de la región de la celda. Con la bandera -w, las muestras son ponderadas de acuerdo a la proporción de la celda ráster que cae dentro del contorno de la región de la celda, así el resultado normalmente no es afectado por errores de redondeo (un cambio pequeño en la posición del contorno resulta en una pequeña substracción o adición de la ponderación; así mismo, en los métodos &amp;quot;method=minimum&amp;quot; o &amp;quot;method=maximum&amp;quot;, la agregación no usa la ponderación, así que no la bandera -w no tiene efecto).&lt;br /&gt;
&lt;br /&gt;
=== Reinterpolación de mapas &amp;quot;dispersos&amp;quot; (''&amp;quot;sparse&amp;quot;'') (puntos o líneas dispersas)  ===&lt;br /&gt;
&amp;lt;!-- screenshot moved up for cosmetic reasons --&amp;gt;&lt;br /&gt;
[[Image:Inlets_03_SurfSal_icw_big.png|200px|right|thumb|v.surf.icw interpolating around barriers]]&lt;br /&gt;
&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia (''Inverse distance weighted average'') ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y el Complemento {{AddonCmd|r.surf.idw2|version=7}}).&lt;br /&gt;
* Interpolación a partir de líneas de contorno ({{cmd|r.surf.contour}}), vea [[Contour lines to DEM]].&lt;br /&gt;
* Interpolación usando el método {{wikipedia|Natural_neighbor}}  ({{AddonCmd|r.surf.nnbathy}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|B-spline}}s ({{cmd|v.surf.bspline}}).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con splines regularizadas con tensión ({{cmd|v.surf.rst}} y {{cmd|v.vol.rst}}), vea también [[RST Spline Surfaces]].&lt;br /&gt;
* Interpolación a partir de puntos vectoriales con {{wikipedia|Kriging}} ({{cmd|v.krige|version=70}}, GRASS 7+).&lt;br /&gt;
* Interpolación a partir de puntos vectoriales al rededor de barreras o superficies de coste  ({{AddonCmd|v.surf.icw}}).&lt;br /&gt;
&lt;br /&gt;
=== Mapas de calor  (densidad kernel) ===&lt;br /&gt;
* Crear mapas ráster a partir de puntos vectoriales con  ({{cmd|v.kernel}}).&lt;br /&gt;
* Interpolación de Ponderación del inverso de la distancia ({{wikipedia|Inverse_distance_weighting|IDW}})  ({{cmd|v.surf.idw}}, {{cmd|r.surf.idw}}, y {{cmd|r.surf.idw2}}).&lt;br /&gt;
&lt;br /&gt;
=== Binning ===&lt;br /&gt;
&lt;br /&gt;
Realmente no es un método de interpolación, el binning genera mapas ráster a partir de puntos vectoriales.&lt;br /&gt;
Puntos vectoriales en el formato XYZ (archivos CSV o ASCII) pueden ser rasterizados (convertidos a celdas ráster) usando estadísticas univariadas:&lt;br /&gt;
* ver ({{cmd|r.in.xyz}})&lt;br /&gt;
&lt;br /&gt;
== Comparación de los datos originales y los interpolados ==&lt;br /&gt;
&lt;br /&gt;
* Comparación estadística: use {{cmd|r.mapcalc}} para calcular un mapa de diferencia, luego {{cmd|r.univar}} para calcular estadísticas univariadas de las dferencias.&lt;br /&gt;
* Comparación gráfica {{cmd|g.gui.mapswipe|version=70}} - Compara de manera interactiva dos mapas en una ventana deslizante.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[Contour lines to DEM]]&lt;br /&gt;
* [[RST Spline Surfaces]]&lt;br /&gt;
* [[LIDAR]]&lt;br /&gt;
* GRASS {{cmd|rasterintro}}&lt;br /&gt;
* GRASS {{cmd|vectorintro}}&lt;br /&gt;
* [[Import XYZ]]&lt;br /&gt;
* [[Grid registration]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Interpolation]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Image_classification/es&amp;diff=23321</id>
		<title>Image classification/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Image_classification/es&amp;diff=23321"/>
		<updated>2016-07-30T05:04:41Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: image classification /es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Clasificación de imágenes ==&lt;br /&gt;
&lt;br /&gt;
'''Métodos de clasificación en GRASS'''&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| ||'''radiométrica &amp;lt;BR&amp;gt; no supervisada'''||'''radiométrica &amp;lt;BR&amp;gt;supervisada 1'''||'''radiométrica &amp;lt;BR&amp;gt;supervisada 2'''||'''radiométrica y geométrica&amp;lt;BR&amp;gt; supervisada'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Prepocesamiento de imágenes''' || colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| {{AddonCmd|r.smooth.seg}} (opcional, en caso de que los datos originales tengan ruido)&lt;br /&gt;
|-&lt;br /&gt;
| '''Segmentación''' || colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| {{cmd|i.segment|version=70}}&lt;br /&gt;
|-&lt;br /&gt;
| '''Preprocesamiento'''||{{cmd|i.cluster}}||{{cmd|i.class}} (monitorea digitalización), {{cmd|g.gui.iclass|version=70}} (en GRASS 70)||{{cmd|i.gensig}} (usando mapas de entrenamiento)||{{cmd|i.gensigset}} (usando mapas de entrenamiento)&lt;br /&gt;
|-&lt;br /&gt;
| '''Clasificación'''||{{cmd|i.maxlik}}||{{cmd|i.maxlik}}||{{cmd|i.maxlik}}||{{cmd|i.smap}}&lt;br /&gt;
|-&lt;br /&gt;
| '''Aclaraciones'''||automático basado ||necesita digitalización previa||necesita digitalización previa||necesita digitalización previa&lt;br /&gt;
|-&lt;br /&gt;
|    ||en estadísticas de imágenes||de áreas de etremiento||de áreas de entreamiento||de áreas de entrenamiento&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Es posible digitalizar áreas de entrenamiento con r.digit (no recomendado) o &lt;br /&gt;
You can digitize training areas with either r.digit (not recommended), o la  [[herramienta de digitalización de GRASS]] + v.to.rast (recomendado). En versiones &amp;lt; 7.0 era posible usar el módulo v.digit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Preprocesamiento de imágenes (opcional) ===&lt;br /&gt;
* {{AddonCmd|r.smooth.seg}} - produce una aproximación suaviada de los datos y detecta discontinuidades. El módulo está basado en el modelo de variación Mumford-Shah para segmentación de imágenes. Usado como un análisis previo a la clasificación.&lt;br /&gt;
: Para más detalles revise el maual {{AddonCmd|r.smooth.seg}}. Este módulo anteriormente se llamaba r.seg.&lt;br /&gt;
* {{cmd|i.segment}} - identifica segmentos (objetos) de datos de imágenes basado (actualmente) en un algoritmo de crecimiento y unión. El resultado de la segmentación puede ser útil (por si misma) como un paso previo a la clasificación, por ej. reduciendo el ruido y aumentando la velocidad de la clasificación.&lt;br /&gt;
** Clasificación de estos segmentos: ver abajo en &amp;quot;Clasificación no supervisada&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Modo interactivo ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.class}} - Genera las firmas espectrales para una imagen al permitir al usuario marcar las regiones de interés.&lt;br /&gt;
: El archivo de firmas puede ser usado como entrada para {{cmd|i.maxlik}} o como un archivo inicial (semilla) para {{cmd|i.cluster}}.&lt;br /&gt;
* {{cmd|g.gui.iclass|version=70}} - Herramienta de clasificación supervisada de datos de imágenes.&lt;br /&gt;
&lt;br /&gt;
=== Preprocesamiento ===&lt;br /&gt;
&lt;br /&gt;
*  {{cmd|i.cluster}} - Genera firmas espectrales para tipos de cobertura en una imagen, usando un algoritmo de cluster.&lt;br /&gt;
: El archivo de firmas resltante es usado como entrada para {{cmd|i.maxlik}}, para generar una clasificación no supervisada.&lt;br /&gt;
* {{cmd|i.gensig}} - Genera estadísticas para  {{cmd|i.maxlik}} a partir de capas de mapas ráster.&lt;br /&gt;
* {{cmd|i.gensigset}} - Genera estadísticas para  {{cmd|i.smap}} a partir de capas de mapas ráster.&lt;br /&gt;
&lt;br /&gt;
Información relativa a {{cmd|i.cluster}}:&lt;br /&gt;
* Discusión: [https://lists.osgeo.org/pipermail/grass-user/2012-October/066046.html Is &amp;quot;i.cluster&amp;quot; an implementation of the ISODATA algorithm?]&lt;br /&gt;
* [[User:NikosA/About Clustering|About Clustering]]&lt;br /&gt;
&lt;br /&gt;
=== Clasificación no supervisada ===&lt;br /&gt;
&lt;br /&gt;
Para una introducción, revise por ejemplo {{wikipedia|Cluster_analysis}}.&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.maxlik}} - Clasifica reflectancias espectrales de las celdas de datos de imágenes.&lt;br /&gt;
: La clasificación está basada en la información de las firmas espectrales generada por {{cmd|i.cluster}} (ver abajo).&lt;br /&gt;
* GRASS GIS 7: {{cmd|i.segment}}&lt;br /&gt;
** La clasificación de estos segmentos puede realizarse con los siguientes complementos:  {{AddonCmd|v.class.mlR}}, {{AddonCmd|v.class.mlpy}}, {{AddonCmd|v.class.ml}}.&lt;br /&gt;
&lt;br /&gt;
Vea el ejemplo de más abajo.&lt;br /&gt;
&lt;br /&gt;
=== Clasificación supervisada ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|i.maxlik}} - Clasifica la reflectancia espectral de la celda de datos de imágenes.&lt;br /&gt;
: La clasificación está basada en la información de las firmas espectrales generada ya sae con {{cmd|i.class}}, o {{cmd|i.gensig}}.&lt;br /&gt;
* {{cmd|g.gui.iclass}} - Herramienta para clasificación supervisada de datos de imágenes.&lt;br /&gt;
* {{cmd|i.smap}}  - Realiza una clasificación de imágenes contextual (segmentación de imágenes) usando la estimación secuencial máxima a posteriori (SMAP).&lt;br /&gt;
* En caso de mapas pancromaticos o de una cantidad limitada de canales, generalmente se recomienda generar canales sintéticos a través de análiss de texturas ({{cmd|r.texture}}).&lt;br /&gt;
&lt;br /&gt;
Vea el ejemplo de más abajo.&lt;br /&gt;
&lt;br /&gt;
== Pequeño tutorial de clasificación ==&lt;br /&gt;
&lt;br /&gt;
Se necesita: GRASS &amp;gt;=  6.4 . Las instrucciones para GRASS 7 están señaladas con un ''#'''GRASS7''' '' al final del comando, si corre estas instrucciones en la consola de comandos de la GUI, copie la instrucción sin el ''#'' y todo lo que le sigue.&lt;br /&gt;
&lt;br /&gt;
Se usan los datos del satélite Landsat preparados para los datos de muestra de [http://www.grassbook.org/data_menu3rd.php North Carolina]. Es un conjunto de datos multiespectrales en donde cada canal está guardado en un mapa separado.&lt;br /&gt;
&lt;br /&gt;
Se usa la Localización North Carolina.&lt;br /&gt;
&lt;br /&gt;
=== Calentando motores con Landsat TM ===&lt;br /&gt;
&lt;br /&gt;
Ver qué mapas hay&lt;br /&gt;
  g.list rast &lt;br /&gt;
  g.list type=rast mapset=landsat # '''GRASS7'''&lt;br /&gt;
  # definir la región a partir de uno de las bandas y mostrar la configuración de la región&lt;br /&gt;
  g.region rast=lsat7_2002_10 -p&lt;br /&gt;
&lt;br /&gt;
Ver algunos mapas Landsat (1: azul, 2: verde, 3: rojo, 4: cercano al infrarojo, etc.)&lt;br /&gt;
  d.mon x0&lt;br /&gt;
  d.mon wx0 # '''GRASS7'''&lt;br /&gt;
  d.rast lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_20&lt;br /&gt;
  d.rast lsat7_2002_30 &lt;br /&gt;
  d.rast lsat7_2002_40&lt;br /&gt;
&lt;br /&gt;
Consultar el valor de puntos individuales&lt;br /&gt;
  d.what.rast lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40&lt;br /&gt;
&lt;br /&gt;
Histograma de un canal:&lt;br /&gt;
  d.histogram lsat7_2002_10&lt;br /&gt;
  d.erase&lt;br /&gt;
&lt;br /&gt;
Crear vistas RGB (rojo,verde,azul) al vuelo, con colores verdaderos y falsos:&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_30&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
&lt;br /&gt;
Revisar los canáles térmicos (codificados para ajustar a rango de datos 0-255):&lt;br /&gt;
# http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html&lt;br /&gt;
# Vea el LMIN/LMAX: &amp;quot;Table 11.2 ETM+ Spectral Radiance Range watts/(meter squared * ster * µm)&amp;quot;&lt;br /&gt;
# no se detalla el procedimiento, pero se usa r.mapcalc para convertir  grados Kelvin/Celsius.&lt;br /&gt;
&lt;br /&gt;
  # ver el canál térmico codificado&lt;br /&gt;
  d.rast lsat7_2002_61&lt;br /&gt;
&lt;br /&gt;
Cálculo de NDVI como ejemplo de álgebra de mapas:&lt;br /&gt;
  r.mapcalc &amp;quot;ndvi = 1.0 * (lsat7_2002_40 - lsat7_2002_30)/(lsat7_2002_40 + lsat7_2002_30)&amp;quot;&lt;br /&gt;
  d.rast.leg ndvi&lt;br /&gt;
  r.colors ndvi color=ndvi&lt;br /&gt;
  d.rast.leg ndvi&lt;br /&gt;
&lt;br /&gt;
Mostrar algunas &amp;quot;clases&amp;quot; seleccionadas de NDVI:&lt;br /&gt;
  d.erase&lt;br /&gt;
  d.rast ndvi val=0.3-1.0&lt;br /&gt;
  d.rast ndvi val=-1.0--0.1&lt;br /&gt;
  d.rast ndvi val=0.0-0.2&lt;br /&gt;
  d.rast ndvi val=0.0-0.3&lt;br /&gt;
&lt;br /&gt;
Ver el canal pancromático, comparar la resolución:&lt;br /&gt;
  r.info -g lsat7_2002_80 &lt;br /&gt;
  r.info -g lsat7_2002_30&lt;br /&gt;
  g.region rast=lsat7_2002_80 -p&lt;br /&gt;
  d.erase -f&lt;br /&gt;
  d.rast lsat7_2002_80&lt;br /&gt;
  d.zoom # '''no usar en GRASS7'''&lt;br /&gt;
  d.rast lsat7_2002_30&lt;br /&gt;
  d.rast lsat7_2002_80&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
=== Clasificación de imágenes ===&lt;br /&gt;
&lt;br /&gt;
Definir región al canal rojo:&lt;br /&gt;
  g.region rast=lsat7_2002_30 -p&lt;br /&gt;
&lt;br /&gt;
Crear un grupo:&lt;br /&gt;
  i.group group=lsat7_2002 subgroup=lsat7_2002 \&lt;br /&gt;
    input=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_70&lt;br /&gt;
&lt;br /&gt;
==== Clasificación no supervisada ====&lt;br /&gt;
&lt;br /&gt;
Generar estadísticas no supervisadas:&lt;br /&gt;
  i.cluster  group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt&lt;br /&gt;
  i.cluster  group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
  # ver el archivo de reporte &lt;br /&gt;
  cat lsat7_2002.txt # se puede usar también el comando gedit&lt;br /&gt;
&lt;br /&gt;
Asignar pixeles a clases, revisar la calidad de la asignación:&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class reject=lsat7_2002_reject&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class reject=lsat7_2002_reject  # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
  # color compuesto falso&lt;br /&gt;
  d.mon x0 ; d.font Vera&lt;br /&gt;
  d.mon wx0; d.font Vera # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  # classification result&lt;br /&gt;
  d.mon x1 ; d.font Vera&lt;br /&gt;
  d.mon wx1 ; d.font Vera # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_class&lt;br /&gt;
  # mapa de rechazo&lt;br /&gt;
  d.mon x2 ; d.font Vera&lt;br /&gt;
  d.mon wx2; d.font Vera  # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  # histograma de rechazo&lt;br /&gt;
  d.mon x3 ; d.font Vera&lt;br /&gt;
  d.mon wx3; d.font Vera  # '''GRASS7'''&lt;br /&gt;
  d.histogram lsat7_2002_reject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Map_lsat7_2002_r1g5b7.png|thumb|center|300px|Mapa NC Landsat 2002 - falso color compuesto]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_class.png|thumb|center|300px|Clasificación no supervisada]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Histogram_lsat7_2002_reject.png|thumb|center|300px|Histograma de rechazo de la clasificación no supervisada]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_reject.png|thumb|center|300px|Mapa de rechazo de la clasificación no supervisada]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Juegue con diferentes separaciones de los clusters:&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt separation=1.5&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=10 reportfile=lsat7_2002_2.txt separation=1.5 # '''GRASS7'''&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class2 reject=lsat7_2002_reject2&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class2 reject=lsat7_2002_reject2  # '''GRASS7'''&lt;br /&gt;
  d.mon x4&lt;br /&gt;
  d.mon wx4  # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_class2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_reject&lt;br /&gt;
  d.rast.leg lsat7_2002_reject2&lt;br /&gt;
  d.rast.leg lsat7_2002_class2&lt;br /&gt;
&lt;br /&gt;
Comparar con RGB:&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class2 cat=1 -o&lt;br /&gt;
  d.rast lsat7_2002_class2 values=1 -n  # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class cat=1 -o&lt;br /&gt;
  d.rast lsat7_2002_class values=1 -n   # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10&lt;br /&gt;
  d.rast lsat7_2002_class cat=1 -o&lt;br /&gt;
  d.rast lsat7_2002_class values=1 -n   # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
Un tercer intento con más clases:&lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=15 reportfile=lsat7_2002.txt &lt;br /&gt;
  i.cluster group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=15 reportfile=lsat7_2002.txt  # '''GRASS7'''&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class3 reject=lsat7_2002_reject3&lt;br /&gt;
  i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class3 reject=lsat7_2002_reject3 # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_2002_class3&lt;br /&gt;
&lt;br /&gt;
[[Image:Map_lsat7_2002_class_unsupervised_15.png|thumb|center|300px|Clasificación no supervisada con 15 clases]]&lt;br /&gt;
&lt;br /&gt;
====Clasificación supervisada====&lt;br /&gt;
&lt;br /&gt;
Lazar la GUI para digitalizar:&lt;br /&gt;
  g.gui wxpython&lt;br /&gt;
&lt;br /&gt;
Ahora digitalice las áreas de entrenamiento de agua, asfalto, bosque, suelo descubierto en el compuesto RGB en la GUI.&lt;br /&gt;
Digitalizar polígonos/centroides con atributos. La ventaja: sabemos que clases son.&lt;br /&gt;
&lt;br /&gt;
[[Image:Training_map_supervised.png|thumb|center|300px|Mapa NC Landsat 2002 - áreas de entrenamiento]]&lt;br /&gt;
&lt;br /&gt;
Asignar también una ID numérica para cada clase en una nueva columna:&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
  v.db.addcol lsat7_training col=&amp;quot;id integer&amp;quot;&lt;br /&gt;
  v.db.addcolum lsat7_training col=&amp;quot;id integer&amp;quot;&amp;quot;id integer&amp;quot;   # '''GRASS7'''&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'water'&amp;quot; val=1&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'forest'&amp;quot; val=2&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'asphalt'&amp;quot; val=3&lt;br /&gt;
  v.db.update lsat7_training col=id where=&amp;quot;name = 'soil'&amp;quot; val=4&lt;br /&gt;
  v.db.select lsat7_training&lt;br /&gt;
&lt;br /&gt;
Transformar mapa vectorial de entrenamineto a modelo ráster:&lt;br /&gt;
  g.region vect=lsat7_training align=lsat7_2002_10 -p&lt;br /&gt;
  v.to.rast in=lsat7_training out=lsat7_training use=attr col=id labelcol=name --o&lt;br /&gt;
  v.to.rast input=lsat7_training out=lsat7_training use=attr attribute_column=id label_column=name --o   # '''GRASS7'''&lt;br /&gt;
  &lt;br /&gt;
  d.mon x0&lt;br /&gt;
  d.mon wx0   # '''GRASS7'''&lt;br /&gt;
  d.rast.leg lsat7_training &lt;br /&gt;
&lt;br /&gt;
Generar estadísticas a partir de áreas de entrenamiento:&lt;br /&gt;
  i.gensigset group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap training=lsat7_training&lt;br /&gt;
  i.gensigset group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_smap training=lsat7_training   # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
Realizar clasificación supervisada:&lt;br /&gt;
  i.smap group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap  out=smap&lt;br /&gt;
  i.smap group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_smap  out=smap   # '''GRASS7'''&lt;br /&gt;
&lt;br /&gt;
Colorear:&lt;br /&gt;
  r.colors smap rules=- &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
 1 aqua&lt;br /&gt;
 2 green&lt;br /&gt;
 3 180 180 180&lt;br /&gt;
 4 brown&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
  d.rast.leg smap&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Image:Map_lsat7_2002_r1g5b7.png|thumb|center|300px|Mapa NC Landsat 2002 - compuesto de color falso]]&lt;br /&gt;
| [[Image:Map_lsat7_2002_class_supervised.png|thumb|center|300px|Clasificación supervisada SMAP]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vectorizar el resultado:&lt;br /&gt;
  r.to.vect smap out=smap feat=area&lt;br /&gt;
  r.to.vect smap out=smap type=area   # '''GRASS7'''&lt;br /&gt;
  d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30&lt;br /&gt;
  d.vect smap  type=boundary col=red&lt;br /&gt;
&lt;br /&gt;
Y ahí lo tienes :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Clasificación basada en objetos  ===&lt;br /&gt;
''Created based on [http://lists.osgeo.org/pipermail/grass-user/2014-June/070384.html Summary of object-based classification possibilities in GRASS GIS (June 2014)]. Feel free to merge this with other content or with different page.''&lt;br /&gt;
&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2013-October/066181.html Moritz's steps and the main discussion: Object-based image classification in GRASS] ([http://osgeo-org.1560.x6.nabble.com/Object-based-image-classification-in-GRASS-td5086693.html nabble link])&lt;br /&gt;
* [http://geo.fsv.cvut.cz/gwiki/153ZODH_/_15._cvi%C4%8Den%C3%AD Moritz's steps in a nice guide by Martin, in Czech with images] ([http://translate.google.com/translate?sl=cs&amp;amp;tl=en&amp;amp;js=n&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;u=http%3A%2F%2Fgeo.fsv.cvut.cz%2Fgwiki%2F153ZODH_%2F_15._cvi%25C4%258Den%25C3%25AD&amp;amp;act=url English Google-translation])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-user/2013-November/069254.html Alternative notes by Moritz: Classification of segments] ([http://osgeo-org.1560.x6.nabble.com/Re-Classification-of-segments-td5088837.html nabble link])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2014-January/066804.html Pietro's steps and tools] ([http://osgeo-org.1560.x6.nabble.com/Object-based-image-classification-in-GRASS-tp5086693p5096826.html nabble link])&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2013-August/065287.html Another discussion about what variables to use: Object-based classification] ([http://osgeo-org.1560.x6.nabble.com/i-segment-invalid-region-id-0-tp5066102p5070201.html nabble link])&lt;br /&gt;
* The source code of the classification tools (for inspiration in writing your own scripts):&lt;br /&gt;
** v.class.ml: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.ml/ (Pietro's tool)&lt;br /&gt;
** v.class.mlpy: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.mlpy/ (Vaclav's tool)&lt;br /&gt;
** i.mlpy.py: http://svn.osgeo.org/grass/sandbox/turek/i.mlpy.py (Stepan's tool)&lt;br /&gt;
* List of Python machine learning libraries:&lt;br /&gt;
** scikit-learn, http://scikit-learn.org/ (used by v.class.ml)&lt;br /&gt;
** mlpy, http://mlpy.sourceforge.net/ (used by v.class.ml, v.class.mlpy and i.mlpy)&lt;br /&gt;
** Pandas, http://pandas.pydata.org/&lt;br /&gt;
** Milk, http://luispedro.org/software/milk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Más lecturas sobre clasificación con  GRASS ==&lt;br /&gt;
* Micha Silver: [http://my.arava.co.il/~micha/blog/?p=3 Analyzing acacia tree health in the Arava with GRASS GIS]&lt;br /&gt;
* Perrygeo: [http://www.perrygeo.net/wordpress/?p=104 Impervious surface deliniation with GRASS]&lt;br /&gt;
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/159 Working with Landsat Data]&lt;br /&gt;
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/548 Canopy Quantification via Image Classification]&lt;br /&gt;
* [http://istgeo.ist.supsi.ch/site/node/24 Segmentazione o classificazione d'immagini con GRASS] (in italiano)&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Image processing]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_and_Paraview/es&amp;diff=23320</id>
		<title>GRASS and Paraview/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_and_Paraview/es&amp;diff=23320"/>
		<updated>2016-07-29T15:36:06Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: GRASS and Paraview/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Visualización 3D de datos de GRASS en Paraview=&lt;br /&gt;
&lt;br /&gt;
Descargue Paraview en http://www.paraview.org (disponible en Linux, MacOSX y MS-Windows) ([http://www.paraview.org/paraview/project/imagegallery.php galería de capturas de pantalla]).&lt;br /&gt;
&lt;br /&gt;
* Ver también la página wiki de [[GRASS and VTK]].&lt;br /&gt;
&lt;br /&gt;
== Exportación ráster/voxel 2D/3D ==&lt;br /&gt;
&lt;br /&gt;
GRASS GIS es uno de los pocos SIGs con soporte para datos de volúmenes. Los datos son guardados como un ráster 3D con unidad de volumen llamado voxel (pixel con volumen). Los [[Voxel]]s están diseñados para soportar por ejemplo representaciones de campos continuos trivariados. La última versión de GRASS7 soporta cubos voxels que tienen el tiempo como tercera dimensión.&lt;br /&gt;
&lt;br /&gt;
* Mapas ráster 2D: {{cmd|r.out.vtk}}&lt;br /&gt;
* Mapas ráster 3D (voxel): {{cmd|r3.out.vtk}}&lt;br /&gt;
* Exportar tabla de colores de ráster: {{AddonCmd|r.colors.out_vtk}}&lt;br /&gt;
* Ráster 3D (voxel) y mapas espacio temporales como netCDF: r3.out.netcdf&lt;br /&gt;
&lt;br /&gt;
== Exportar vectoriales 2D/3D ==&lt;br /&gt;
&lt;br /&gt;
* Mapas vectoriales 2D/3D: {{cmd|v.out.vtk}}&lt;br /&gt;
&lt;br /&gt;
== Visualización ==&lt;br /&gt;
&lt;br /&gt;
Iniciar Paraview, cargar datos VTK, y escoger los lectores adecuados: por ejemplo &amp;quot;Legacy VTK file&amp;quot;....que es muy intuitivo de usar.&lt;br /&gt;
En la sección de Propiedades haga click al botón Aplicar, luego en la sección de Visualización defina &amp;quot;Surface&amp;quot; en el menú de Representación, y defina el nombre del archivo que tiee que cargar en el menú de color. Luego con el menú Editar puede definir la escala de color.&lt;br /&gt;
En Paraview tiene muchos filtros para procesar los datos. Un filtro útil es &amp;quot;Cell data to point data&amp;quot;. En el menú desplegable de &amp;quot;Filters&amp;quot; puede encotrarlo en la lista &amp;quot;Alphabetical&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--''(don't hesitate to expand this part)''--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 paraview --data=/tmp/threelayer.vtk&lt;br /&gt;
&lt;br /&gt;
[[Image:LausanneDemoDataset3dParaview_4.png|thumb|center|400px|Flujo de agua subterranea 3D]]&lt;br /&gt;
&lt;br /&gt;
[[Image:LausanneDemoDataset3dParaview_10.png|thumb|center|400px|Flujo de agua subterranea 3D]]&lt;br /&gt;
&lt;br /&gt;
== Visualización RGB ==&lt;br /&gt;
&lt;br /&gt;
Exportar lso datos con {{cmd|r.out.vtk}}:&lt;br /&gt;
 r.out.vtk input=dsm_s_michele elevation=dsm_s_michele \&lt;br /&gt;
           rgbmaps=ofd_s_michele.red,ofd_s_michele.green,ofd_s_michele.blue \&lt;br /&gt;
           out=s_michele_color.vtk&lt;br /&gt;
&lt;br /&gt;
Cargar los datos en Paraview:&lt;br /&gt;
 paraview --data=s_michele_color.vtk&lt;br /&gt;
&lt;br /&gt;
* En Paraview, de click en &amp;quot;Apply&amp;quot;.&lt;br /&gt;
* Seleccione la pestaña  &amp;quot;Display&amp;quot; y escoja &amp;quot;Color by&amp;quot; para cambiar de escalares de entrada a escalares rgb.&lt;br /&gt;
* Deshabilite el botón de &amp;quot;Map Scalars&amp;quot; en la pestaña de display para evitar el uso de una tabla de búsqueda (''lookup table'').&lt;br /&gt;
&lt;br /&gt;
[[Image:Paraview fondazione mach 3D.png|thumb|center|400px|Fondazione Mach - área de S. Michele (Italia) en ParaView]]&lt;br /&gt;
&lt;br /&gt;
== Mostrar anaglifos esterográficos ==&lt;br /&gt;
&lt;br /&gt;
 paraview --stereo --data=s_michele_color.vtk&lt;br /&gt;
&lt;br /&gt;
* En Paraview, de click en &amp;quot;Apply&amp;quot;.&lt;br /&gt;
* Seleccione la pestaña &amp;quot;Display&amp;quot; y escoja &amp;quot;Color by&amp;quot; para cambiar los escalares de entrada a escalares rgb.&lt;br /&gt;
* Deshabilite el botón de &amp;quot;Map Scalars&amp;quot; en la pestaña de display para evitar el uso de una tabla de búsqueda (''lookup table'').&lt;br /&gt;
&lt;br /&gt;
[[Image:Paraview fondazione mach ortho 3D.png|thumb|center|400px|Fondazione Mach - S. Michele (Italy) area shown in ParaView's stereo mode]]&lt;br /&gt;
&lt;br /&gt;
== Creando anaglifos estereográficos  ==&lt;br /&gt;
&lt;br /&gt;
* Vea también [[Stereo anaglyphs]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Visualization]]&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Linking to other languages]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: 3D]]&lt;br /&gt;
[[Category: VTK]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=WxNviz/es&amp;diff=23319</id>
		<title>WxNviz/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=WxNviz/es&amp;diff=23319"/>
		<updated>2016-07-28T22:58:59Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''(Regresar a la página de [[WxPython-based GUI for GRASS|wxGUI]])''&lt;br /&gt;
&lt;br /&gt;
'''wxNviz''' es una extensión de [[wxGUI]] que permite al usuario visualizar de manera realista múltiples superficies (datos ráster 2D) en un espacio 3D, opcionalmente usando coloreados temáticos, superponiendo datos vectoriales sobre las superficies, mostrando datos 3D en el espacio y visualizado datos de volumen (datos ráster 3D).&lt;br /&gt;
&lt;br /&gt;
Para las instrucciones de su uso, vea la {{cmd|wxGUI.nviz|version=70|desc=página del manual}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Capturas de pantalla ==&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery perrow=3 widths=200&amp;gt;&lt;br /&gt;
Image:Wxnviz-alpha-0.png|2008-06-27: Mostrar un mapa ráster del árbol de capas como 2.5D (superficie).&lt;br /&gt;
Image:Wxnviz-alpha-1.png|2008-07-05: Soporte para adición de datos vectoriales (líneas 2D).&lt;br /&gt;
Image:Wxnviz-alpha-2.png|2008-07-26: Soporte para puntos vectoriales.&lt;br /&gt;
Image:Wxnviz-alpha-3.png|2008-08-02: Soporte de datos vectoriales 3D.&lt;br /&gt;
Image:Wxnviz-alpha-4.png|2008-08-09: Soporte inicial de datos volumétricos.&lt;br /&gt;
Image:Wxnviz-lmgr.png|2010-05-31: Herramienta de vista 3D integrada al Administrador de capas.&lt;br /&gt;
Image:Wxnviz-light.png|Panel de control de iluminación en el Administrador de capas (2010-06-17).&lt;br /&gt;
Image:Wxnviz-fringe.png|Panel de control de franjas en el Administrador de capas (2010-06-23)&lt;br /&gt;
Image:Wxnviz-redirect.png|Redireccionar mensajes a la wxGUI (2010-08-08).&lt;br /&gt;
Image:Wxnviz-volumes.png|Mostrar rásters (superficie), vectoriales 2D y ráster 3D (volumen) en el espacio 3D (2010-08-16).&lt;br /&gt;
Image:WxNviz surface page.png|Página de superficie de  WxNviz modificada (2011-06-02).&lt;br /&gt;
Image:WxNviz_constant_surface_page.png|Página de superficie constante añadida  (2011-06-02).&lt;br /&gt;
Image:WxNviz_lighting.png|Iluminación arreglada (2011-05-02).&lt;br /&gt;
Image:WxNviz_cutting_planes_1.png|Planos cortantes (mezclado de sombraeado) (2011-06-10).&lt;br /&gt;
Image:WxNviz_cutting_planes_2.png|Planos cortantes (sombreando color de arriba) (2011-06-10).&lt;br /&gt;
Image:WxNviz_view_page.png|Página de vista modificada (2011-06-10).&lt;br /&gt;
Image:Nviz_cmd_cutting_planes.png‎|Superficies cortadas por dos planos (generada con nviz_cmd) (2011-06-30).&lt;br /&gt;
Image:WxNviz_generate_command.png‎|Comando para nviz_cmd generado por  wxNviz (2011-07-01).&lt;br /&gt;
Image:WxNviz_north_arrow.png‎|Implementación de flecha al norte (2011-07-08).&lt;br /&gt;
Image:WxNviz_volumes.png‎|Isosuperficies coloreadas con transparencia (2011-07-08).&lt;br /&gt;
Image:WxNviz_volume_slices_1.png‎|Rebanada (slice) parcialmente transparente (2011-07-14).&lt;br /&gt;
Image:WxNviz_volume_slices_2.png‎|Combinación de isosuperficies y rebanadas (2011-07-14).&lt;br /&gt;
Image:WxNviz_overlays.png‎|Leyenda ráster, texto de leyenda y flecha al norte (2011-07-22).&lt;br /&gt;
Image:WxNviz_thematic_points_colors‎.png|Mapeo temático (colores) para puntos (2011-08-05).&lt;br /&gt;
Image:WxNviz_colorrules_dialog.png|Cuadro de diálogo para {{cmd|v.colors}} abierto desde vista 3D  (2011-08-05).&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
== Animaciones ==&lt;br /&gt;
{{YouTube|AByFPKHvgu4|desc=Using fly-through mode for creating animation}}&lt;br /&gt;
&lt;br /&gt;
== Videos tutoriales (inglés) ==&lt;br /&gt;
&lt;br /&gt;
{{YouTube|ib1-mBbWkv4|desc=Cargando los datos, estableciendo propiedades de la capa}}&lt;br /&gt;
{{YouTube|ZLDstyumxv0|desc=Visualizando franjas y flecha al norte}}&lt;br /&gt;
{{YouTube|CmK-fEyf2SY|desc=Mapas ráster 3D (volúmenes) en el espacio (isosuperficies y rebanadas)}}&lt;br /&gt;
{{YouTube|13wj5KWEweE|desc=Mapeo temático de colores}}&lt;br /&gt;
&lt;br /&gt;
=== Tutoriales más viejitos (2010) ===&lt;br /&gt;
&lt;br /&gt;
{{YouTube|Ej_rBc9sgvE|desc=Cargando datos, estableciendo las propiedades de la capa}}&lt;br /&gt;
{{YouTube|iWyaBL2Krto|desc=Visualizando franjas}}&lt;br /&gt;
{{YouTube|ioE_hHMHqKg|desc=Mapas ráster 3D (volúmenes) en el espacio}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Fog support (see [http://gpwiki.org/index.php/OpenGL:Tutorials:Tutorial_Framework:Light_and_Fog], [http://www.swiftless.com/tutorials/opengl/fog.html], [http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=16])&lt;br /&gt;
* Vertical labels (take from geonames.org point data): like in http://tev.fbk.eu/marmota/blog/?p=82&lt;br /&gt;
* Second interactive light source for isosurface visualization&lt;br /&gt;
* Tick marks and coordinate values to x,y,z axis when drawing fringe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&amp;lt;/strike&amp;gt; &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problemas  ==&lt;br /&gt;
&lt;br /&gt;
* No se renderiza nada:&lt;br /&gt;
: Por favor note que con el puerto wxGTK de wxPython (sistemas Linux), puede aparecer un problema durante la instalación de wxNiz (no se renderiza nada) o cuando se renderizan vectores (orden eqívoco de superficies y vectores). Si encuentra este problema, trate de cambiar el número del buffer de profundidad en el menú de la wxGUi &amp;gt; Configuraciones &amp;gt; Preferencias &amp;gt; Visualizador de mapas &amp;gt; Avanzado (los números posibles son 0, 16, 24, 32). Actualmente no es posible encontrar automáticamente el número correcto que funcione para su computadora.&lt;br /&gt;
&lt;br /&gt;
== Problemas conocidos  ==&lt;br /&gt;
&lt;br /&gt;
#Losta de etiquetas [http://trac.osgeo.org/grass/query?status=assigned&amp;amp;status=new&amp;amp;status=reopened&amp;amp;order=priority&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=owner&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=milestone&amp;amp;keywords=~wxNviz abiertas] y [http://trac.osgeo.org/grass/query?status=assigned&amp;amp;status=closed&amp;amp;order=priority&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=owner&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=milestone&amp;amp;keywords=~wxNviz cerradas].&lt;br /&gt;
#&amp;lt;strike&amp;gt;Se bloquea al añadir datos vectoriales en Mac&amp;lt;/strike&amp;gt; &lt;br /&gt;
#&amp;lt;strike&amp;gt;Altura de la vista algunas veces se establece en 1 luego de cambiar a vista 2D y de regreso a vista 3D (o con la vista 2D simultanea) y aun luego de que se reinicia la vista, sigue regresando a 1 cada vez que se toca el deslizador&amp;lt;/strike&amp;gt; &lt;br /&gt;
#:Arreglado en {{rev|46208}} &lt;br /&gt;
#Añadir dibujo, draw current and clear button may be useful &lt;br /&gt;
#Mapeo temático disponible solamente en GRASS 7.&lt;br /&gt;
#Región de visualización en 3D no cambia de acuerdo a la región 2D en la versión  &amp;amp;lt;= 6.5 &lt;br /&gt;
#Apariencia: &lt;br /&gt;
##&amp;amp;nbsp;Necesito &amp;amp;nbsp;&amp;lt;strike&amp;gt;dar clic a la pestaña de Vista para obtener el dibujo de la flecha, lo mismo que para la barra de escala &amp;lt;/strike&amp;gt;&lt;br /&gt;
##añadir leyenda &amp;amp;gt; OK: nada se dibuja en 3D pero la leyenda se muestra cuando cambio a 2D y doy click en eliminar la barra de escala (no dibujada), desaparece la superficie pero aparece la leyenda junto con un fondo blanco y negro (que asumo que debería de ser transparente, por que cuando muevo la leyenda la superficie estaba bajo de ésta - ya está discutido esto.&lt;br /&gt;
#General &lt;br /&gt;
##&amp;lt;strike&amp;gt;Cuando voy de la vista 3D a la 2D y de regreso a 3D, se pierde la configuración&amp;amp;nbsp;&amp;lt;/strike&amp;gt; &lt;br /&gt;
##&amp;lt;strike&amp;gt;de manear similar, cuando añado un volumen al Administrador de capas pierdo la configuración de la vista y la vista 3D regresa a lo predeterminado &amp;lt;/strike&amp;gt;&lt;br /&gt;
#Volúmenes: &lt;br /&gt;
##el cambio de la región por g.region parece ser igonrado, tengo que reiniciar GRASS con una la nueva región para obtener la región 3D correcta. Dado que el top/botom predeterminado es 1,0 si GRASS inicia con la configuración de la región 3D predeterminada, los  volúmenes no funcionan por que solamente hay un nivel.&lt;br /&gt;
##&amp;lt;strike&amp;gt;las isosuperficies funcionan con mis datos lidar pero las rebanadas no, parece que se debe a que la resolución es 0.3m, cuando lo cambio a 1m obtengo algo, aunque limitado.&lt;br /&gt;
###esto puede estar en  ''ogsf'' por que las rebanadas en nviz no funcionan tampoco con estos datos &amp;lt;/strike&amp;gt;&lt;br /&gt;
#&amp;lt;strike&amp;gt;cambio de color a uno constante no cambió el color de la isosuperficie&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funcionalidad de wxNviz ==&lt;br /&gt;
Qué falta:&lt;br /&gt;
* scaled difference&lt;br /&gt;
* lighting - follow surface viewpoint&lt;br /&gt;
* keyframe animation&lt;br /&gt;
* text rendering (in OpenGl)&lt;br /&gt;
&lt;br /&gt;
Qué funciona de manera parcial:&lt;br /&gt;
* etiquetas, leyendas&lt;br /&gt;
* mapeo temático - nviz permite escoger íconos y múltiples clasificaciones&lt;br /&gt;
* soporte básico para animaciones&lt;br /&gt;
&lt;br /&gt;
Qué es nuevo en  wxNviz:&lt;br /&gt;
* es posible cambiar el punto de vista de una manera más interactiva.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
* Funcionalida de scripts es reemplazada por el módulo  m.nviz.image.&lt;br /&gt;
* el estado de wxNviz se guarda en el espacio de trabajo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code ==&lt;br /&gt;
&lt;br /&gt;
=== [[wxNviz GSoC 2008|2008]] ===&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/SoCProjects#wxNvizdevelopmentforenhanced34Dvisualizationandanalysis Proyecto aceptado de Google Summer of Code 2008]&lt;br /&gt;
&lt;br /&gt;
=== [[wxNviz GSoC 2010|2010]] ===&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/SoCProjects#wxNvizdevelopmentforenhanced34Dvisualizationandanalysis Proyecto aceptado de  Google Summer of Code 2010]&lt;br /&gt;
&lt;br /&gt;
=== [[wxNviz GSoC 2011|2011]] ===&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/SoCProjects#CompletionofwxGUINvizextensionfor3DdatavisualizationinGRASSGIS Proyecto aceptado de Google Summer of Code 2011]&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* http://lists.osgeo.org/pipermail/grass-dev/2008-February/035792.html&lt;br /&gt;
&lt;br /&gt;
{{WxGUI}}&lt;br /&gt;
&lt;br /&gt;
[[Category:NVIZ]]&lt;br /&gt;
[[Category:Visualization]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=WxNviz/es&amp;diff=23318</id>
		<title>WxNviz/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=WxNviz/es&amp;diff=23318"/>
		<updated>2016-07-28T22:57:50Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: WxNviz/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''(Regresar a la página de [[WxPython-based GUI for GRASS|wxGUI]])''&lt;br /&gt;
&lt;br /&gt;
'''wxNviz''' es una extensión de [[wxGUI]] que permite al usuario visualizar de manera realista múltiples superficies (datos ráster 2D) en un espacio 3D, opcionalmente usando coloreados temáticos, superponiendo datos vectoriales sobre las superficies, mostrando datos 3D en el espacio y visualizado datos de volumen (datos ráster 3D).&lt;br /&gt;
&lt;br /&gt;
Para las instrucciones de su uso, vea la {{cmd|wxGUI.nviz|version=70|desc=página del manual}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Capturas de pantalla ==&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery perrow=3 widths=200&amp;gt;&lt;br /&gt;
Image:Wxnviz-alpha-0.png|2008-06-27: Mostrar un mapa ráster del árbol de capas como 2.5D (superficie).&lt;br /&gt;
Image:Wxnviz-alpha-1.png|2008-07-05: Soporte para adición de datos vectoriales (líneas 2D).&lt;br /&gt;
Image:Wxnviz-alpha-2.png|2008-07-26: Soporte para puntos vectoriales.&lt;br /&gt;
Image:Wxnviz-alpha-3.png|2008-08-02: Soporte de datos vectoriales 3D.&lt;br /&gt;
Image:Wxnviz-alpha-4.png|2008-08-09: Soporte inicial de datos volumétricos.&lt;br /&gt;
Image:Wxnviz-lmgr.png|2010-05-31: Herramienta de vista 3D integrada al Administrador de capas.&lt;br /&gt;
Image:Wxnviz-light.png|Panel de control de iluminación en el Administrador de capas (2010-06-17).&lt;br /&gt;
Image:Wxnviz-fringe.png|Panel de control de franjas en el Administrador de capas (2010-06-23)&lt;br /&gt;
Image:Wxnviz-redirect.png|Redireccionar mensajes a la wxGUI (2010-08-08).&lt;br /&gt;
Image:Wxnviz-volumes.png|Mostrar rásters (superficie), vectoriales 2D y ráster 3D (volumen) en el espacio 3D (2010-08-16).&lt;br /&gt;
Image:WxNviz surface page.png|Página de superficie de  WxNviz modificada (2011-06-02).&lt;br /&gt;
Image:WxNviz_constant_surface_page.png|Página de superficie constante añadida  (2011-06-02).&lt;br /&gt;
Image:WxNviz_lighting.png|Iluminación arreglada (2011-05-02).&lt;br /&gt;
Image:WxNviz_cutting_planes_1.png|Planos cortantes (mezclado de sombraeado) (2011-06-10).&lt;br /&gt;
Image:WxNviz_cutting_planes_2.png|Planos cortantes (sombreando color de arriba) (2011-06-10).&lt;br /&gt;
Image:WxNviz_view_page.png|Página de vista modificada (2011-06-10).&lt;br /&gt;
Image:Nviz_cmd_cutting_planes.png‎|Superficies cortadas por dos planos (generada con nviz_cmd) (2011-06-30).&lt;br /&gt;
Image:WxNviz_generate_command.png‎|Comando para nviz_cmd generado por  wxNviz (2011-07-01).&lt;br /&gt;
Image:WxNviz_north_arrow.png‎|Implementación de flecha al norte (2011-07-08).&lt;br /&gt;
Image:WxNviz_volumes.png‎|Isosuperficies coloreadas con transparencia (2011-07-08).&lt;br /&gt;
Image:WxNviz_volume_slices_1.png‎|Rebanada (slice) parcialmente transparente (2011-07-14).&lt;br /&gt;
Image:WxNviz_volume_slices_2.png‎|Combinación de isosuperficies y rebanadas (2011-07-14).&lt;br /&gt;
Image:WxNviz_overlays.png‎|Leyenda ráster, texto de leyenda y flecha al norte (2011-07-22).&lt;br /&gt;
Image:WxNviz_thematic_points_colors‎.png|Mapeo temático (colores) para puntos (2011-08-05).&lt;br /&gt;
Image:WxNviz_colorrules_dialog.png|Cuadro de diálogo para {{cmd|v.colors}} abierto desde vista 3D  (2011-08-05).&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
== Animaciones ==&lt;br /&gt;
{{YouTube|AByFPKHvgu4|desc=Using fly-through mode for creating animation}}&lt;br /&gt;
&lt;br /&gt;
== Videos tutoriales (inglés) ==&lt;br /&gt;
&lt;br /&gt;
{{YouTube|ib1-mBbWkv4|desc=Cargando los datos, estableciendo propiedades de la capa}}&lt;br /&gt;
{{YouTube|ZLDstyumxv0|desc=Visualizando franjas y flecha al norte}}&lt;br /&gt;
{{YouTube|CmK-fEyf2SY|desc=Mapas ráster 3D (volúmenes) en el espacio (isosuperficies y rebanadas)}}&lt;br /&gt;
{{YouTube|13wj5KWEweE|desc=Mapeo temático de colores}}&lt;br /&gt;
&lt;br /&gt;
=== Tutoriales más viejitos (2010) ===&lt;br /&gt;
&lt;br /&gt;
{{YouTube|Ej_rBc9sgvE|desc=Cargando datos, estableciendo las propiedades de la capa}}&lt;br /&gt;
{{YouTube|iWyaBL2Krto|desc=Visualizando franjas}}&lt;br /&gt;
{{YouTube|ioE_hHMHqKg|desc=Mapas ráster 3D (volúmenes) en el espacio}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Fog support (see [http://gpwiki.org/index.php/OpenGL:Tutorials:Tutorial_Framework:Light_and_Fog], [http://www.swiftless.com/tutorials/opengl/fog.html], [http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=16])&lt;br /&gt;
* Vertical labels (take from geonames.org point data): like in http://tev.fbk.eu/marmota/blog/?p=82&lt;br /&gt;
* Second interactive light source for isosurface visualization&lt;br /&gt;
* Tick marks and coordinate values to x,y,z axis when drawing fringe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&amp;lt;/strike&amp;gt; &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problemas  ==&lt;br /&gt;
&lt;br /&gt;
* No se renderiza nada:&lt;br /&gt;
: Por favor note que con el puerto wxGTK de wxPython (sistemas Linux), puede aparecer un problema durante la instalación de wxNiz (no se renderiza nada) o cuando se renderizan vectores (orden eqívoco de superficies y vectores). Si encuentra este problema, trate de cambiar el número del buffer de profundidad en el menú de la wxGUi &amp;gt; Configuraciones &amp;gt; Preferencias &amp;gt; Visualizador de mapas &amp;gt; Avanzado (los números posibles son 0, 16, 24, 32). Actualmente no es posible encontrar automáticamente el número correcto que funcione para su computadora.&lt;br /&gt;
&lt;br /&gt;
== Problemas conocidos  ==&lt;br /&gt;
&lt;br /&gt;
#Losta de etiquetas [http://trac.osgeo.org/grass/query?status=assigned&amp;amp;status=new&amp;amp;status=reopened&amp;amp;order=priority&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=owner&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=milestone&amp;amp;keywords=~wxNviz abiertas] y [http://trac.osgeo.org/grass/query?status=assigned&amp;amp;status=closed&amp;amp;order=priority&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=owner&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=milestone&amp;amp;keywords=~wxNviz cerradas].&lt;br /&gt;
#&amp;lt;strike&amp;gt;Se bloquea al añadir datos vectoriales en Mac&amp;lt;/strike&amp;gt; &lt;br /&gt;
#&amp;lt;strike&amp;gt;Altura de la vista algunas veces se establece en 1 luego de cambiar a vista 2D y de regreso a vista 3D (o con la vista 2D simultanea) y aun luego de que se reinicia la vista, sigue regresando a 1 cada vez que se toca el deslizador&amp;lt;/strike&amp;gt; &lt;br /&gt;
#:Arreglado en {{rev|46208}} &lt;br /&gt;
#Añadir dibujo, draw current and clear button may be useful &lt;br /&gt;
#Mapeo temático disponible solamente en GRASS 7.&lt;br /&gt;
#Región de visualización en 3D no cambia de acuerdo a la región 2D en la versión  &amp;amp;lt;= 6.5 &lt;br /&gt;
#Apariencia: &lt;br /&gt;
##&amp;amp;nbsp;Necesito &amp;amp;nbsp;&amp;lt;strike&amp;gt;dar clic a la pestaña de Vista para obtener el dibujo de la flecha, lo mismo que para la barra de escala &amp;lt;/strike&amp;gt;&lt;br /&gt;
##añadir leyenda &amp;amp;gt; OK: nada se dibuja en 3D pero la leyenda se muestra cuando cambio a 2D y doy click en eliminar la barra de escala (no dibujada), desaparece la superficie pero aparece la leyenda junto con un fondo blanco y negro (que asumo que debería de ser transparente, por que cuando muevo la leyenda la superficie estaba bajo de ésta - ya está discutido esto.&lt;br /&gt;
#General &lt;br /&gt;
##&amp;lt;strike&amp;gt;Cuando voy de la vista 3D a la 2D y de regreso a 3D, se pierde la configuración&amp;amp;nbsp;&amp;lt;/strike&amp;gt; &lt;br /&gt;
##&amp;lt;strike&amp;gt;de manear similar, cuando añado un volumen al Administrador de capas pierdo la configuración de la vista y la vista 3D regresa a lo predeterminado &amp;lt;/strike&amp;gt;&lt;br /&gt;
#Volúmenes: &lt;br /&gt;
##el cambio de la región por g.region parece ser igonrado, tengo que reiniciar GRASS con una la nueva región para obtener la región 3D correcta. Dado que el top/botom predeterminado es 1,0 si GRASS inicia con la configuración de la región 3D predeterminada, los  volúmenes no funcionan por que solamente hay un nivel.&lt;br /&gt;
##&amp;lt;strike&amp;gt;las isosuperficies funcionan con mis datos lidar pero las rebanadas no, parece que se debe a que la resolución es 0.3m, cuando lo cambio a 1m obtengo algo, aunque limitado.&lt;br /&gt;
###esto puede estar en  ''ogsf'' por que las rebanadas en nviz no funcionan tampoco con estos datos &amp;lt;/strike&amp;gt;&lt;br /&gt;
#&amp;lt;strike&amp;gt;cambio de color a uno constante no cambió el color de la isosuperficie&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funcionalidad de wxNviz ==&lt;br /&gt;
Qué falta:&lt;br /&gt;
* scaled difference&lt;br /&gt;
* lighting - follow surface viewpoint&lt;br /&gt;
* keyframe animation&lt;br /&gt;
* text rendering (in OpenGl)&lt;br /&gt;
&lt;br /&gt;
Qué funciona de manera parcial:&lt;br /&gt;
* etiquetas, leyendas&lt;br /&gt;
* mapeo temático - nviz permite escoger íconos y múltiples clasificaciones&lt;br /&gt;
* soporte básico para animaciones&lt;br /&gt;
&lt;br /&gt;
Qué es nuevo en  wxNviz:&lt;br /&gt;
* es posible cambiar el punto de vista de una manera más interactiva.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
* Funcionalida de scripts es reemplazada por el módulo  m.nviz.image.&lt;br /&gt;
* el estado de wxNviz se guarda en el espacio de trabajo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code ==&lt;br /&gt;
&lt;br /&gt;
=== [[wxNviz GSoC 2008|2008]] ===&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/SoCProjects#wxNvizdevelopmentforenhanced34Dvisualizationandanalysis Proyecto aceptado de Google Summer of Code 2008]&lt;br /&gt;
&lt;br /&gt;
=== [[wxNviz GSoC 2010|2010]] ===&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/SoCProjects#wxNvizdevelopmentforenhanced34Dvisualizationandanalysis Proyecto aceptado de  Google Summer of Code 2010]&lt;br /&gt;
&lt;br /&gt;
=== [[wxNviz GSoC 2011|2011]] ===&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/SoCProjects#CompletionofwxGUINvizextensionfor3DdatavisualizationinGRASSGIS Proyecto aceptado de Google Summer of Code 2011 project]&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* http://lists.osgeo.org/pipermail/grass-dev/2008-February/035792.html&lt;br /&gt;
&lt;br /&gt;
{{WxGUI}}&lt;br /&gt;
&lt;br /&gt;
[[Category:NVIZ]]&lt;br /&gt;
[[Category:Visualization]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=NVIZ/es&amp;diff=23317</id>
		<title>NVIZ/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=NVIZ/es&amp;diff=23317"/>
		<updated>2016-07-28T22:06:51Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Creating NVIZ/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Olympus_mons-medium.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
NVIZ es un módulo de GRASS que permite a los usuarios visualizar de manera realista superficies en un espacio tridimensional (3D), opcionalmente usando coloreados temáticos, superponiendo archivos vectoriales sobre superficies, y visualizando archivos GRASS del sitio ya sea superponiendolos a una superficie o como puntos 3D. El código de NVIZ es parte del código fuente estándar de GRASS.&lt;br /&gt;
&lt;br /&gt;
NVIZ significa ''software de visualización n dimensional'' (''n''-dimensional visualization software).&lt;br /&gt;
&lt;br /&gt;
* {{cmd|nviz}}: ayuda para el uso en línea de comandos.&lt;br /&gt;
* {{cmd|nviz/index}}: descripción de NVIZ.&lt;br /&gt;
* {{cmd|nviz/nviz_toc}}: manual de referencia de NVIZ.&lt;br /&gt;
* {{cmd|d.nviz}}: página de ayuda del módulo (para dibujar rutas de vuelo para animaciones).&lt;br /&gt;
* {{cmd|m.nviz.image}}: un módulo para renderizar una escena NVIZ directamente desde la línea de comandos.&lt;br /&gt;
* {{AddonCmd|d.anaglyph|version=6}}: un complemento para crear [[Análisis estereográficos]] en formato PNG usando NVIZ.&lt;br /&gt;
* [[Help with 3D]]: página de wiki.&lt;br /&gt;
* Cómo hacer [[Movies]] con NVIZ.&lt;br /&gt;
* [[wxNVIZ]]: NVIZ reescrito y mejorado.&lt;br /&gt;
&lt;br /&gt;
[[Category:NVIZ]]&lt;br /&gt;
[[Category:Visualization]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23316</id>
		<title>Atmospheric correction/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23316"/>
		<updated>2016-07-28T14:47:55Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vea también la wiki de [[LANDSAT]].&lt;br /&gt;
&lt;br /&gt;
'''Propósitos de este tutorial:'''&lt;br /&gt;
&lt;br /&gt;
* Transformar una imagen Landsat ETM+ de los valores de Números Digitales (DN) a valores de radiancia.&lt;br /&gt;
* Realizar una corrección atmosférica de las imágenes Landsat usando el módulo {{cmd|i.atcorr}} en GRASS GIS y convertir la radiancia a reflectancia.&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
Los pasos estándar de pre procesamiento de imágenes satelitales son:&lt;br /&gt;
&lt;br /&gt;
# Convertir los '''Números Digitales''' (DN) a '''Radiancia por encima de la atmósfera''' (ToAR).&lt;br /&gt;
#* para las imágenes Landsat, aplicar la ecuación de abajo o usar el módulo {{cmd|i.landsat.toar}}.&lt;br /&gt;
#* Los Números Digitales --en realidad valores de pixel-- son el resultado de la cantidad cuantificada de energía obervada y medida en el sensor.&lt;br /&gt;
#* El módulo {{cmd|i.landsat.toar}} soporta todos los sensores Landsat incluyendo MSS, TM y ETM+.&lt;br /&gt;
# Para convertir '''Radiancia por encima de la atmósfera''' a '''Reflectancia por encima de la copa''' (ToCR) → use el módulo {{cmd|i.atcorr}}.&lt;br /&gt;
#* La conversión a ''Reflectancias'' intenta medir y eliminar los efectos atmosféricos, proceso denominado ''corrección atmosférica''.&lt;br /&gt;
#* La ''corrección atmosférica'' es un tema muy común de discusión en Sensores Remotos. Sin embargo, dependiendo de la calidad de los datos, puede ser un proceso complejo que no siempre da el un buen resultado, en cuando a la exactitud de los siguientes pasos (ej. segmentación o clasificación de las imágenes).&lt;br /&gt;
&lt;br /&gt;
'''Recuerde''' revisar si las zonas con agua están representadas por valores &amp;lt;code&amp;gt;&amp;gt;0&amp;lt;/code&amp;gt;, dado que la reflectancia siempre es positiva. Si encuentra un valor negativo en la reflectacia tiene un problemilla. Esto significa que las ecuaciones usadas para la transformación, no corresponden a la imagen procesada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un resumen de las opciones que tiene para &amp;quot;corregir&amp;quot; las reflectancias espectrales:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;+------------------------------------------------------------------------------+&lt;br /&gt;
 |                                                                              |&lt;br /&gt;
 | Números digitales                                                            |&lt;br /&gt;
 |        |                                                                     |&lt;br /&gt;
 |  +-----v-----+                                                               |&lt;br /&gt;
 |  |  i.*.toar | ---&amp;gt; Reflectancia                                             |&lt;br /&gt;
 |  +-----+-----+     (no corregida)~~~(métodos DOS)--+                         |&lt;br /&gt;
 |        |                 +                         |     Reflectancia        |&lt;br /&gt;
 |    (bandera -r)     (bandera -r)                   +--&amp;gt;   &amp;quot;Corregida&amp;quot;        |&lt;br /&gt;
 |        |                 |                         |                         |&lt;br /&gt;
 |        v           +-----v----+                    |                         |&lt;br /&gt;
 |     Radiancia -----&amp;gt; i.atcorr +--------------------+                         |&lt;br /&gt;
 |                    +----------+                                              |&lt;br /&gt;
 |                                                                              |&lt;br /&gt;
 +------------------------------------------------------------------------------+&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requisitos ==&lt;br /&gt;
&lt;br /&gt;
* GRASS 6.4.0 o superior&lt;br /&gt;
* Conjunto de datos de muestra de North Carolina (NC) (localización): https://grass.osgeo.org/download/sample-data/&lt;br /&gt;
&lt;br /&gt;
Luego de bajar los datos, debe descomprimirlos y ponerlos en su base de datos SIG. Cuando inicie GRASS GIS, seleccione esta base de datos, abra la lcalización ´nc_spm_08´ como Localización, y ´PERMANENT´ como Directorio de mapas.&lt;br /&gt;
&lt;br /&gt;
== Calculando valores de radiancia ==&lt;br /&gt;
&lt;br /&gt;
El conjunto de datos de muestra de NC, entre otras cosas contiene imágenes de Landsat ETM+ del 24 de mayo de 2002. Cada pixel de esta imagen contiene un número digital (DN) o valor de gris. Para poder hacer los cálculos con las imágenes satelitales, o comparar valores entre diferentes sensores, es necesario covertir estos valores a radiancias o reflectancias. Las fórmulas para hacer esta conversión para las imágenes de Landsat se describen a continuación (o use el módulo {{cmd|i.landsat.toar}}).&lt;br /&gt;
&lt;br /&gt;
La conversión de Número digitales a radiancias por encima de la atmósfera se hace de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L\lambda = \frac{L_{MAX}λ - L_{MIN}λ}{QCAL_{MAX} - QCAL_{MIN}} * (QCAL - QCAL_{MIN}) + L_{MIN}\lambda&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;donde:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;Lλ&amp;lt;/math&amp;gt; - Radiancia espectral en la apertura del sensor en watts/metro cuadrado * ster * μm), esta es la radiancia aparente registrada por el sensor;&lt;br /&gt;
* &amp;lt;math&amp;gt;QCAL&amp;lt;/math&amp;gt; - el valor del pixel calibrado en  &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt;;&lt;br /&gt;
* &amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt; - la radiancia espectral que es escalada a &amp;lt;math&amp;gt;QCALMIN&amp;lt;/math&amp;gt; en watts/(metro cuadrado * ster * μm);&lt;br /&gt;
* &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt; - la radiancia espectral que es escalada a &amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt; en watts/(metro cuadrado * ster * μm);&lt;br /&gt;
* &amp;lt;math&amp;gt;QCALMINM&amp;lt;/math&amp;gt; - el valor mínimo cuantificado de pixel (correspondiente a &amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt;) en &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; ;&lt;br /&gt;
* &amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt; - el valor mínimo cuantificado de pixel (correspondiente a &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt;) en &amp;lt;math&amp;gt;DN=255&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt; son las radiancias relacionadas a los valores máximos y mínimos de los números digitales &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt;, y son reportados en el archivo de metadatos de la imagen, o en la tabla 1. La ganancia superior e inferior también se reporta en el archivo de metadatos de cada imagen. El valor mínimo del &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;QCALMIN&amp;lt;/math&amp;gt;) es 1 para imágenes Landsat ETM+ (1), y el máximo (&amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt;) es de 255. &amp;lt;math&amp;gt;QCAL&amp;lt;/math&amp;gt; es el &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; para cada pixel independiente en la imagen Landsat.&lt;br /&gt;
&lt;br /&gt;
Accesando los metadatos:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.info}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;lsat7_2002_xx&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por debajo de ´coments´, se da el valor míimo y máxmio de la radiancia para cada banda (LMAX y LMIN).&lt;br /&gt;
&lt;br /&gt;
Los usuarios más experimentados puede usar esto para obtener una salida legible (ej. para el canal 1):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;CHAN=1&amp;lt;/source&amp;gt;&lt;br /&gt;
 {{cmd|r.info}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;lsat7_2002_${CHAN}0 -h | tr '\n' ' '  | sed 's+ ++g' | tr ':' '\n' | grep &amp;quot;LMIN_BAND${CHAN}\|LMAX_BAND${CHAN}&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La conversión a radiancia (aquí se hace solamente para la banda 1, para las otras bandas, los números en itálicas tienen que ser reemplazados por valores adecuados):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.region}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;rast=lsat7_2002_10 -p&amp;lt;/source&amp;gt;&lt;br /&gt;
 {{cmd|r.mapcalc}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;&amp;quot;lsat7_2002_10_rad=((''191.6'' - (''-6.2'')) / (255.0 - 1.0)) * (lsat7_2002_10 - 1.0) + (''-6.2'')&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para cálculos más rápidos, usar un MDE de enteros:&lt;br /&gt;
&lt;br /&gt;
  {{cmd|r.mapcalc}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;&amp;quot;elev_int = round(elevation)&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Encontrar la elevación promedio para iniciar los cálculos (necesario para el archivo 'icnd' que se muestra abajo):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.univar}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;elev_int&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Estimando el tiempo de sobrevuelo ==&lt;br /&gt;
Este valor es necesario para el archivo de control. Para más detalles, vea la wikipedia en [http://en.wikipedia.org/wiki/Decimal_time#Scientific_decimal_time Scientific decimal time].&lt;br /&gt;
En caso de que este parámetro no esté reportado en el archivo de metadatos, hay dos maneras de obtenerlo.&lt;br /&gt;
&lt;br /&gt;
=== Desde la posición del sol ===&lt;br /&gt;
&lt;br /&gt;
El tiempo de sobrevuelo del satélite puede ser estimado de manera precisa por la posición del sol reportada por los metadatos, usando el módulo {{cmd|r.sunmask}}.&lt;br /&gt;
El  [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/2002/p016r035_7x20020524.met.gz archivo de metadatos] para el siguiente ejemplo contiene: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;SUN_AZIMUTH = 120.8810347, SUN_ELEVATION = 64.7730999&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# de manera iterativa cambiar la hora y minuto para obtener un buen resultado, es necesario corregir la zona horaria:&lt;br /&gt;
 {{cmd|r.sunmask}}  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-s elev=elevation out=dummy year=2002 month=5 day=24 hour=10 min=42 sec=7 timezone=-5&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando reporta:&lt;br /&gt;
&lt;br /&gt;
 Solar position: sun azimuth: 121.342461, sun angle above horz.(refraction corrected): 65.396652&lt;br /&gt;
&lt;br /&gt;
El tiempo local de sobrevuelo resultante es &amp;lt;code&amp;gt;10:42:07&amp;lt;/code&amp;gt; que corresponde a &amp;lt;code&amp;gt;15:42&amp;lt;/code&amp;gt; en GMT, que corresponde a  &amp;lt;code&amp;gt;15.70&amp;lt;/code&amp;gt; en horas GMT decimales (minutos decimales: &amp;lt;math&amp;gt;42 * 100 / 60&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== A partir de la herramienta web de la NASA ===&lt;br /&gt;
&lt;br /&gt;
El [http://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi NASA LaRC Satellite Overpass Predictor] puede calcular el tiempo de sobrevuelo del satélite a partir de la ''fecha de adquisición'' y las ''coordenadas centrales de la escena''. El [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/2002/p016r035_7x20020524.met.gz archivo de metadatos] para el siguiente ejemplo contiene: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;ACQUISITION_DATE = 2002-05-24, SCENE_CENTER_LAT = +36.0512847, SCENE_CENTER_LON = -79.3280820&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Seleccione la zona del mundo en y de clic en &amp;lt;code&amp;gt;Go &amp;gt;&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Ingrese las coordenadas Lat/Long (grados decimales, sin signo ''más'' pero sí con el signo ''menos'')&lt;br /&gt;
# Seleccione el satélite adecuado&lt;br /&gt;
# Ingrese la fecha de adquisición&lt;br /&gt;
# ''Opcional:'' seleccione &amp;quot;Day&amp;quot; o &amp;quot;Night&amp;quot; para restingir el cálculo a sobrevuelos de día o de noche (locales) del satélite&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:'' calculo para la escena Landsata de NC: vea aquí [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/landsat_overpass_time_list_NC.txt here].&lt;br /&gt;
&lt;br /&gt;
--- Solamente para LANDSAT ---&lt;br /&gt;
&lt;br /&gt;
El USGS provee la página web [http://landsat.usgs.gov/consumer.php Landsat Bulk Metadata Service] de donde es posible extraer los metadatos (incluyendo el tiempo de sobrevuelo) para todas las misiones Landsat.&lt;br /&gt;
&lt;br /&gt;
== Corrección atmosférica ==&lt;br /&gt;
&lt;br /&gt;
Los valores de radiancia pueden ser convertidos a reflectancias al realizar la corrección atmosférica aplicando el algoritmo &amp;lt;math&amp;gt;6S&amp;lt;/math&amp;gt;. El algoritmo transformará los valores de Radiancia por encima de la atmósfera a valores de Reflectancia por encima de la copa (Top-of-canopy), usando la información del contenido de aerosoles y la composición atmosférica del momento en que la imagen fue tomada. Lo que sigue describe el método para usar este algoritmo en GRASS GIS. De nuevo, solamente se hacen los cálculos para la banda 1, los número(s) a cambiar para otras bandas espectrales, se muestran en &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt;. El archivo de control &amp;lt;code&amp;gt;icnd_lsat1.txt&amp;lt;/code&amp;gt; consiste en los siguientes parámetros, y es escrito en un editor de texto:&lt;br /&gt;
&lt;br /&gt;
 8                          # indica que es una imagen ETM+&lt;br /&gt;
 05 24 15.67 -78.691 35.749 # imagen tomada el 24 de mayo, a las 15:42 GMT en decimales; el centro de la imagen está en  78.691°O y 35.749°N &lt;br /&gt;
 2                          # the midlatitude summer atmospheric model&lt;br /&gt;
 1                          # el modelo de aerosoles continentales&lt;br /&gt;
 50                         # la visibilidad para el modelo de aerosoles [km]&lt;br /&gt;
 -0.110                     # el terreno está 110 metros por encima del nivel del mar [km] * -1&lt;br /&gt;
 -1000                      # imagen tomada de un sensor de satélite (1000)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;61&amp;lt;/span&amp;gt;                         # banda espectral, aquí la 1: azul&lt;br /&gt;
&lt;br /&gt;
De manera alternativa, en caso de que no se tenga un mapa de visibilidad, se puede usar una estimación de Profundidad óptica de aerosoles (Aerosol Optical Depth estimation) a 550nm. El archivo de control debe ser modificado de acuerdo a esto, ingresando 0 para la visibilidad, y en la siguiente línea, ingresar la profundidad óptica de aerosoles. El archivo de control debe ser estructurado de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 8                          # indica que es una imagen ETM+&lt;br /&gt;
 05 24 15.67 -78.691 35.749 # imagen tomada el 24 de mayo, a las 15:42 GMT en decimales; el centro de la imagen está en  78.691°O y 35.749°N &lt;br /&gt;
 2                          # the midlatitude summer atmospheric model&lt;br /&gt;
 1                          # el modelo de aerosoles continentales&lt;br /&gt;
 0                          # establece visibilidad = 0&lt;br /&gt;
 0.112                      # ej. profundidad óptica de aerosoles&lt;br /&gt;
 -0.110                     # el terreno está 110 metros por encima del nivel del mar [km] * -1&lt;br /&gt;
 -1000                      # imagen tomada de un sensor de satélite (1000)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;61&amp;lt;/span&amp;gt;                         # banda espectral, aquí la 1: azul&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo se usa después en el módulo {{cmd|i.atcorr}}:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|i.atcorr}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-a -o iimg=lsat7_2002_10_rad ialt=elev_int icnd=icdn_lsat1.txt oimg=lsat7_2002_10_atcorr&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o, usando GRASS 7.x:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|i.atcorr}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-a input=lsat7_2002_10_rad elevation=elev_int parameters=icdn_lsat1.txt output=lsat7_2002_10_atcorr&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde:&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''-a'''&amp;lt;/tt&amp;gt;   se refiere a una imagen Landsat tomada luego de julio 2000&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''-o'''&amp;lt;/tt&amp;gt;   activa la aceleración caché (solamente GRASS 6.x)&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''iimg/input'''&amp;lt;/tt&amp;gt; es la imagen a corregir&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''ialt/elevation'''&amp;lt;/tt&amp;gt; es el mapa de altitud que sobreescribe el valor inicial de 110 metros&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''icnd/parameters'''&amp;lt;/tt&amp;gt; es la ruta al archivo  icnd.txt&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''oimg/output'''&amp;lt;/tt&amp;gt; es el nombre de la imagen de salida&lt;br /&gt;
&lt;br /&gt;
Se puede encontrar información detallada en el manual de {{cmd|i.atcorr}}.&lt;br /&gt;
&lt;br /&gt;
'''Nota,''' {{cmd|i.atcorr}} no se quejará si el modelo de elevación definido (parámetro &amp;lt;code&amp;gt;elevation=&amp;lt;/code&amp;gt;) no cubre toda la extensión de la escena Landsat a que se sujeta el proceso -- dará valores NaN (Not a Number). ''[Maybe this can be requested as an enhancement?]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fuentes para estimaciones de profundidad óptica de aerosoles  ==&lt;br /&gt;
&lt;br /&gt;
* [http://aeronet.gsfc.nasa.gov AERONET] - provee observaciones distribuidas globalmente de profundidad óptica de aerosoles (AOD), productos de inversión (inversion products), y agua precipitable en diversos regímenes de aerosoles.&lt;br /&gt;
* Producto MODIS MOD08 [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=08 MOD08 - Gridded Atmospheric Product].&lt;br /&gt;
** Los productos MOD08 diarios pueden ser descargados directamente a partir del servidor FTP de la NASA: [ftp://ladsweb.nascom.nasa.gov/allData/51/MOD08_D3/ '''ftp://ladsweb.nascom.nasa.gov/allData/51/MOD08_D3/'''].&lt;br /&gt;
** Están disponibles las especificaciones del Archivo y capa, por ejemplo, en [http://www.atmos.washington.edu/~robwood/modis/filespecs/MOD08_D3.CDL.fs MODIS HDF File Specification MOD08_D3: MODIS Level 3 Daily Atmosphere Gridded Product]&lt;br /&gt;
** La capa '''Optical_Depth_Land_And_Ocean_Mean''', descrita como  ''Aerosol Optical Thickness at 0.55 microns for both Ocean (best) and Land (corrected): Mean'', probablemente pueda ser usada como entrada para {{cmd|i.atcorr}}. '''Nota,''' los valores de la capa deben ser escalados usando el factor de escalamiento ''Optical_Depth_Land_And_Ocean_Mean:scale_factor ='' '''0.001d''', como se reporta en las especificaciones.&lt;br /&gt;
* [http://www.cesbio.ups-tlse.fr/multitemp/?p=1710 How to estimate Aerosol Optical Thickness]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== TοDο ===&lt;br /&gt;
* entender si el  [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=04 MODIS Aerosol Product (MOD04)] could be useful to estimate the visibility for the aerosol model.&lt;br /&gt;
* provide an example on using [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=08 MODIS Gridded Atmospheric Product (MOD08)].&lt;br /&gt;
* explain if it is possible and how to use ''Rayleigh Optical Depths estimated at 0km altitude for six different atmosphere models'' from the paper [http://www.opticsinfobase.org/ao/abstract.cfm?uri=ao-34-15-2765  Rayleigh-scattering calculations for the terrestrial atmosphere] by Anthony Buchholz, table 4, page 2270 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
&lt;br /&gt;
=== Algoritmo 6S ===&lt;br /&gt;
&lt;br /&gt;
* [http://6s.ltdri.org 6S Web site]&lt;br /&gt;
* [http://modis-sr.ltdri.org/ Land Surface Reflectance Science Computing Facility website - 6S]&lt;br /&gt;
&lt;br /&gt;
=== Radiancia/reflectacia espectral ===&lt;br /&gt;
&lt;br /&gt;
* [http://landsat.usgs.gov/how_is_radiance_calculated.php How is radiance calculated?], question on USGS' [http://landsat.usgs.gov/tools_faq.php Landsat Missions - Frequently Asked Questions]&lt;br /&gt;
* (1)  http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html&lt;br /&gt;
* (2)  http://landsat.usgs.gov/documents/L5TM_postcal_v11.pdf&lt;br /&gt;
&lt;br /&gt;
=== Whitepapers ===&lt;br /&gt;
&lt;br /&gt;
* Various [http://apollomapping.com/about-us/whitepapers Whitepapers] about conversion and atmospheric correction of High Resolution Satellite Imagery&lt;br /&gt;
*  Song, C., Woodcock, C.E., Seto, K.C., Lenney, M.P., Macomber, S.A., 2001. Classification and Change Detection Using Landsat TM Data: When and How to Correct Atmospheric Effects? Remote Sensing of Environment 75, 230-244. [http://www.unc.edu/courses/2008spring/geog/577/001/www/Song01_RSE.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas on-line relacionadas ===&lt;br /&gt;
&lt;br /&gt;
* [http://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi NASA LaRC Satellite Overpass Predictor]&lt;br /&gt;
* [http://landsat.usgs.gov/consumer.php Landsat Bulk Metadata Service]&lt;br /&gt;
* NASA's [http://atmcorr.gsfc.nasa.gov/ Atmospheric Correction Parameter Calculator]&lt;br /&gt;
&lt;br /&gt;
=== Cómo añadir sensores a i.atcorr ===&lt;br /&gt;
&lt;br /&gt;
Cómo añadir sensores a {{cmd|i.atcorr}}:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
* ver http://trac.osgeo.org/grass/browser/grass/trunk/imagery/i.atcorr/README&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Image processing]]&lt;br /&gt;
[[Category: Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23315</id>
		<title>Atmospheric correction/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23315"/>
		<updated>2016-07-28T14:46:24Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: /* Introducción */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vea también la wiki de [[LANDSAT]].&lt;br /&gt;
&lt;br /&gt;
'''Propósitos de este tutorial:'''&lt;br /&gt;
&lt;br /&gt;
* Transformar una imagen Landsat ETM+ de los valores de Números Digitales (DN) a valores de radiancia.&lt;br /&gt;
* Realizar una corrección atmosférica de las imágenes Landsat usando el módulo {{cmd|i.atcorr}} en GRASS GIS y convertir la radiancia a reflectancia.&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
Los pasos estándar de pre procesamiento de imágenes satelitales son:&lt;br /&gt;
&lt;br /&gt;
# Convertir los '''Números Digitales''' (DN) a '''Radiancia por encima de la atmósfera''' (ToAR).&lt;br /&gt;
#* para las imágenes Landsat, aplicar la ecuación de abajo o usar el módulo {{cmd|i.landsat.toar}}.&lt;br /&gt;
#* Los Números Digitales --en realidad valores de pixel-- son el resultado de la cantidad cuantificada de energía obervada y medida en el sensor.&lt;br /&gt;
#* El módulo {{cmd|i.landsat.toar}} soporta todos los sensores Landsat incluyendo MSS, TM y ETM+.&lt;br /&gt;
# Para convertir '''Radiancia por encima de la atmósfera''' a '''Reflectancia por encima de la copa''' (ToCR) → use el módulo {{cmd|i.atcorr}}.&lt;br /&gt;
#* La conversión a ''Reflectancias'' intenta medir y eliminar los efectos atmosféricos, proceso denominado ''corrección atmosférica''.&lt;br /&gt;
#* La ''corrección atmosférica'' es un tema muy común de discusión en Sensores Remotos. Sin embargo, dependiendo de la calidad de los datos, puede ser un proceso complejo que no siempre da el un buen resultado, en cuando a la exactitud de los siguientes pasos (ej. segmentación o clasificación de las imágenes).&lt;br /&gt;
&lt;br /&gt;
'''Recuerde''' revisar si las zonas con agua están representadas por valores &amp;lt;code&amp;gt;&amp;gt;0&amp;lt;/code&amp;gt;, dado que la reflectancia siempre es positiva. Si encuentra un valor negativo en la reflectacia tiene un problemilla. Esto significa que las ecuaciones usadas para la transformación, no corresponden a la imagen procesada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un resumen de las opciones que tiene para &amp;quot;corregir&amp;quot; las reflectancias espectrales:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;+------------------------------------------------------------------------------+&lt;br /&gt;
 |                                                                              |&lt;br /&gt;
 | Números digitales                                                            |&lt;br /&gt;
 |        |                                                                     |&lt;br /&gt;
 |  +-----v-----+                                                               |&lt;br /&gt;
 |  |  i.*.toar | ---&amp;gt; Reflectancia                                             |&lt;br /&gt;
 |  +-----+-----+     (no corregida)~~~(métodos DOS)--+                         |&lt;br /&gt;
 |        |                 +                         |     Reflectancia        |&lt;br /&gt;
 |    (bandera -r)     (bandera -r)                   +--&amp;gt;   &amp;quot;Corregida&amp;quot;        |&lt;br /&gt;
 |        |                 |                         |                         |&lt;br /&gt;
 |        v           +-----v----+                    |                         |&lt;br /&gt;
 |     Radiancia -----&amp;gt; i.atcorr +--------------------+                         |&lt;br /&gt;
 |                    +----------+                                              |&lt;br /&gt;
 |                                                                              |&lt;br /&gt;
 +------------------------------------------------------------------------------+&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requisitos ==&lt;br /&gt;
&lt;br /&gt;
* GRASS 6.4.0 o superior&lt;br /&gt;
* Conjunto de datos de muestra de North Carolina (NC) (localización): https://grass.osgeo.org/download/sample-data/&lt;br /&gt;
&lt;br /&gt;
Luego de bajar los datos, debe descomprimirlos y ponerlos en su base de datos SIG. Cuando inicie GRASS GIS, seleccione esta base de datos, abra la lcalización ´nc_spm_08´ como Localización, y ´PERMANENT´ como Directorio de mapas.&lt;br /&gt;
&lt;br /&gt;
== Calculando valores de radiancia ==&lt;br /&gt;
&lt;br /&gt;
El conjunto de datos de muestra de NC, entre otras cosas contiene imágenes de Landsat ETM+ del 24 de mayo de 2002. Cada pixel de esta imagen contiene un número digital (DN) o valor de gris. Para poder hacer los cálculos con las imágenes satelitales, o comparar valores entre diferentes sensores, es necesario covertir estos valores a radiancias o reflectancias. Las fórmulas para hacer esta conversión para las imágenes de Landsat se describen a continuación (o use el módulo {{cmd|i.landsat.toar}}).&lt;br /&gt;
&lt;br /&gt;
La conversión de Número digitales a radiancias por encima de la atmósfera se hace de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L\lambda = \frac{L_{MAX}λ - L_{MIN}λ}{QCAL_{MAX} - QCAL_{MIN}} * (QCAL - QCAL_{MIN}) + L_{MIN}\lambda&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;donde:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;Lλ&amp;lt;/math&amp;gt; - Radiancia espectral en la apertura del sensor en watts/metro cuadrado * ster * μm), esta es la radiancia aparente registrada por el sensor;&lt;br /&gt;
* &amp;lt;math&amp;gt;QCAL&amp;lt;/math&amp;gt; - el valor del pixel calibrado en  &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt;;&lt;br /&gt;
* &amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt; - la radiancia espectral que es escalada a &amp;lt;math&amp;gt;QCALMIN&amp;lt;/math&amp;gt; en watts/(metro cuadrado * ster * μm);&lt;br /&gt;
* &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt; - la radiancia espectral que es escalada a &amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt; en watts/(metro cuadrado * ster * μm);&lt;br /&gt;
* &amp;lt;math&amp;gt;QCALMINM&amp;lt;/math&amp;gt; - el valor mínimo cuantificado de pixel (correspondiente a &amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt;) en &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; ;&lt;br /&gt;
* &amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt; - el valor mínimo cuantificado de pixel (correspondiente a &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt;) en &amp;lt;math&amp;gt;DN=255&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt; son las radiancias relacionadas a los valores máximos y mínimos de los números digitales &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt;, y son reportados en el archivo de metadatos de la imagen, o en la tabla 1. La ganancia superior e inferior también se reporta en el archivo de metadatos de cada imagen. El valor mínimo del &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;QCALMIN&amp;lt;/math&amp;gt;) es 1 para imágenes Landsat ETM+ (1), y el máximo (&amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt;) es de 255. &amp;lt;math&amp;gt;QCAL&amp;lt;/math&amp;gt; es el &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; para cada pixel independiente en la imagen Landsat.&lt;br /&gt;
&lt;br /&gt;
Accesando los metadatos:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.info}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;lsat7_2002_xx&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por debajo de ´coments´, se da el valor míimo y máxmio de la radiancia para cada banda (LMAX y LMIN).&lt;br /&gt;
&lt;br /&gt;
Los usuarios más experimentados puede usar esto para obtener una salida legible (ej. para el canal 1):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;CHAN=1&amp;lt;/source&amp;gt;&lt;br /&gt;
 {{cmd|r.info}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;lsat7_2002_${CHAN}0 -h | tr '\n' ' '  | sed 's+ ++g' | tr ':' '\n' | grep &amp;quot;LMIN_BAND${CHAN}\|LMAX_BAND${CHAN}&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La conversión a radiancia (aquí se hace solamente para la banda 1, para las otras bandas, los números en itálicas tienen que ser reemplazados por valores adecuados):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.region}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;rast=lsat7_2002_10 -p&amp;lt;/source&amp;gt;&lt;br /&gt;
 {{cmd|r.mapcalc}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;&amp;quot;lsat7_2002_10_rad=((''191.6'' - (''-6.2'')) / (255.0 - 1.0)) * (lsat7_2002_10 - 1.0) + (''-6.2'')&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para cálculos más rápidos, usar un MDE de enteros:&lt;br /&gt;
&lt;br /&gt;
  {{cmd|r.mapcalc}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;&amp;quot;elev_int = round(elevation)&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Encontrar la elevación promedio para iniciar los cálculos (necesario para el archivo 'icnd' que se muestra abajo):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.univar}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;elev_int&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Estimando el tiempo de sobrevuelo ==&lt;br /&gt;
Este valor es necesario para el archivo de control. Para más detalles, vea la wikipedia en [http://en.wikipedia.org/wiki/Decimal_time#Scientific_decimal_time Scientific decimal time].&lt;br /&gt;
En caso de que este parámetro no esté reportado en el archivo de metadatos, hay dos maneras de obtenerlo.&lt;br /&gt;
&lt;br /&gt;
=== Desde la posición del sol ===&lt;br /&gt;
&lt;br /&gt;
El tiempo de sobrevuelo del satélite puede ser estimado de manera precisa por la posición del sol reportada por los metadatos, usando el módulo {{cmd|r.sunmask}}.&lt;br /&gt;
El  [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/2002/p016r035_7x20020524.met.gz archivo de metadatos] para el siguiente ejemplo contiene: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;SUN_AZIMUTH = 120.8810347, SUN_ELEVATION = 64.7730999&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# de manera iterativa cambiar la hora y minuto para obtener un buen resultado, es necesario corregir la zona horaria:&lt;br /&gt;
 {{cmd|r.sunmask}}  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-s elev=elevation out=dummy year=2002 month=5 day=24 hour=10 min=42 sec=7 timezone=-5&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando reporta:&lt;br /&gt;
&lt;br /&gt;
 Solar position: sun azimuth: 121.342461, sun angle above horz.(refraction corrected): 65.396652&lt;br /&gt;
&lt;br /&gt;
El tiempo local de sobrevuelo resultante es &amp;lt;code&amp;gt;10:42:07&amp;lt;/code&amp;gt; que corresponde a &amp;lt;code&amp;gt;15:42&amp;lt;/code&amp;gt; en GMT, que corresponde a  &amp;lt;code&amp;gt;15.70&amp;lt;/code&amp;gt; en horas GMT decimales (minutos decimales: &amp;lt;math&amp;gt;42 * 100 / 60&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== A partir de la herramienta web de la NASA ===&lt;br /&gt;
&lt;br /&gt;
El [http://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi NASA LaRC Satellite Overpass Predictor] puede calcular el tiempo de sobrevuelo del satélite a partir de la ''fecha de adquisición'' y las ''coordenadas centrales de la escena''. El [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/2002/p016r035_7x20020524.met.gz archivo de metadatos] para el siguiente ejemplo contiene: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;ACQUISITION_DATE = 2002-05-24, SCENE_CENTER_LAT = +36.0512847, SCENE_CENTER_LON = -79.3280820&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Seleccione la zona del mundo en y de clic en &amp;lt;code&amp;gt;Go &amp;gt;&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Ingrese las coordenadas Lat/Long (grados decimales, sin signo ''más'' pero sí con el signo ''menos'')&lt;br /&gt;
# Seleccione el satélite adecuado&lt;br /&gt;
# Ingrese la fecha de adquisición&lt;br /&gt;
# ''Opcional:'' seleccione &amp;quot;Day&amp;quot; o &amp;quot;Night&amp;quot; para restingir el cálculo a sobrevuelos de día o de noche (locales) del satélite&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:'' calculo para la escena Landsata de NC: vea aquí [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/landsat_overpass_time_list_NC.txt here].&lt;br /&gt;
&lt;br /&gt;
--- Solamente para LANDSAT ---&lt;br /&gt;
&lt;br /&gt;
El USGS provee la página web [http://landsat.usgs.gov/consumer.php Landsat Bulk Metadata Service] de donde es posible extraer los metadatos (incluyendo el tiempo de sobrevuelo) para todas las misiones Landsat.&lt;br /&gt;
&lt;br /&gt;
== Corrección atmosférica ==&lt;br /&gt;
&lt;br /&gt;
Los valores de radiancia pueden ser convertidos a reflectancias al realizar la corrección atmosférica aplicando el algoritmo &amp;lt;math&amp;gt;6S&amp;lt;/math&amp;gt;. El algoritmo transformará los valores de Radiancia por encima de la atmósfera a valores de Reflectancia por encima de la copa (Top-of-canopy), usando la información del contenido de aerosoles y la composición atmosférica del momento en que la imagen fue tomada. Lo que sigue describe el método para usar este algoritmo en GRASS GIS. De nuevo, solamente se hacen los cálculos para la banda 1, los número(s) a cambiar para otras bandas espectrales, se muestran en &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt;. El archivo de control &amp;lt;code&amp;gt;icnd_lsat1.txt&amp;lt;/code&amp;gt; consiste en los siguientes parámetros, y es escrito en un editor de texto:&lt;br /&gt;
&lt;br /&gt;
 8                          # indica que es una imagen ETM+&lt;br /&gt;
 05 24 15.67 -78.691 35.749 # imagen tomada el 24 de mayo, a las 15:42 GMT en decimales; el centro de la imagen está en  78.691°O y 35.749°N &lt;br /&gt;
 2                          # the midlatitude summer atmospheric model&lt;br /&gt;
 1                          # el modelo de aerosoles continentales&lt;br /&gt;
 50                         # la visibilidad para el modelo de aerosoles [km]&lt;br /&gt;
 -0.110                     # el terreno está 110 metros por encima del nivel del mar [km] * -1&lt;br /&gt;
 -1000                      # imagen tomada de un sensor de satélite (1000)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;61&amp;lt;/span&amp;gt;                         # banda espectral, aquí la 1: azul&lt;br /&gt;
&lt;br /&gt;
De manera alternativa, en caso de que no se tenga un mapa de visibilidad, se puede usar una estimación de Profundidad óptica de aerosoles (Aerosol Optical Depth estimation) a 550nm. El archivo de control debe ser modificado de acuerdo a esto, ingresando 0 para la visibilidad, y en la siguiente línea, ingresar la profundidad óptica de aerosoles. El archivo de control debe ser estructurado de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 8                          # indica que es una imagen ETM+&lt;br /&gt;
 05 24 15.67 -78.691 35.749 # imagen tomada el 24 de mayo, a las 15:42 GMT en decimales; el centro de la imagen está en  78.691°O y 35.749°N &lt;br /&gt;
 2                          # the midlatitude summer atmospheric model&lt;br /&gt;
 1                          # el modelo de aerosoles continentales&lt;br /&gt;
 0                          # establece visibilidad = 0&lt;br /&gt;
 0.112                      # ej. profundidad óptica de aerosoles&lt;br /&gt;
 -0.110                     # el terreno está 110 metros por encima del nivel del mar [km] * -1&lt;br /&gt;
 -1000                      # imagen tomada de un sensor de satélite (1000)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;61&amp;lt;/span&amp;gt;                         # banda espectral, aquí la 1: azul&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo se usa después en el módulo {{cmd|i.atcorr}}:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|i.atcorr}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-a -o iimg=lsat7_2002_10_rad ialt=elev_int icnd=icdn_lsat1.txt oimg=lsat7_2002_10_atcorr&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o, usando GRASS 7.x:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|i.atcorr}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-a input=lsat7_2002_10_rad elevation=elev_int parameters=icdn_lsat1.txt output=lsat7_2002_10_atcorr&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde:&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''-a'''&amp;lt;/tt&amp;gt;   se refiere a una imagen Landsat tomada luego de julio 2000&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''-o'''&amp;lt;/tt&amp;gt;   activa la aceleración caché (solamente GRASS 6.x)&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''iimg/input'''&amp;lt;/tt&amp;gt; es la imagen a corregir&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''ialt/elevation'''&amp;lt;/tt&amp;gt; es el mapa de altitud que sobreescribe el valor inicial de 110 metros&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''icnd/parameters'''&amp;lt;/tt&amp;gt; es la ruta al archivo  icnd.txt&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''oimg/output'''&amp;lt;/tt&amp;gt; es el nombre de la imagen de salida&lt;br /&gt;
&lt;br /&gt;
Se puede encontrar información detallada en el manual de {{cmd|i.atcorr}}.&lt;br /&gt;
&lt;br /&gt;
'''Nota,''' {{cmd|i.atcorr}} no se quejará si el modelo de elevación definido (parámetro &amp;lt;code&amp;gt;elevation=&amp;lt;/code&amp;gt;) no cubre toda la extensión de la escena Landsat a que se sujeta el proceso -- dará valores NaN (Not a Number). ''[Maybe this can be requested as an enhancement?]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fuentes para estimaciones de profundidad óptica de aerosoles  ==&lt;br /&gt;
&lt;br /&gt;
* [http://aeronet.gsfc.nasa.gov AERONET] - provee observaciones distribuidas globalmente de profundidad óptica de aerosoles (AOD), productos de inversión (inversion products), y agua precipitable en diversos regímenes de aerosoles.&lt;br /&gt;
* Producto MODIS MOD08 [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=08 MOD08 - Gridded Atmospheric Product].&lt;br /&gt;
** Los productos MOD08 diarios pueden ser descargados directamente a partir del servidor FTP de la NASA: [ftp://ladsweb.nascom.nasa.gov/allData/51/MOD08_D3/ '''ftp://ladsweb.nascom.nasa.gov/allData/51/MOD08_D3/'''].&lt;br /&gt;
** Están disponibles las especificaciones del Archivo y capa, por ejemplo, en [http://www.atmos.washington.edu/~robwood/modis/filespecs/MOD08_D3.CDL.fs MODIS HDF File Specification MOD08_D3: MODIS Level 3 Daily Atmosphere Gridded Product]&lt;br /&gt;
** La capa '''Optical_Depth_Land_And_Ocean_Mean''', descrita como  ''Aerosol Optical Thickness at 0.55 microns for both Ocean (best) and Land (corrected): Mean'', probablemente pueda ser usada como entrada para {{cmd|i.atcorr}}. '''Nota,''' los valores de la capa deben ser escalados usando el factor de escalamiento ''Optical_Depth_Land_And_Ocean_Mean:scale_factor ='' '''0.001d''', como se reporta en las especificaciones.&lt;br /&gt;
* [http://www.cesbio.ups-tlse.fr/multitemp/?p=1710 How to estimate Aerosol Optical Thickness]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== TοDο ===&lt;br /&gt;
* entender si el  [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=04 MODIS Aerosol Product (MOD04)] could be useful to estimate the visibility for the aerosol model.&lt;br /&gt;
* provide an example on using [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=08 MODIS Gridded Atmospheric Product (MOD08)].&lt;br /&gt;
* explain if it is possible and how to use ''Rayleigh Optical Depths estimated at 0km altitude for six different atmosphere models'' from the paper [http://www.opticsinfobase.org/ao/abstract.cfm?uri=ao-34-15-2765  Rayleigh-scattering calculations for the terrestrial atmosphere] by Anthony Buchholz, table 4, page 2270 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
&lt;br /&gt;
=== Algoritmo 6S ===&lt;br /&gt;
&lt;br /&gt;
* [http://6s.ltdri.org 6S Web site]&lt;br /&gt;
* [http://modis-sr.ltdri.org/ Land Surface Reflectance Science Computing Facility website - 6S]&lt;br /&gt;
&lt;br /&gt;
=== Radiancia/reflectacia espectral ===&lt;br /&gt;
&lt;br /&gt;
* [http://landsat.usgs.gov/how_is_radiance_calculated.php How is radiance calculated?], question on USGS' [http://landsat.usgs.gov/tools_faq.php Landsat Missions - Frequently Asked Questions]&lt;br /&gt;
* (1)  http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html&lt;br /&gt;
* (2)  http://landsat.usgs.gov/documents/L5TM_postcal_v11.pdf&lt;br /&gt;
&lt;br /&gt;
=== Whitepapers ===&lt;br /&gt;
&lt;br /&gt;
* Various [http://apollomapping.com/about-us/whitepapers Whitepapers] about conversion and atmospheric correction of High Resolution Satellite Imagery&lt;br /&gt;
*  Song, C., Woodcock, C.E., Seto, K.C., Lenney, M.P., Macomber, S.A., 2001. Classification and Change Detection Using Landsat TM Data: When and How to Correct Atmospheric Effects? Remote Sensing of Environment 75, 230-244. [http://www.unc.edu/courses/2008spring/geog/577/001/www/Song01_RSE.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas on-line relacionadas ===&lt;br /&gt;
&lt;br /&gt;
* [http://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi NASA LaRC Satellite Overpass Predictor]&lt;br /&gt;
* [http://landsat.usgs.gov/consumer.php Landsat Bulk Metadata Service]&lt;br /&gt;
* NASA's [http://atmcorr.gsfc.nasa.gov/ Atmospheric Correction Parameter Calculator]&lt;br /&gt;
&lt;br /&gt;
=== Cómo añadir sensores a i.atcorr ===&lt;br /&gt;
&lt;br /&gt;
Cómo añadir sensores a {{cmd|i.atcorr}}:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
* ver http://trac.osgeo.org/grass/browser/grass/trunk/imagery/i.atcorr/README&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Image processing]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23314</id>
		<title>Atmospheric correction/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23314"/>
		<updated>2016-07-28T14:45:21Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Atmospheric correction/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vea también la wiki de [[LANDSAT]].&lt;br /&gt;
&lt;br /&gt;
'''Propósitos de este tutorial:'''&lt;br /&gt;
&lt;br /&gt;
* Transformar una imagen Landsat ETM+ de los valores de Números Digitales (DN) a valores de radiancia.&lt;br /&gt;
* Realizar una corrección atmosférica de las imágenes Landsat usando el módulo {{cmd|i.atcorr}} en GRASS GIS y convertir la radiancia a reflectancia.&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
Los pasos estándar de pre procesamiento de imágenes satelitales son:&lt;br /&gt;
&lt;br /&gt;
# Convertir los '''Números Digitales''' (DN) a '''Radiancia por encima de la atmósfera''' (ToAR).&lt;br /&gt;
#* para las imágenes Landsat, aplicar la ecuación de abajo o usar el módulo {{cmd|i.landsat.toar}}.&lt;br /&gt;
#* Los Números Digitales --en realidad valores de pixel-- son el resultado de la cantidad cuantificada de energía obervada y medida en el sensor.&lt;br /&gt;
#* El módulo {{cmd|i.landsat.toar}} soporta todos los sensores Landsat incluyendo MSS, TM y ETM+.&lt;br /&gt;
# Para convertir '''Radiancia por encima de la atmósfera''' a '''Reflectancia por encima de la copa''' (ToCR) → use el módulo {{cmd|i.atcorr}}.&lt;br /&gt;
#* La conversión a ''Reflectancias'' intenta medir y eliminar los efectos atmosféricos, proceso denominado ''corrección atmosférica''.&lt;br /&gt;
#* La ''corrección atmosférica'' es un tema muy común de discusión en Sensores Remotos. Sin embargo, dependiendo de la calidad de los datos, puede ser un proceso complejo que no siempre da el un buen resultado, en cuando a la exactitud de los siguientes pasos (ej. segmentación o clasificación de las imágenes).&lt;br /&gt;
&lt;br /&gt;
'''Recuerde''' revisar si las zonas con agua están representadas por valores &amp;lt;code&amp;gt;&amp;gt;0&amp;lt;/code&amp;gt;, dado que la reflectancia siempre es positiva. Si encuentra un valor negativo en la reflectacia tiene un problemilla. Esto significa que las ecuaciones usadas para la transformación, no corresponden a la imagen procesada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un resumen de las opciones que tiene para &amp;quot;corregir&amp;quot; las reflectancias espectrales:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;+------------------------------------------------------------------------------+&lt;br /&gt;
 |                                                                              |&lt;br /&gt;
 | Números digitales                                                            |&lt;br /&gt;
 |        |                                                                     |&lt;br /&gt;
 |  +-----v-----+                                                               |&lt;br /&gt;
 |  |  i.*.toar | ---&amp;gt; Reflectancia                                             |&lt;br /&gt;
 |  +-----+-----+     (no corregida)~~~(métodos DOS)--+                         |&lt;br /&gt;
 |        |                 +                        |     Reflectancia         |&lt;br /&gt;
 |    (bandera -r)     (bandera -r)                  +--&amp;gt; &amp;quot;Corregida&amp;quot;           |&lt;br /&gt;
 |        |                 |                        |                          |&lt;br /&gt;
 |        v           +-----v----+                   |                          |&lt;br /&gt;
 |     Radiancia -----&amp;gt; i.atcorr +-------------------+                          |&lt;br /&gt;
 |                    +----------+                                              |&lt;br /&gt;
 |                                                                              |&lt;br /&gt;
 +------------------------------------------------------------------------------+&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requisitos ==&lt;br /&gt;
&lt;br /&gt;
* GRASS 6.4.0 o superior&lt;br /&gt;
* Conjunto de datos de muestra de North Carolina (NC) (localización): https://grass.osgeo.org/download/sample-data/&lt;br /&gt;
&lt;br /&gt;
Luego de bajar los datos, debe descomprimirlos y ponerlos en su base de datos SIG. Cuando inicie GRASS GIS, seleccione esta base de datos, abra la lcalización ´nc_spm_08´ como Localización, y ´PERMANENT´ como Directorio de mapas.&lt;br /&gt;
&lt;br /&gt;
== Calculando valores de radiancia ==&lt;br /&gt;
&lt;br /&gt;
El conjunto de datos de muestra de NC, entre otras cosas contiene imágenes de Landsat ETM+ del 24 de mayo de 2002. Cada pixel de esta imagen contiene un número digital (DN) o valor de gris. Para poder hacer los cálculos con las imágenes satelitales, o comparar valores entre diferentes sensores, es necesario covertir estos valores a radiancias o reflectancias. Las fórmulas para hacer esta conversión para las imágenes de Landsat se describen a continuación (o use el módulo {{cmd|i.landsat.toar}}).&lt;br /&gt;
&lt;br /&gt;
La conversión de Número digitales a radiancias por encima de la atmósfera se hace de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L\lambda = \frac{L_{MAX}λ - L_{MIN}λ}{QCAL_{MAX} - QCAL_{MIN}} * (QCAL - QCAL_{MIN}) + L_{MIN}\lambda&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;donde:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;Lλ&amp;lt;/math&amp;gt; - Radiancia espectral en la apertura del sensor en watts/metro cuadrado * ster * μm), esta es la radiancia aparente registrada por el sensor;&lt;br /&gt;
* &amp;lt;math&amp;gt;QCAL&amp;lt;/math&amp;gt; - el valor del pixel calibrado en  &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt;;&lt;br /&gt;
* &amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt; - la radiancia espectral que es escalada a &amp;lt;math&amp;gt;QCALMIN&amp;lt;/math&amp;gt; en watts/(metro cuadrado * ster * μm);&lt;br /&gt;
* &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt; - la radiancia espectral que es escalada a &amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt; en watts/(metro cuadrado * ster * μm);&lt;br /&gt;
* &amp;lt;math&amp;gt;QCALMINM&amp;lt;/math&amp;gt; - el valor mínimo cuantificado de pixel (correspondiente a &amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt;) en &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; ;&lt;br /&gt;
* &amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt; - el valor mínimo cuantificado de pixel (correspondiente a &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt;) en &amp;lt;math&amp;gt;DN=255&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;LMINλ&amp;lt;/math&amp;gt; y &amp;lt;math&amp;gt;LMAXλ&amp;lt;/math&amp;gt; son las radiancias relacionadas a los valores máximos y mínimos de los números digitales &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt;, y son reportados en el archivo de metadatos de la imagen, o en la tabla 1. La ganancia superior e inferior también se reporta en el archivo de metadatos de cada imagen. El valor mínimo del &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;QCALMIN&amp;lt;/math&amp;gt;) es 1 para imágenes Landsat ETM+ (1), y el máximo (&amp;lt;math&amp;gt;QCALMAX&amp;lt;/math&amp;gt;) es de 255. &amp;lt;math&amp;gt;QCAL&amp;lt;/math&amp;gt; es el &amp;lt;math&amp;gt;DN&amp;lt;/math&amp;gt; para cada pixel independiente en la imagen Landsat.&lt;br /&gt;
&lt;br /&gt;
Accesando los metadatos:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.info}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;lsat7_2002_xx&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por debajo de ´coments´, se da el valor míimo y máxmio de la radiancia para cada banda (LMAX y LMIN).&lt;br /&gt;
&lt;br /&gt;
Los usuarios más experimentados puede usar esto para obtener una salida legible (ej. para el canal 1):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;CHAN=1&amp;lt;/source&amp;gt;&lt;br /&gt;
 {{cmd|r.info}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;lsat7_2002_${CHAN}0 -h | tr '\n' ' '  | sed 's+ ++g' | tr ':' '\n' | grep &amp;quot;LMIN_BAND${CHAN}\|LMAX_BAND${CHAN}&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La conversión a radiancia (aquí se hace solamente para la banda 1, para las otras bandas, los números en itálicas tienen que ser reemplazados por valores adecuados):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.region}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;rast=lsat7_2002_10 -p&amp;lt;/source&amp;gt;&lt;br /&gt;
 {{cmd|r.mapcalc}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;&amp;quot;lsat7_2002_10_rad=((''191.6'' - (''-6.2'')) / (255.0 - 1.0)) * (lsat7_2002_10 - 1.0) + (''-6.2'')&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para cálculos más rápidos, usar un MDE de enteros:&lt;br /&gt;
&lt;br /&gt;
  {{cmd|r.mapcalc}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;&amp;quot;elev_int = round(elevation)&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Encontrar la elevación promedio para iniciar los cálculos (necesario para el archivo 'icnd' que se muestra abajo):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.univar}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;elev_int&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Estimando el tiempo de sobrevuelo ==&lt;br /&gt;
Este valor es necesario para el archivo de control. Para más detalles, vea la wikipedia en [http://en.wikipedia.org/wiki/Decimal_time#Scientific_decimal_time Scientific decimal time].&lt;br /&gt;
En caso de que este parámetro no esté reportado en el archivo de metadatos, hay dos maneras de obtenerlo.&lt;br /&gt;
&lt;br /&gt;
=== Desde la posición del sol ===&lt;br /&gt;
&lt;br /&gt;
El tiempo de sobrevuelo del satélite puede ser estimado de manera precisa por la posición del sol reportada por los metadatos, usando el módulo {{cmd|r.sunmask}}.&lt;br /&gt;
El  [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/2002/p016r035_7x20020524.met.gz archivo de metadatos] para el siguiente ejemplo contiene: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;SUN_AZIMUTH = 120.8810347, SUN_ELEVATION = 64.7730999&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# de manera iterativa cambiar la hora y minuto para obtener un buen resultado, es necesario corregir la zona horaria:&lt;br /&gt;
 {{cmd|r.sunmask}}  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-s elev=elevation out=dummy year=2002 month=5 day=24 hour=10 min=42 sec=7 timezone=-5&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El comando reporta:&lt;br /&gt;
&lt;br /&gt;
 Solar position: sun azimuth: 121.342461, sun angle above horz.(refraction corrected): 65.396652&lt;br /&gt;
&lt;br /&gt;
El tiempo local de sobrevuelo resultante es &amp;lt;code&amp;gt;10:42:07&amp;lt;/code&amp;gt; que corresponde a &amp;lt;code&amp;gt;15:42&amp;lt;/code&amp;gt; en GMT, que corresponde a  &amp;lt;code&amp;gt;15.70&amp;lt;/code&amp;gt; en horas GMT decimales (minutos decimales: &amp;lt;math&amp;gt;42 * 100 / 60&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== A partir de la herramienta web de la NASA ===&lt;br /&gt;
&lt;br /&gt;
El [http://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi NASA LaRC Satellite Overpass Predictor] puede calcular el tiempo de sobrevuelo del satélite a partir de la ''fecha de adquisición'' y las ''coordenadas centrales de la escena''. El [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/2002/p016r035_7x20020524.met.gz archivo de metadatos] para el siguiente ejemplo contiene: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;ACQUISITION_DATE = 2002-05-24, SCENE_CENTER_LAT = +36.0512847, SCENE_CENTER_LON = -79.3280820&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Seleccione la zona del mundo en y de clic en &amp;lt;code&amp;gt;Go &amp;gt;&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Ingrese las coordenadas Lat/Long (grados decimales, sin signo ''más'' pero sí con el signo ''menos'')&lt;br /&gt;
# Seleccione el satélite adecuado&lt;br /&gt;
# Ingrese la fecha de adquisición&lt;br /&gt;
# ''Opcional:'' seleccione &amp;quot;Day&amp;quot; o &amp;quot;Night&amp;quot; para restingir el cálculo a sobrevuelos de día o de noche (locales) del satélite&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:'' calculo para la escena Landsata de NC: vea aquí [http://www.grassbook.org/wp-content/uploads/ncexternal/landsat/landsat_overpass_time_list_NC.txt here].&lt;br /&gt;
&lt;br /&gt;
--- Solamente para LANDSAT ---&lt;br /&gt;
&lt;br /&gt;
El USGS provee la página web [http://landsat.usgs.gov/consumer.php Landsat Bulk Metadata Service] de donde es posible extraer los metadatos (incluyendo el tiempo de sobrevuelo) para todas las misiones Landsat.&lt;br /&gt;
&lt;br /&gt;
== Corrección atmosférica ==&lt;br /&gt;
&lt;br /&gt;
Los valores de radiancia pueden ser convertidos a reflectancias al realizar la corrección atmosférica aplicando el algoritmo &amp;lt;math&amp;gt;6S&amp;lt;/math&amp;gt;. El algoritmo transformará los valores de Radiancia por encima de la atmósfera a valores de Reflectancia por encima de la copa (Top-of-canopy), usando la información del contenido de aerosoles y la composición atmosférica del momento en que la imagen fue tomada. Lo que sigue describe el método para usar este algoritmo en GRASS GIS. De nuevo, solamente se hacen los cálculos para la banda 1, los número(s) a cambiar para otras bandas espectrales, se muestran en &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt;. El archivo de control &amp;lt;code&amp;gt;icnd_lsat1.txt&amp;lt;/code&amp;gt; consiste en los siguientes parámetros, y es escrito en un editor de texto:&lt;br /&gt;
&lt;br /&gt;
 8                          # indica que es una imagen ETM+&lt;br /&gt;
 05 24 15.67 -78.691 35.749 # imagen tomada el 24 de mayo, a las 15:42 GMT en decimales; el centro de la imagen está en  78.691°O y 35.749°N &lt;br /&gt;
 2                          # the midlatitude summer atmospheric model&lt;br /&gt;
 1                          # el modelo de aerosoles continentales&lt;br /&gt;
 50                         # la visibilidad para el modelo de aerosoles [km]&lt;br /&gt;
 -0.110                     # el terreno está 110 metros por encima del nivel del mar [km] * -1&lt;br /&gt;
 -1000                      # imagen tomada de un sensor de satélite (1000)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;61&amp;lt;/span&amp;gt;                         # banda espectral, aquí la 1: azul&lt;br /&gt;
&lt;br /&gt;
De manera alternativa, en caso de que no se tenga un mapa de visibilidad, se puede usar una estimación de Profundidad óptica de aerosoles (Aerosol Optical Depth estimation) a 550nm. El archivo de control debe ser modificado de acuerdo a esto, ingresando 0 para la visibilidad, y en la siguiente línea, ingresar la profundidad óptica de aerosoles. El archivo de control debe ser estructurado de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 8                          # indica que es una imagen ETM+&lt;br /&gt;
 05 24 15.67 -78.691 35.749 # imagen tomada el 24 de mayo, a las 15:42 GMT en decimales; el centro de la imagen está en  78.691°O y 35.749°N &lt;br /&gt;
 2                          # the midlatitude summer atmospheric model&lt;br /&gt;
 1                          # el modelo de aerosoles continentales&lt;br /&gt;
 0                          # establece visibilidad = 0&lt;br /&gt;
 0.112                      # ej. profundidad óptica de aerosoles&lt;br /&gt;
 -0.110                     # el terreno está 110 metros por encima del nivel del mar [km] * -1&lt;br /&gt;
 -1000                      # imagen tomada de un sensor de satélite (1000)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;61&amp;lt;/span&amp;gt;                         # banda espectral, aquí la 1: azul&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo se usa después en el módulo {{cmd|i.atcorr}}:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|i.atcorr}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-a -o iimg=lsat7_2002_10_rad ialt=elev_int icnd=icdn_lsat1.txt oimg=lsat7_2002_10_atcorr&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o, usando GRASS 7.x:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|i.atcorr}} &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=none&amp;gt;-a input=lsat7_2002_10_rad elevation=elev_int parameters=icdn_lsat1.txt output=lsat7_2002_10_atcorr&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde:&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''-a'''&amp;lt;/tt&amp;gt;   se refiere a una imagen Landsat tomada luego de julio 2000&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''-o'''&amp;lt;/tt&amp;gt;   activa la aceleración caché (solamente GRASS 6.x)&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''iimg/input'''&amp;lt;/tt&amp;gt; es la imagen a corregir&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''ialt/elevation'''&amp;lt;/tt&amp;gt; es el mapa de altitud que sobreescribe el valor inicial de 110 metros&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''icnd/parameters'''&amp;lt;/tt&amp;gt; es la ruta al archivo  icnd.txt&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''oimg/output'''&amp;lt;/tt&amp;gt; es el nombre de la imagen de salida&lt;br /&gt;
&lt;br /&gt;
Se puede encontrar información detallada en el manual de {{cmd|i.atcorr}}.&lt;br /&gt;
&lt;br /&gt;
'''Nota,''' {{cmd|i.atcorr}} no se quejará si el modelo de elevación definido (parámetro &amp;lt;code&amp;gt;elevation=&amp;lt;/code&amp;gt;) no cubre toda la extensión de la escena Landsat a que se sujeta el proceso -- dará valores NaN (Not a Number). ''[Maybe this can be requested as an enhancement?]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fuentes para estimaciones de profundidad óptica de aerosoles  ==&lt;br /&gt;
&lt;br /&gt;
* [http://aeronet.gsfc.nasa.gov AERONET] - provee observaciones distribuidas globalmente de profundidad óptica de aerosoles (AOD), productos de inversión (inversion products), y agua precipitable en diversos regímenes de aerosoles.&lt;br /&gt;
* Producto MODIS MOD08 [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=08 MOD08 - Gridded Atmospheric Product].&lt;br /&gt;
** Los productos MOD08 diarios pueden ser descargados directamente a partir del servidor FTP de la NASA: [ftp://ladsweb.nascom.nasa.gov/allData/51/MOD08_D3/ '''ftp://ladsweb.nascom.nasa.gov/allData/51/MOD08_D3/'''].&lt;br /&gt;
** Están disponibles las especificaciones del Archivo y capa, por ejemplo, en [http://www.atmos.washington.edu/~robwood/modis/filespecs/MOD08_D3.CDL.fs MODIS HDF File Specification MOD08_D3: MODIS Level 3 Daily Atmosphere Gridded Product]&lt;br /&gt;
** La capa '''Optical_Depth_Land_And_Ocean_Mean''', descrita como  ''Aerosol Optical Thickness at 0.55 microns for both Ocean (best) and Land (corrected): Mean'', probablemente pueda ser usada como entrada para {{cmd|i.atcorr}}. '''Nota,''' los valores de la capa deben ser escalados usando el factor de escalamiento ''Optical_Depth_Land_And_Ocean_Mean:scale_factor ='' '''0.001d''', como se reporta en las especificaciones.&lt;br /&gt;
* [http://www.cesbio.ups-tlse.fr/multitemp/?p=1710 How to estimate Aerosol Optical Thickness]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== TοDο ===&lt;br /&gt;
* entender si el  [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=04 MODIS Aerosol Product (MOD04)] could be useful to estimate the visibility for the aerosol model.&lt;br /&gt;
* provide an example on using [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=08 MODIS Gridded Atmospheric Product (MOD08)].&lt;br /&gt;
* explain if it is possible and how to use ''Rayleigh Optical Depths estimated at 0km altitude for six different atmosphere models'' from the paper [http://www.opticsinfobase.org/ao/abstract.cfm?uri=ao-34-15-2765  Rayleigh-scattering calculations for the terrestrial atmosphere] by Anthony Buchholz, table 4, page 2270 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
&lt;br /&gt;
=== Algoritmo 6S ===&lt;br /&gt;
&lt;br /&gt;
* [http://6s.ltdri.org 6S Web site]&lt;br /&gt;
* [http://modis-sr.ltdri.org/ Land Surface Reflectance Science Computing Facility website - 6S]&lt;br /&gt;
&lt;br /&gt;
=== Radiancia/reflectacia espectral ===&lt;br /&gt;
&lt;br /&gt;
* [http://landsat.usgs.gov/how_is_radiance_calculated.php How is radiance calculated?], question on USGS' [http://landsat.usgs.gov/tools_faq.php Landsat Missions - Frequently Asked Questions]&lt;br /&gt;
* (1)  http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html&lt;br /&gt;
* (2)  http://landsat.usgs.gov/documents/L5TM_postcal_v11.pdf&lt;br /&gt;
&lt;br /&gt;
=== Whitepapers ===&lt;br /&gt;
&lt;br /&gt;
* Various [http://apollomapping.com/about-us/whitepapers Whitepapers] about conversion and atmospheric correction of High Resolution Satellite Imagery&lt;br /&gt;
*  Song, C., Woodcock, C.E., Seto, K.C., Lenney, M.P., Macomber, S.A., 2001. Classification and Change Detection Using Landsat TM Data: When and How to Correct Atmospheric Effects? Remote Sensing of Environment 75, 230-244. [http://www.unc.edu/courses/2008spring/geog/577/001/www/Song01_RSE.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas on-line relacionadas ===&lt;br /&gt;
&lt;br /&gt;
* [http://cloudsgate2.larc.nasa.gov/cgi-bin/predict/predict.cgi NASA LaRC Satellite Overpass Predictor]&lt;br /&gt;
* [http://landsat.usgs.gov/consumer.php Landsat Bulk Metadata Service]&lt;br /&gt;
* NASA's [http://atmcorr.gsfc.nasa.gov/ Atmospheric Correction Parameter Calculator]&lt;br /&gt;
&lt;br /&gt;
=== Cómo añadir sensores a i.atcorr ===&lt;br /&gt;
&lt;br /&gt;
Cómo añadir sensores a {{cmd|i.atcorr}}:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
* ver http://trac.osgeo.org/grass/browser/grass/trunk/imagery/i.atcorr/README&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Image processing]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23313</id>
		<title>Atmospheric correction/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Atmospheric_correction/es&amp;diff=23313"/>
		<updated>2016-07-28T14:44:18Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Created page with &amp;quot;&amp;lt;!-- === TοDο === * entender si el  [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=04 MODIS Aerosol Product (MOD04)] could be useful to estimate the v...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
=== TοDο ===&lt;br /&gt;
* entender si el  [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=04 MODIS Aerosol Product (MOD04)] could be useful to estimate the visibility for the aerosol model.&lt;br /&gt;
* provide an example on using [http://modis.gsfc.nasa.gov/data/dataprod/dataproducts.php?MOD_NUMBER=08 MODIS Gridded Atmospheric Product (MOD08)].&lt;br /&gt;
* explain if it is possible and how to use ''Rayleigh Optical Depths estimated at 0km altitude for six different atmosphere models'' from the paper [http://www.opticsinfobase.org/ao/abstract.cfm?uri=ao-34-15-2765  Rayleigh-scattering calculations for the terrestrial atmosphere] by Anthony Buchholz, table 4, page 2270 --&amp;gt;&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=R_statistics/rgrass/es&amp;diff=23312</id>
		<title>R statistics/rgrass/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=R_statistics/rgrass/es&amp;diff=23312"/>
		<updated>2016-07-27T17:05:46Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: R statistics/rgrass7/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Esta página se refiere al uso de R dentro de una sesión de GRASS GIS 7 y al uso de GRASS GIS 7 dentro de una sesión de R''' (vea también [[R_statistics/spgrass6]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Terminología ==&lt;br /&gt;
&lt;br /&gt;
El uso de R en conjunto con GRASS GIS puede tener dos significados:&lt;br /&gt;
&lt;br /&gt;
* Usar ''R dentro de una sesión de GRASS GIS''', i.e. inicia R (o RStudio) desde la línea de comandos de GRASS GIS. Puede interesarle esta variante si es primariamente un usuario SIG.&lt;br /&gt;
* Usar '''GRASS GIS dentro de una sesión de R''', i.e. se conecta a una localización/directorio de mapas de GRASS GIS desde de R (o RStudio). Puede interesarle esta variante si es priimeramente un usuario de R.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- not quite clear to the casual user..:&lt;br /&gt;
Keep in mind:&lt;br /&gt;
* if you already have a GRASS location/mapset, use R inside GRASS and do not use initGRASS();&lt;br /&gt;
* if the GRASS location/mapset is only a throwaway one, use initGRASS() and run GRASS inside R.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Referencias''': ver &amp;quot;Información general&amp;quot; en [[R_statistics]]&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
Ver [[R_statistics/Installation]]&lt;br /&gt;
&lt;br /&gt;
== R dentro de GRASS ==&lt;br /&gt;
&lt;br /&gt;
Usando '''R dentro de una sesión de GRASS GIS''', i.e. se inicia R (o RStudio) desde la línea de comandos de GRASS GIS.&lt;br /&gt;
&lt;br /&gt;
=== Inicio ===&lt;br /&gt;
&lt;br /&gt;
* Primero inicie una sesión de GRASS GIS. Luego, en la consola de comandos inicie ''R'' (o una sesión de 'rstudio', ver abajo)&lt;br /&gt;
: ''En este ejemplo se usará el [http://grass.osgeo.org/download/sample-data/ conjunto de datos de muestra de North Carolina].''&lt;br /&gt;
&lt;br /&gt;
Reiniciar la configuración de la región a la predeterminada&lt;br /&gt;
 GRASS 7.0.1svn (nc_spm_08_grass7):~ &amp;gt; g.region -d&lt;br /&gt;
&lt;br /&gt;
Lanzar R desde la consola de GRASS&lt;br /&gt;
 GRASS 7.0.1svn (nc_spm_08_grass7):~ &amp;gt; R&lt;br /&gt;
&lt;br /&gt;
Cargar la librería ''rgrass7'':&lt;br /&gt;
 &amp;gt; library(rgrass7)&lt;br /&gt;
&lt;br /&gt;
Si quiere seguir el ejemplo usando el conjunto de datos de muestra de North Carolina, cargue la librería ''rgdal'':&lt;br /&gt;
 &amp;gt; library(rgdal)&lt;br /&gt;
&lt;br /&gt;
Obtener el ambiente de GRASS (directorio de mapas, región, proyección, etc.); puede desplegar los metadatos de su localización mostrando G:&lt;br /&gt;
 &amp;gt; G &amp;lt;- gmeta()&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gisdbase    /home/neteler/grassdata &lt;br /&gt;
location    nc_spm_08_grass7 &lt;br /&gt;
mapset      user1 &lt;br /&gt;
rows        620 &lt;br /&gt;
columns     1630 &lt;br /&gt;
north       320000 &lt;br /&gt;
south       10000 &lt;br /&gt;
west        120000 &lt;br /&gt;
east        935000 &lt;br /&gt;
nsres       500 &lt;br /&gt;
ewres       500 &lt;br /&gt;
projection  +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334&lt;br /&gt;
+lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +no_defs +a=6378137&lt;br /&gt;
+rf=298.257222101 +towgs84=0.000,0.000,0.000 +to_meter=1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enlistando los mapas existentes ===&lt;br /&gt;
&lt;br /&gt;
Enlistar los mapas vectoriales existentes:&lt;br /&gt;
 &amp;gt; execGRASS(&amp;quot;g.list&amp;quot;, parameters = list(type = &amp;quot;vector&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
Enlistar mapas vectoriales seleccionados (wildcards):&lt;br /&gt;
 &amp;gt; execGRASS(&amp;quot;g.list&amp;quot;, parameters = list(type = &amp;quot;vector&amp;quot;, pattern = &amp;quot;precip*&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
Guardar mapas vectoriales seleccionados en R:&lt;br /&gt;
 &amp;gt; my_vmaps &amp;lt;- execGRASS(&amp;quot;g.list&amp;quot;, parameters = list(type = &amp;quot;vector&amp;quot;, pattern = &amp;quot;precip*&amp;quot;))&lt;br /&gt;
 &amp;gt; attributes(my_vmaps)&lt;br /&gt;
 &amp;gt; attributes(my_vmaps)$resOut&lt;br /&gt;
&lt;br /&gt;
Enlistar mapas ráster disponibles:&lt;br /&gt;
 &amp;gt; execGRASS(&amp;quot;g.list&amp;quot;, parameters = list(type = &amp;quot;raster&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
Enlistar mapas ráster seleccionados (wildcard):&lt;br /&gt;
 &amp;gt; execGRASS(&amp;quot;g.list&amp;quot;, parameters = list(type = &amp;quot;raster&amp;quot;, pattern = &amp;quot;lsat7_2002*&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
=== Leyendo datos desde GRASS ===&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo 1 ====&lt;br /&gt;
&lt;br /&gt;
Leer en GRASS dos mapas ráster (los mapas &amp;quot;geology_30m&amp;quot; y &amp;quot;elevation&amp;quot; del conjunto de mapas de muestra de North Carolina) en la sesión actual de R como un nuevo objeto &amp;quot;ncdata&amp;quot; (que contiene los dos SpatialGridDataFrames así como los metadatos):&lt;br /&gt;
# el parámetro cat indica qué valores ráster se regresarán como factores&lt;br /&gt;
 # - geology_30m es un mapa categórico (i.e., viene con clases)&lt;br /&gt;
 # - elevation es una superficie continua&lt;br /&gt;
 &amp;gt; ncdata &amp;lt;- readRAST(c(&amp;quot;geology_30m&amp;quot;, &amp;quot;elevation&amp;quot;), cat=c(TRUE, FALSE))&lt;br /&gt;
&lt;br /&gt;
(se puede mostrar una advertencia ya que en el mapa &amp;quot;geology_30m&amp;quot; dos etiquetas no son únicas - como se encuentran en los datos originales.)&lt;br /&gt;
&lt;br /&gt;
Se puede verificar el nuevo objeto R:&lt;br /&gt;
 &amp;gt; str(ncdata)&lt;br /&gt;
 Formal class 'SpatialGridDataFrame' [package &amp;quot;sp&amp;quot;] with 4 slots&lt;br /&gt;
  ..@ data       :'data.frame':	16616 obs. of  2 variables:&lt;br /&gt;
&lt;br /&gt;
y también revisar la estructura de datos en más detalle:&lt;br /&gt;
 &amp;gt; str(ncdata@data)&lt;br /&gt;
 'data.frame':	16616 obs. of  2 variables:&lt;br /&gt;
  $ geology_30m: Factor w/ 12 levels &amp;quot;CZfg_217&amp;quot;,&amp;quot;CZlg_262&amp;quot;,..: NA NA NA NA NA NA NA NA NA NA ...&lt;br /&gt;
  $ elevation  : num  NA NA NA NA NA NA NA NA NA NA ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los metadatos ahora están disponibles, pero no son usados (aún) en para estructurar la clase de objetos ''sp'', e este caso un objeto SpatialGridDataFrame con los datos de dos capas de North Carolina. Aquí la gráfica de los datos de elevación:&lt;br /&gt;
 &amp;gt; image(ncdata, &amp;quot;elevation&amp;quot;, col = terrain.colors(20))&lt;br /&gt;
&lt;br /&gt;
Añadir un título a la gráfica:&lt;br /&gt;
 &amp;gt; title(&amp;quot;North Carolina elevation&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
[[Image:ncdata.png|center]]&lt;br /&gt;
&lt;br /&gt;
Además, se puede mostrar qué pasa dentro de los objetos leidos en R:&lt;br /&gt;
 &amp;gt; str(G)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
List of 26&lt;br /&gt;
 $ DEBUG        : chr &amp;quot;0&amp;quot;&lt;br /&gt;
 $ LOCATION_NAME: chr &amp;quot;nc_spm_08_grass7&amp;quot;&lt;br /&gt;
 $ GISDBASE     : chr &amp;quot;/home/veroandreo/grassdata&amp;quot;&lt;br /&gt;
 $ MAPSET       : chr &amp;quot;PERMANENT&amp;quot;&lt;br /&gt;
 $ GUI          : chr &amp;quot;wxpython&amp;quot;&lt;br /&gt;
 $ projection   : chr &amp;quot;99&amp;quot;&lt;br /&gt;
 $ zone         : chr &amp;quot;0&amp;quot;&lt;br /&gt;
 $ n            : num 228500&lt;br /&gt;
 $ s            : num 215000&lt;br /&gt;
 $ w            : num 630000&lt;br /&gt;
 $ e            : num 645000&lt;br /&gt;
 $ t            : num 1&lt;br /&gt;
 $ b            : num 0&lt;br /&gt;
 $ nsres        : num 27.5&lt;br /&gt;
 $ nsres3       : num 10&lt;br /&gt;
 $ ewres        : num 37.5&lt;br /&gt;
 $ ewres3       : num 10&lt;br /&gt;
 $ tbres        : num 1&lt;br /&gt;
 $ rows         : int 491&lt;br /&gt;
 $ rows3        : int 1350&lt;br /&gt;
 $ cols         : int 400&lt;br /&gt;
 $ cols3        : int 1500&lt;br /&gt;
 $ depths       : int 1&lt;br /&gt;
 $ cells        : chr &amp;quot;196400&amp;quot;&lt;br /&gt;
 $ cells3       : chr &amp;quot;2025000&amp;quot;&lt;br /&gt;
 $ proj4        : chr &amp;quot;+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +no_defs +a=6378137 +&amp;quot;| __truncated__&lt;br /&gt;
 - attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;gmeta&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; summary(ncdata)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Object of class SpatialGridDataFrame&lt;br /&gt;
Coordinates:&lt;br /&gt;
        min    max&lt;br /&gt;
[1,] 630000 645000&lt;br /&gt;
[2,] 215000 228500&lt;br /&gt;
Is projected: TRUE &lt;br /&gt;
proj4string :&lt;br /&gt;
[+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334&lt;br /&gt;
+lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +no_defs +a=6378137&lt;br /&gt;
+rf=298.257222101 +towgs84=0.000,0.000,0.000 +to_meter=1]&lt;br /&gt;
Grid attributes:&lt;br /&gt;
  cellcentre.offset cellsize cells.dim&lt;br /&gt;
1          630018.8 37.50000       400&lt;br /&gt;
2          215013.7 27.49491       491&lt;br /&gt;
Data attributes:&lt;br /&gt;
   geology_30m      elevation     &lt;br /&gt;
 CZfg_217:70381   Min.   : 55.92  &lt;br /&gt;
 CZig_270:66861   1st Qu.: 94.78  &lt;br /&gt;
 CZbg_405:24561   Median :108.88  &lt;br /&gt;
 CZlg_262:19287   Mean   :110.38  &lt;br /&gt;
 CZam_862: 6017   3rd Qu.:126.78  &lt;br /&gt;
 CZbg_910: 4351   Max.   :156.25  &lt;br /&gt;
 (Other) : 4942                   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo 2 ====&lt;br /&gt;
&lt;br /&gt;
Aquí hay un ejemplo de un solo mapa transferido desde GRASS GIS a R:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
library(rgrass7)&lt;br /&gt;
execGRASS(&amp;quot;g.region&amp;quot;, raster = &amp;quot;elevation&amp;quot;, flags = &amp;quot;p&amp;quot;)&lt;br /&gt;
ncdata &amp;lt;- readRAST(&amp;quot;elevation&amp;quot;, cat=FALSE)&lt;br /&gt;
summary(ncdata)&lt;br /&gt;
spplot(ncdata, col = terrain.colors(20))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resumiendo los datos ===&lt;br /&gt;
&lt;br /&gt;
Se puede crear una tabla de conteo de celdas:&lt;br /&gt;
 &amp;gt; table(ncdata$geology_30m)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!CZfg_217 &lt;br /&gt;
!CZlg_262 &lt;br /&gt;
!CZig_270 &lt;br /&gt;
!CZbg_405 &lt;br /&gt;
!CZve_583 &lt;br /&gt;
!CZam_720  &lt;br /&gt;
!CZg_766 &lt;br /&gt;
!CZam_862 &lt;br /&gt;
!CZbg_910   &lt;br /&gt;
!Km_921 &lt;br /&gt;
!CZbg_945 &lt;br /&gt;
!CZam_946 &lt;br /&gt;
!CZam_948&lt;br /&gt;
|-&lt;br /&gt;
|70381&lt;br /&gt;
|19287&lt;br /&gt;
|66861    &lt;br /&gt;
|24561     &lt;br /&gt;
|2089      &lt;br /&gt;
|467      &lt;br /&gt;
|691     &lt;br /&gt;
|6017 &lt;br /&gt;
|4351&lt;br /&gt;
|1211        &lt;br /&gt;
|1      &lt;br /&gt;
|398       &lt;br /&gt;
|85&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Y compararla con el módulo GRASS equivalente:&lt;br /&gt;
 &amp;gt; execGRASS(&amp;quot;r.stats&amp;quot;, flags=c(&amp;quot;c&amp;quot;, &amp;quot;l&amp;quot;), parameters=list(input=&amp;quot;geology_30m&amp;quot;), ignore.stderr=TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
217 CZfg 70381&lt;br /&gt;
262 CZlg 19287&lt;br /&gt;
270 CZig 66861&lt;br /&gt;
405 CZbg 24561&lt;br /&gt;
583 CZve 2089&lt;br /&gt;
720 CZam 467&lt;br /&gt;
766 CZg 691&lt;br /&gt;
862 CZam 6017&lt;br /&gt;
910 CZbg 4351&lt;br /&gt;
921 Km 1211&lt;br /&gt;
945 CZbg 1&lt;br /&gt;
946 CZam 398&lt;br /&gt;
948 CZam 85&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear una gráfica de caja y bigotes de los tipos geológicos a diferentes elevaciones:&lt;br /&gt;
 &amp;gt; boxplot(ncdata$elevation ~ ncdata$geology_30m, medlwd = 1)&lt;br /&gt;
&lt;br /&gt;
[[Image:boxplot_geo.png|center]]&lt;br /&gt;
&lt;br /&gt;
=== Consultando mapas ===&lt;br /&gt;
&lt;br /&gt;
Algunas veces se quiere consultar mapas de GRASS GIS desde su sesión de R.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, aquí se transfiere el valor de un pixel ráster a la posición de puntos vectoriales:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# primero definir la región computacional al mapa ráster:&lt;br /&gt;
&amp;gt; execGRASS(&amp;quot;g.region&amp;quot;, raster = &amp;quot;elev_state_500m&amp;quot;, flags = &amp;quot;p&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# consulta de mapa ráster en los puntos, transferir los resultados a R&lt;br /&gt;
&amp;gt; goutput &amp;lt;- execGRASS(&amp;quot;r.what&amp;quot;, map=&amp;quot;elev_state_500m&amp;quot;, points=&amp;quot;geodetic_pts&amp;quot;, separator=&amp;quot;,&amp;quot;, intern=TRUE)&lt;br /&gt;
&amp;gt; str(goutput)&lt;br /&gt;
 chr [1:29939] &amp;quot;571530.81289275,265739.968425953,,187.8082200648&amp;quot; ...&lt;br /&gt;
&lt;br /&gt;
# parsearlos&lt;br /&gt;
&amp;gt; con &amp;lt;- textConnection(goutput)&lt;br /&gt;
&amp;gt; go1 &amp;lt;- read.csv(con, header=FALSE)&lt;br /&gt;
&amp;gt; str(go1)&lt;br /&gt;
'data.frame':	29939 obs. of  4 variables:&lt;br /&gt;
 $ V1: num  571531 571359 571976 572391 573011 ...&lt;br /&gt;
 $ V2: num  265740 265987 267049 267513 269615 ...&lt;br /&gt;
 $ V3: logi  NA NA NA NA NA NA ...&lt;br /&gt;
 $ V4: Factor w/ 22738 levels &amp;quot;-0.0048115728&amp;quot;,..: 6859 6642 6749 6411 6356 6904 7506 7224 6908 7167 ...&lt;br /&gt;
&amp;gt; summary(go1)&lt;br /&gt;
       V1               V2            V3                V4       &lt;br /&gt;
 Min.   :121862   Min.   :  7991   Mode:logical   0      :  723  &lt;br /&gt;
 1st Qu.:462706   1st Qu.:162508   NA's:29939     *      :  293  &lt;br /&gt;
 Median :610328   Median :204502                  0.3048 :   47  &lt;br /&gt;
 Mean   :588514   Mean   :200038                  0.6096 :   44  &lt;br /&gt;
 3rd Qu.:717610   3rd Qu.:247633                  1.524  :   42  &lt;br /&gt;
 Max.   :946743   Max.   :327186                  0.9144 :   23  &lt;br /&gt;
                                                  (Other):28767  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exportando datos de regreso a GRASS ===&lt;br /&gt;
&lt;br /&gt;
Finalmente, un objeto SpatialGridDataFrame se escribe de regreso a un mapa ráster GRASS:&lt;br /&gt;
&lt;br /&gt;
Primero preparar algún dato: (raiz cuadrada de la elevación)&lt;br /&gt;
 &amp;gt; ncdata$sqdem &amp;lt;- sqrt(ncdata$elevation)&lt;br /&gt;
&lt;br /&gt;
Exportar datos desde ''R'' de regreso a un mapa ráster GRASS:&lt;br /&gt;
 &amp;gt; writeRAST(ncdata, &amp;quot;sqdemNC&amp;quot;, zcol=&amp;quot;sqdem&amp;quot;, ignore.stderr=TRUE)&lt;br /&gt;
&lt;br /&gt;
Revisar que la importación a GRASS haya sido correcta:&lt;br /&gt;
 &amp;gt; execGRASS(&amp;quot;r.info&amp;quot;, parameters=list(map=&amp;quot;sqdemNC&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 +----------------------------------------------------------------------------+&lt;br /&gt;
 | Map:      sqdemNC                        Date: Sun Jul 19 13:06:34 2015    |&lt;br /&gt;
 | Mapset:   PERMANENT                      Login of Creator: veroandreo      |&lt;br /&gt;
 | Location: nc_spm_08_grass7                                                 |&lt;br /&gt;
 | DataBase: /home/veroandreo/grassdata                                       |&lt;br /&gt;
 | Title:     ( sqdemNC )                                                     |&lt;br /&gt;
 | Timestamp: none                                                            |&lt;br /&gt;
 |----------------------------------------------------------------------------|&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 |   Type of Map:  raster               Number of Categories: 0               |&lt;br /&gt;
 |   Data Type:    DCELL                                                      |&lt;br /&gt;
 |   Rows:         491                                                        |&lt;br /&gt;
 |   Columns:      400                                                        |&lt;br /&gt;
 |   Total Cells:  196400                                                     |&lt;br /&gt;
 |        Projection: Lambert Conformal Conic                                 |&lt;br /&gt;
 |            N:     228500    S: 215000.0002   Res: 27.49490794              |&lt;br /&gt;
 |            E:     645000    W:     630000   Res:  37.5                     |&lt;br /&gt;
 |   Range of data:    min = 7.47818253045085  max = 12.5000787351036         |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 |   Data Description:                                                        |&lt;br /&gt;
 |    generated by r.in.bin                                                   |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 |   Comments:                                                                |&lt;br /&gt;
 |                                                                            |&lt;br /&gt;
 +----------------------------------------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Usando RStudio en una sesión de GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Si está más acostumbrado a correr R desde RStudio, pero de todas maneras quiere tener todos los datos GRASS disponibles para realizar algún análisis sin perder la posibilidad de usar la línea de comados de GRASS, puede correr:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GRASS&amp;gt; rstudio &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o, si ya está trabajado en algún proyecto de RStudio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GRASS&amp;gt; rstudio /path/to/project/folder/ &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego carque la librería rgrass7 en su proyecto de RStudio&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; library(rgrass7) &lt;br /&gt;
&lt;br /&gt;
y listo.&lt;br /&gt;
&lt;br /&gt;
[[File:Grass7_rstudio.png|thumb|500px|center|RStudio used in GRASS GIS 7 session]]&lt;br /&gt;
&lt;br /&gt;
== GRASS dentro de  R ==&lt;br /&gt;
&lt;br /&gt;
Usando '''GRASS GIS dentro de una sesión de R''', i.e. se conecta a una localización/directorio de mapas desde adentro de R (o RStudio).&lt;br /&gt;
&lt;br /&gt;
=== Inicio ===&lt;br /&gt;
&lt;br /&gt;
En primer lugar, encontrar la ruta a la librería de GRASS GIS. Esta puede ser encontrada facilmente con el siguiente comando (fuera de R, o adentro de R con la llamada system()):&lt;br /&gt;
&lt;br /&gt;
  # usuarios de OSGeo4W: nada&lt;br /&gt;
 &lt;br /&gt;
  # usuarios Linux, Mac OSX:&lt;br /&gt;
  grass70 --config path&lt;br /&gt;
&lt;br /&gt;
Debe reportar algo como lo siguiente:&lt;br /&gt;
  /usr/local/grass-7.0.1&lt;br /&gt;
&lt;br /&gt;
Para llamar la funcionalidad de GRASS GIS 7 desde R, inicie R y use la función initGRASS() para definir la configuración de GRASS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## usuarios de MS-Windows:&lt;br /&gt;
library(rgrass7)&lt;br /&gt;
# inicialización y el uso de los datos de muestra de North Carolina&lt;br /&gt;
initGRASS(gisBase = &amp;quot;C:/OSGeo4W/apps/grass/grass-7.1.svn&amp;quot;,&lt;br /&gt;
         gisDbase = &amp;quot;C:/Users/marissa/GRASSdata/&amp;quot;,&lt;br /&gt;
         location = &amp;quot;nc_spm_08_grass7&amp;quot;, mapset = &amp;quot;user1&amp;quot;, SG=&amp;quot;elevation&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
## usuarios de Linux, Mac OSX:&lt;br /&gt;
library(rgrass7)&lt;br /&gt;
# inicialización y el uso de los datos de muestra de North Carolina&lt;br /&gt;
initGRASS(gisBase = &amp;quot;/usr/local/grass-7.0.1&amp;quot;, home = tempdir(), &lt;br /&gt;
          gisDbase = &amp;quot;/home/veroandreo/grassdata/&amp;quot;,&lt;br /&gt;
          location = &amp;quot;nc_spm_08_grass7&amp;quot;, mapset = &amp;quot;user1&amp;quot;, SG=&amp;quot;elevation&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: el parámetro opcional SG es un objeto 'SpatialGrid' para definir la 'DEFAULT_WIND’ de la localización temporal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# definir la región computacional a predeterminada (opcional)&lt;br /&gt;
system(&amp;quot;g.region -dp&amp;quot;)&lt;br /&gt;
#  verificar metadatos&lt;br /&gt;
gmeta()&lt;br /&gt;
&lt;br /&gt;
# obtener dos mapas ráster en R&lt;br /&gt;
ncdata &amp;lt;- readRAST(c(&amp;quot;geology_30m&amp;quot;, &amp;quot;elevation&amp;quot;), cat=c(TRUE, FALSE))&lt;br /&gt;
&lt;br /&gt;
# calcular el resumen del objeto&lt;br /&gt;
summary(ncdata$geology_30m)&lt;br /&gt;
 CZfg_217 CZlg_262 CZig_270 CZbg_405 CZve_583 CZam_720  CZg_766 CZam_862 &lt;br /&gt;
     292       78      277      102        8        1        2       25 &lt;br /&gt;
 CZbg_910   Km_921 CZam_946     NA's &lt;br /&gt;
      18        5        2  1009790 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== R en GRASS en el modo de bloque (batch) ==&lt;br /&gt;
&lt;br /&gt;
Corra el siguiente script con &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R CMD BATCH batch.R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
library(rgrass7)&lt;br /&gt;
# inicialización y el uso del cojunto de datos North Carolina&lt;br /&gt;
initGRASS(gisBase = &amp;quot;/home/veroandreo/software/grass-7.0.svn/dist.x86_64-unknown-linux-gnu&amp;quot;, &lt;br /&gt;
          home = tempdir(), &lt;br /&gt;
          gisDbase = &amp;quot;/home/veroandreo/grassdata/&amp;quot;,&lt;br /&gt;
          location = &amp;quot;nc_spm_08_grass7&amp;quot;, mapset = &amp;quot;user1&amp;quot;, SG=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
          override = TRUE)&lt;br /&gt;
# definir la región como predeterminada&lt;br /&gt;
system(&amp;quot;g.region -dp&amp;quot;)&lt;br /&gt;
# verificar&lt;br /&gt;
gmeta()&lt;br /&gt;
# leer datos en  R&lt;br /&gt;
ncdata &amp;lt;- readRAST(c(&amp;quot;geology_30m&amp;quot;, &amp;quot;elevation&amp;quot;), cat=c(TRUE, FALSE))&lt;br /&gt;
# resumen de mapa geológico&lt;br /&gt;
summary(ncdata$geology_30m)&lt;br /&gt;
proc.time()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El resultado es (no se muestra todo):&lt;br /&gt;
&lt;br /&gt;
    cat batch.Rout&lt;br /&gt;
    &lt;br /&gt;
    R version 3.2.1 (2015-06-18) -- &amp;quot;World-Famous Astronaut&amp;quot;&lt;br /&gt;
    Copyright (C) 2015 The R Foundation for Statistical Computing&lt;br /&gt;
    Platform: x86_64-redhat-linux-gnu (64-bit)&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;gt; library(rgrass7)&lt;br /&gt;
    Loading required package: sp&lt;br /&gt;
    Loading required package: XML&lt;br /&gt;
    GRASS GIS interface loaded with GRASS version: (GRASS not running)&lt;br /&gt;
    &amp;gt; # initialisation and the use of north carolina dataset&lt;br /&gt;
    &amp;gt; initGRASS(gisBase = &amp;quot;/home/veroandreo/software/grass-7.0.svn/dist.x86_64-unknown-linux-gnu&amp;quot;, home = tempdir(), &lt;br /&gt;
    +           gisDbase = &amp;quot;/home/veroandreo/grassdata/&amp;quot;,&lt;br /&gt;
    +           location = &amp;quot;nc_spm_08_grass7&amp;quot;, mapset = &amp;quot;user1&amp;quot;, SG=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    +           override = TRUE)&lt;br /&gt;
    gisdbase    /home/veroandreo/grassdata/ &lt;br /&gt;
    location    nc_spm_08_grass7 &lt;br /&gt;
    mapset      user1 &lt;br /&gt;
    rows        620 &lt;br /&gt;
    columns     1630 &lt;br /&gt;
    north       320000 &lt;br /&gt;
    south       10000 &lt;br /&gt;
    west        120000 &lt;br /&gt;
    east        935000 &lt;br /&gt;
    nsres       500 &lt;br /&gt;
    ewres       500 &lt;br /&gt;
    projection  +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334&lt;br /&gt;
    +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +no_defs +a=6378137&lt;br /&gt;
    +rf=298.257222101 +towgs84=0.000,0.000,0.000 +to_meter=1 &lt;br /&gt;
    &lt;br /&gt;
    &amp;gt; system(&amp;quot;g.region -dp&amp;quot;)&lt;br /&gt;
    projection: 99 (Lambert Conformal Conic)&lt;br /&gt;
    zone:       0&lt;br /&gt;
    datum:      nad83&lt;br /&gt;
    ellipsoid:  a=6378137 es=0.006694380022900787&lt;br /&gt;
    north:      320000&lt;br /&gt;
    south:      10000&lt;br /&gt;
    west:       120000&lt;br /&gt;
    east:       935000&lt;br /&gt;
    nsres:      500&lt;br /&gt;
    ewres:      500&lt;br /&gt;
    rows:       620&lt;br /&gt;
    cols:       1630&lt;br /&gt;
    cells:      1010600&lt;br /&gt;
    &amp;gt; gmeta()&lt;br /&gt;
    gisdbase    /home/veroandreo/grassdata/ &lt;br /&gt;
    location    nc_spm_08_grass7 &lt;br /&gt;
    mapset      user1 &lt;br /&gt;
    rows        620 &lt;br /&gt;
    columns     1630 &lt;br /&gt;
    north       320000 &lt;br /&gt;
    south       10000 &lt;br /&gt;
    ...&lt;br /&gt;
    &amp;gt; ncdata &amp;lt;- readRAST(c(&amp;quot;geology_30m&amp;quot;, &amp;quot;elevation&amp;quot;), cat=c(TRUE, FALSE))&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;gt; summary(ncdata$geology_30m)&lt;br /&gt;
    CZfg_217 CZlg_262 CZig_270 CZbg_405 CZve_583 CZam_720  CZg_766 CZam_862 &lt;br /&gt;
         292       78      277      102        8        1        2       25 &lt;br /&gt;
    CZbg_910   Km_921 CZam_946     NA's &lt;br /&gt;
          18        5        2  1009790 &lt;br /&gt;
    &amp;gt; proc.time()&lt;br /&gt;
       user  system elapsed &lt;br /&gt;
      8.061   2.016  10.048 &lt;br /&gt;
&lt;br /&gt;
== Problemas al correr ==&lt;br /&gt;
&lt;br /&gt;
=== Sin espacio en el disco ===&lt;br /&gt;
&lt;br /&gt;
Linux:  un problema común es que /tmp/ sea usado para archivos temporales a pesar de que normalmente es de un pequeño tamaño. Para cambiar a un directorio más grande, puede añadir si directorio &amp;lt;tt&amp;gt;$HOME/.bashrc&amp;lt;/tt&amp;gt; con la entrada:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cambiar directorio TMO o  R (nota: por supuesto que se puede ingresar cualquier otro directorio)&lt;br /&gt;
mkdir -p $HOME/tmp&lt;br /&gt;
export TMP=$HOME/tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La desventaja es que en los sistemas Linux modernos /tmp/ es un disco RAM rápido (basado en tempfs) mientras que los directorios HOME son generalmente más lentos (a menos que tenga una tarjeta SSD). Al menos no se va a terminar el espacio en disco rápidamente.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Linking to other languages]]&lt;br /&gt;
[[Category:R]]&lt;br /&gt;
[[Category:Statistics]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Shell_scripting/es&amp;diff=23311</id>
		<title>Shell scripting/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Shell_scripting/es&amp;diff=23311"/>
		<updated>2016-07-27T15:32:36Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Shell scripting/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== ¿Qué es esto? ===&lt;br /&gt;
&lt;br /&gt;
Esta página contiene información acerca de cómo hacer un script para la línea de comandos (shell) para GRASS GIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''La [https://es.wikipedia.org/wiki/Shell_%28inform%C3%A1tica%29 shell o intérprete de comandos]''' para los sistemas operativos Unix o similares a Unix, es esencialmente un intérprete o procesador de comandos, es una interfaz basada en texto a través de la cual  se pueden pasar instrucciones al sistema operativo de la computadora. Uno o más comandos pueden ser escritos en un script (normalmente en un archivo de texto) lo que, puede ser leido y ejecutado por la shell. La shell más usada probablemente es la [https://es.wikipedia.org/wiki/Bash bash].&lt;br /&gt;
&lt;br /&gt;
El hacer un '''script''' ('''scripting''')  es el acto de diseñar, escribir, probar, eliminar bugs, y mantener una serie de comandos que realizan una función específica, ya sea sencilla o compleja.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!''Note, content below transfered here from the page [http://grasswiki.osgeo.org/wiki/GRASS_and_Shell GRASS and Shell].''&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Haciendo un script para  GRASS ===&lt;br /&gt;
&lt;br /&gt;
Es bastante sencillo escribir un trabajo de GRASS como un script de Shell que lanza GRASS, hace la operación y limpia los archivos temporales.&lt;br /&gt;
&lt;br /&gt;
Normalmente, es conveniente automatizar los trabajos repetitivos. GRASS puede ser controlado a través de scripts del usuario para facilitar el trabajo diario. ¿Cómo empezar?, el usar la línea de comandos de algún modo es como hacer scripts pero sin guardarlos - así que puedes escribir tu '''primer script''' guardando los comandos ejecutados en un archivo de texto  (usa tu editor preferido, y de preferencia guarda el archivo en formato ASCII).&lt;br /&gt;
&lt;br /&gt;
'''Nota importante''': si no conoces sobre programación en la shell, y  consideras aprenderlo, mejor echa un vistazo a Python (ej. [[GRASS and Python]])...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Un primer script de shell de GRASS ==&lt;br /&gt;
&lt;br /&gt;
Los comentarios deben empezar con el caracter '#'. La primer línea indica qué intérprete de shell se va a utilizar, aquí es &amp;quot;sh&amp;quot; , que está en el directorio /bi/.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo sencillo, a correr dentro de una sesión de GRASS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# mi primer script,&lt;br /&gt;
# copyright, año, Autor&lt;br /&gt;
&lt;br /&gt;
# mostrar la configuración actual de la región&lt;br /&gt;
g.region -p&lt;br /&gt;
&lt;br /&gt;
# salir con estatus 0 que significa &amp;quot;ok&amp;quot;:&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda este archivo como &amp;quot;myscript.sh&amp;quot; y correlo dentro de GRASS GIS desde la línea de comandos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sh myscript.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debe mostrar la configuración de la región actual, finalizar y regresar a la línea de comandos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para '''buscar errores en la shell (debugin)''', correr:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sh -x myscript.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se mostrará cada línea lo cual ayuda a identificar errores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example 1 (simple):  d.rast.region ===&lt;br /&gt;
&lt;br /&gt;
Script para determinar la [[computational region/es]] a un mapa ráster ($1 es el parámetro para dar al script, aquí el nombre del mapa):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Autor: yo, hoy; copyright: GPL &amp;gt;= 2&lt;br /&gt;
# Propósito: script para determinar la región computacional a un mapa ráster&lt;br /&gt;
# Uso: d.rast.region rastermap&lt;br /&gt;
&lt;br /&gt;
g.region rast=$1&lt;br /&gt;
d.erase&lt;br /&gt;
d.rast $1&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usar la script en la localización &amp;quot;Nort Carolina&amp;quot;  de GRASS 6:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
d.mon x0&lt;br /&gt;
sh d.rast.region elev_state_500m&lt;br /&gt;
sh d.rast.region lsat7_2002_40&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo 2 (mejorado):  d.rast.region ===&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se asigna el primer parámetro ($1) dado al script (nombre del mapa) para una nueva variable que es más fácil para entender en el script. De nuevo, el script establece la región computacional a un mapa ráster, pero dice qué sucede:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Autor: yo, hoy; copyright: GPL &amp;gt;= 2&lt;br /&gt;
# Purprósito: script para establecer la región computacional a un mapa ráster&lt;br /&gt;
# Uso: d.rast.region rastermap&lt;br /&gt;
&lt;br /&gt;
# ser cuidadoso de no dejar espacios en blanco en la siguiente línea:&lt;br /&gt;
map=$1&lt;br /&gt;
g.message message=&amp;quot;Estableciendo la región computacional al mapa &amp;lt;$map&amp;gt;&amp;quot;&lt;br /&gt;
g.region rast=$map&lt;br /&gt;
d.erase&lt;br /&gt;
d.rast $map&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usando el script en la localización &amp;quot;North Carolina&amp;quot;: ver el ejemplo 1.&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo 3 (mejorado de nuevo):  d.rast.region ===&lt;br /&gt;
&lt;br /&gt;
Aquí se introduce la variable $0 que contiene el nombre del programa también como una prueba para mostrar el mapa especificado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Autor: yo, hoy; copyright: GPL &amp;gt;= 2&lt;br /&gt;
# Propósito: script para definir la región computacional un mapa ráster&lt;br /&gt;
# Uso: d.rast.region rastermap&lt;br /&gt;
&lt;br /&gt;
if [ $# -lt 1 ] ; then&lt;br /&gt;
   echo &amp;quot;Parámetro no definido. Uso&amp;quot;&lt;br /&gt;
   echo &amp;quot;   $0 rastermap&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
map=$1&lt;br /&gt;
g.message message=&amp;quot;Definiendo la región computacional al mapa &amp;lt;$map&amp;gt;&amp;quot;&lt;br /&gt;
g.region rast=$map&lt;br /&gt;
d.erase&lt;br /&gt;
d.rast $map&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para ver cómo funciona, es interesante usar el comprobador de errores de la shell (shell debugging):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
d.mon x0&lt;br /&gt;
sh -x d.rast.region elev_state_500m&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo 4: manipulación de parámetros ===&lt;br /&gt;
&lt;br /&gt;
Asume que quiere crear un script de shell para GRASS que tenga dos parámetro (coordenadas x y y) para calcular la cuenca relacionada con este punto de salida ({{cmd|r.water.outlet}}). En la shell, las variable $1 $2 y demás son parámetros que se pasan al script. Así, si se tiene un script llamado basin.sh y escribe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sh basin.sh -23.3 -47.7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La variable $1 será -23.3 y $2 será -47.6. En su script basin.sh puede usar la línea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
r.water.outlet drainage=&amp;quot;your_map&amp;quot; basin=&amp;quot;basin_map&amp;quot; easting=$2 northing=$1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De la misma manera, se puede pasar un tercer parámetro para el nombre del mapa base, etc.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, es altamente recomendable usar {{cmd|g.parser}} para la manipulación de los parámetros. Es más fácil y se crea una interfaz gráfica de manera automática, incluso,¡los mensajes estándar aparecerán ya traducidos! Se puede clonar a partir de scripts ya existentes, vea [http://trac.osgeo.org/grass/browser/grass/branches/releasebranch_6_4/scripts aquí algunos ejemplo].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usando la salida de los módulos de GRASS en el script ==&lt;br /&gt;
&lt;br /&gt;
Algunas veces necesita usar la salida de un módulo para el siguiente paso en un script. La mayoría de los módulos de GRASS que producen una salida numérica ofrecen una bandera &amp;quot;-g&amp;quot; para facilitar el parseado de los resultados. Junto con la función &amp;quot;eval&amp;quot; de la shell se puede reducir el esfuerzo de usar la salida en el siguiente paso. El truco es que el signo de igual es considerado para asignar una variable en la shell:&lt;br /&gt;
&lt;br /&gt;
   # Ejemplo en el conjunto de datos North Carolina&lt;br /&gt;
   inmap=elevation&lt;br /&gt;
   outmap=some_result&lt;br /&gt;
&lt;br /&gt;
Ejemplo para salida nomrnal de módulo:&lt;br /&gt;
   g.region rast=$inmap&lt;br /&gt;
   r.info -r $inmap&lt;br /&gt;
   min=55.57879&lt;br /&gt;
   max=156.3299&lt;br /&gt;
&lt;br /&gt;
Usando esto en un script:&lt;br /&gt;
   eval `r.info -r $inmap`&lt;br /&gt;
   r.mapcalc &amp;quot;$outmap = float($inmap) / $max&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Verificar:&lt;br /&gt;
   r.info -r $outmap&lt;br /&gt;
   min=0.355522472489405&lt;br /&gt;
   max=0.999999772928615&lt;br /&gt;
&lt;br /&gt;
== Mejores prácticas en la programación shell ==&lt;br /&gt;
&lt;br /&gt;
Hay muchos libros sobre el tema, y el tema estará sujeto a preferencias personales, pero aquí hay algunos tips. Para parches enviados a GRASS, por favor siga las guías de código definidas en los archivos &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;SUBMITTING&amp;lt;/source&amp;gt; en el directorio principal del código fuente.&lt;br /&gt;
&lt;br /&gt;
* trate de alcanzar 50% de comentarios, iniciando con el caracter # (ver arriba). De esta manera entenderá el script años después-&lt;br /&gt;
* añada un comentario inicial de qué es lo que hace el script&lt;br /&gt;
* estudie los scrips existentes, por ejemplo [http://trac.osgeo.org/grass/browser/grass/branches/releasebranch_6_4/scripts estos]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Manejo de errores:&lt;br /&gt;
&lt;br /&gt;
Un módulo que termina en un error fatal regresará un estatus no cero y salida (''non-zero exit status''), así que puede usar el comando con &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, etc., o probar el valor de &amp;lt;code&amp;gt;$?&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Insertando coordenadas en un módulo ráster a partir de un mapa vectorial de puntos ==&lt;br /&gt;
&lt;br /&gt;
Algunos módulos ráster tienen la opción &amp;lt;code&amp;gt;coordinates=&amp;lt;/code&amp;gt;, pero no tienen la opción para seleccionarlas a partir de un mapa vectorial de puntos. El siguiente ejemplo se refiere al módulo {{cmd|r.viewshed}}.&lt;br /&gt;
&lt;br /&gt;
Primero, debe tener un mapa vectorial con las coordenadas en la tabla de atributos; si no es así, añádalas con {{cmd|v.db.addcolumn}} y {{cmd|v.to.db}}.&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo 1: r.viewshed - seleccionando un solo punto a partir de un mapa vectorial ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Autor: Marco Curreli&lt;br /&gt;
# Uso: sh myviewshed.sh cat&lt;br /&gt;
# &amp;quot;cat&amp;quot; es la categoría del punto del mapa vectorial&lt;br /&gt;
&lt;br /&gt;
VECT=myvector&lt;br /&gt;
&lt;br /&gt;
ARG=1&lt;br /&gt;
E_ERR_ARG=65&lt;br /&gt;
if [ $# -ne &amp;quot;$ARG&amp;quot; ]&lt;br /&gt;
### Verifica el número de argumentos ###&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Usage: $0 cat&amp;quot;&lt;br /&gt;
  exit $E_ERR_ARG&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# coordenadas del punto&lt;br /&gt;
COR=$(v.db.select -c map=$VECT columns=x,y separator=, where=&amp;quot;cat = $1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
r.viewshed --verbose -c in=dtm out=visib_$1 coordinate=$COR obs_elev=2.75 memory=3000 stream_dir=tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo 2: r.viewshed - procesamiento en bloque para seleccionar puntos de un mapa vectorial ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Autor: Marco Curreli&lt;br /&gt;
# Uso: sh myviewshed_batch.sh cat1,cat2[,cat3,...] [cat3..catN]&lt;br /&gt;
# &amp;quot;cat&amp;quot; es la categoría del punto del mapa vectorial&lt;br /&gt;
# ejemplo: to selecting cats 1 3 5 6 7&lt;br /&gt;
# sh myviewshed_batch.sh 1,3 5..7&lt;br /&gt;
&lt;br /&gt;
VECT=myvector&lt;br /&gt;
&lt;br /&gt;
CAT1=$(&lt;br /&gt;
for index in $(eval echo {$1})&lt;br /&gt;
do&lt;br /&gt;
echo -n &amp;quot;$index &amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
CAT2=$(&lt;br /&gt;
for index in $(eval echo {$2})&lt;br /&gt;
do&lt;br /&gt;
echo -n &amp;quot;$index &amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
ARG=1&lt;br /&gt;
E_ERR_ARG=65&lt;br /&gt;
if [ $# -lt &amp;quot;$ARG&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Uso: $0 cat1,cat2[,cat3,...] [cat3..catN]&lt;br /&gt;
       se debe especificar al menos un argumento&amp;quot;&lt;br /&gt;
  exit $E_ERR_ARG&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# a trabajar con uno o dos argumentos&lt;br /&gt;
if [[ -n $2 ]]&lt;br /&gt;
then&lt;br /&gt;
CATS=$(echo $CAT1 $CAT2)&lt;br /&gt;
else&lt;br /&gt;
CATS=$(echo $CAT1)&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo categories: $CATS&lt;br /&gt;
&lt;br /&gt;
# lista de categorías con sus coordenadas&lt;br /&gt;
for i in $CATS&lt;br /&gt;
do&lt;br /&gt;
v.db.select -c map=$VECT columns=cat,x,y separator=,  where=&amp;quot;cat = $i&amp;quot; &amp;gt;&amp;gt; ${VECT}_coord.csv&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
PTI=$(echo $(cat ${VECT}_coord.csv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for p in $PTI&lt;br /&gt;
do&lt;br /&gt;
   set -- $p&lt;br /&gt;
&lt;br /&gt;
#coordenadas&lt;br /&gt;
CORD=$( echo $p | gawk -F &amp;quot;,&amp;quot; '{print $2&amp;quot;,&amp;quot;$3}')&lt;br /&gt;
&lt;br /&gt;
#categoría&lt;br /&gt;
CAT=$( echo $p | gawk -F &amp;quot;,&amp;quot; '{print $1}')&lt;br /&gt;
&lt;br /&gt;
r.viewshed --verbose --overwrite in=dtm out=visib_$CAT coordinate=$CORD obs_elev=2.75 memory=1500 stream_dir=tmp&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
rm ${VECT}_coord.csv&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Bash]]&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
[[Category:Linking to other languages]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics/es&amp;diff=23310</id>
		<title>GRASS raster semantics/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics/es&amp;diff=23310"/>
		<updated>2016-07-26T22:57:46Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: GRASS_raster_semantics/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;! A quick summary c/o Glynn Clements:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipos de precisión de mapas ráster ==&lt;br /&gt;
&lt;br /&gt;
* '''CELL DATA TYPE''': un mapa ráster de tipo INTEGER (enteros) (solamente números enteros).&lt;br /&gt;
* '''FCELL DATA TYPE''': un mapa ráster de tipo FLOAT (flotante) (4 bytes, precisión de 7-9 dígitos).&lt;br /&gt;
* '''DCELL DATA TYPE''': un mapa ráster de tipo DOUBLE (doble) (8 bytes, precisión de 15-17 dígitos).&lt;br /&gt;
* '''NULL''': representa &amp;quot;sin dato&amp;quot; en mapas ráster, debe distinguirse del valor 0.&lt;br /&gt;
&lt;br /&gt;
* '''INTEGER MAP''': ver CELL DATA TYPE&lt;br /&gt;
* '''FLOAT MAP''': ver  FCELL DATA TYPE&lt;br /&gt;
* '''DOUBLE MAP''': ver  DCELL DATA TYPE&lt;br /&gt;
&lt;br /&gt;
==Region Calculations==&lt;br /&gt;
&lt;br /&gt;
La &amp;quot;región actual&amp;quot; o &amp;quot;región computacional&amp;quot; es la configuración actual de los bordes de la región y de la resolución ráster actual. Note que la región computacional no está limitada por los datos ráster; puede también afectar algunas operaciones vectoriales.&lt;br /&gt;
&lt;br /&gt;
Los bordes de la región computacional describen un rectángulo en un espacio de dos dimensiones. Para operaciones ráster, este rectángulo es subdividido en una malla de celdas rectangulares, así, los bordes de la región están alineados con los límites de las celdas exteriores.&lt;br /&gt;
&lt;br /&gt;
Para más detalles, vea lo relativo a la [[Computational region/es| Región computacional]].&lt;br /&gt;
&lt;br /&gt;
==Localizaciones de la celda==&lt;br /&gt;
&lt;br /&gt;
* [[Grid registration|GRASS usa el registro de centros de celda no el registro de la malla de puntos]]&lt;br /&gt;
* La región ráster definida con  {{cmd|g.region}} se refiere a los límites del borde exterior que contiene a todas las celdas dentro de ésta.&lt;br /&gt;
&lt;br /&gt;
Las celdas son áreas, no puntos, así que no tienen una ubicación. Sus esquinas tienen ubicaciones, también sus centros.&lt;br /&gt;
&lt;br /&gt;
Una celda con un índice (i,j) (este, norte) corresponde al rectángulo:&lt;br /&gt;
&lt;br /&gt;
       { (x,y) : west + i * ewres &amp;lt;= x &amp;lt; west + (i+1) * ewres,&lt;br /&gt;
                 north - (j+1) * nsres &amp;lt;= y &amp;lt; north - j * nsres }&lt;br /&gt;
&lt;br /&gt;
cuyos centro está a:&lt;br /&gt;
&lt;br /&gt;
       (west + (i+1/2) * ewres, north - (j+1/2) * nsres)&lt;br /&gt;
&lt;br /&gt;
[Sujetos a wrapping de valores en localizaciones lat/lon]&lt;br /&gt;
&lt;br /&gt;
==Conversiones ráster a vectorial==&lt;br /&gt;
&lt;br /&gt;
IIRC, {{cmd|r.to.vect}} usa el punto medio de los contornos de la celda (i.e. una coordenada estará en una línea de la malla, la otra estará en medio de las líneas de la malla).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Remuestreo==&lt;br /&gt;
&lt;br /&gt;
(ver también [[Interpolation#Resampling_methods_and_interpolation_in_GRASS]])&lt;br /&gt;
&lt;br /&gt;
El método de remuestreo de datos ráster del vecino más cercano calcula el centro de cada celda y toma el valor de la celda ráster en que cayó el punto.&lt;br /&gt;
&lt;br /&gt;
Si el punto cae exactamente sobre una línea de malla, el resultado extacto será determinado por la dirección del  error de redondeo.&lt;br /&gt;
&lt;br /&gt;
[Una consecuencia de esto es que disminuir la resolución por u factor que es un número entero par muestreará exactamente el borde entre las celdas, lo cual significa que el resultado estará mal definido]&lt;br /&gt;
&lt;br /&gt;
El comando {{cmd|r.resample}}, módulo de remuestreo para datos discretos, utiliza el mismo método del vecino más cercano, así que produce resultados idénticos.&lt;br /&gt;
&lt;br /&gt;
El comando {{cmd|r.resamp.interp}} method=nearest usa el mismo algoritmo, pero no el mismo código, así que no produce resultados idénticos en los casos que son decididos por el redondeo de números de punto flotante.&lt;br /&gt;
&lt;br /&gt;
Para los métodos method=bilinear y method=bicubic, los valores ráster son tratados como muestras en cada centro de celda, definiendo una superficie continua por piezas. Los valores ráster resultantes son obtenidos al muestrear la superficie en cada centro de celda.&lt;br /&gt;
&lt;br /&gt;
Dado que el algoritmo solamente interpola, y no extrapola, un margen de 0.5 (para bilineal) y 1.5 (para bicúbico) celdas se pierden de la extensión original del ráster. Cualquier muestra que se tome dentro de este margen será nula.&lt;br /&gt;
&lt;br /&gt;
AFAIK, {{cmd|r.resamp.rst}} se comporta de manera similar, i.e. calcula una superficie asumiendo que los valores son muestras en cada centro de celda, y muestrea la superficie en cada centro de celda.&lt;br /&gt;
&lt;br /&gt;
Para {{cmd|r.resamp.stats}} sin -w, el valor de cada región de celda es el agregado escogido de los valores a partir de todas las celdas ráster cuyos centros caen dentro de los bordes de la región de la celda.&lt;br /&gt;
&lt;br /&gt;
Con -w, la muestra es ponderada de acuerdo a la proporción de la celda ráster que cae dentro de los bordes de la región de la celda, así el resultado normalmente [1] no es afectado por el error de redondeo (una minúscula diferencia en la posición del contorno resulta en una adición o substracción de una muestra ponderada por un factor minúsculo).&lt;br /&gt;
&lt;br /&gt;
[1] El mínimo y máximo agregados no pueden usar pesos, así -w no tiene efecto para estos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reglas generales==&lt;br /&gt;
&lt;br /&gt;
Para la mayor parte, la interpretación es la &amp;quot;obvia&amp;quot;, dado:&lt;br /&gt;
&lt;br /&gt;
# Las celdas son áreas y no puntos.&lt;br /&gt;
# Las operaciones que necesitan un punto (por ej. interpolación) usan el centro de la celda.&lt;br /&gt;
&lt;br /&gt;
== Manejando datos nulos (''NULL values'') ==&lt;br /&gt;
&lt;br /&gt;
=== Consideraciones generales ===&lt;br /&gt;
&lt;br /&gt;
El manejo de los datos nulos (sin dato) depende del tipo de  precisión. Para más detalles ver:&lt;br /&gt;
* http://grass.osgeo.org/programming7/rasterlib.html#Null_no_data&lt;br /&gt;
&lt;br /&gt;
=== {{cmd|r.mapcalc}} ===&lt;br /&gt;
&lt;br /&gt;
Casi todos los operadores y funciones regresan nulo si uno de sus argumentos es nulo.&lt;br /&gt;
&lt;br /&gt;
Las principales excepciones son:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;isnull(x)&amp;quot; regresa 0 si x no es nulo y 1 si x es nulo.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;if(1,a,b)&amp;quot; regresa a aun si b es nulo.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;if(0,a,b)&amp;quot; regresa b aun si a es nulo.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;eval(a,b,c,...,x)&amp;quot; regresa x aun si alguno de  a,b,c,... es nulo.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0 &amp;amp;&amp;amp;&amp;amp; x&amp;quot; y &amp;quot;x &amp;amp;&amp;amp;&amp;amp; 0&amp;quot; regresa 0 aun si x es nulo.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;1 ||| x&amp;quot; y &amp;quot;x ||| 1&amp;quot; regresa 1 aun si x es nulo.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;graph(x,x1,y1,...,xn,yn)&amp;quot; regresará nulo si x es nulo o alguno de los x[i] es nulo, o si un y[i] &amp;quot;relevante&amp;quot; es nulo. Pero no en donde y[i] que no sea usado para el cálculo sea nulo.&lt;br /&gt;
&lt;br /&gt;
Los operadores &amp;amp;&amp;amp;&amp;amp; y ||| son adiciones relativamente recientes, los antiguos operadores &amp;amp;&amp;amp; y || siguen el comportamiento tradicional para los nulos, i.e. regresan nulo si alguno de los operando es nulo.&lt;br /&gt;
&lt;br /&gt;
El comportamiento es intuitivo si se ve el nulo como representando una cantidad desconocida. Esto explica por qué tanto &amp;quot;x == null()&amp;quot; y &amp;quot;x !=null()&amp;quot; son siempre nulos, independientemente de si x es nulo o no nulo.&lt;br /&gt;
&lt;br /&gt;
null() es un valor desconocido, y lo continua siendo si se le iguala a un valor particular (conocido). Si x es nulo también, entonces se tienen dos valores desconocidos, y es desconocido sean o no iguales los valores. &lt;br /&gt;
&lt;br /&gt;
En muchos sentidos, el comportamiento es similar al de NaN (''not a number'', ''no es un número'') de la aritmética de punto flotante.&lt;br /&gt;
&lt;br /&gt;
Con la excepción de los casos listados más arriba, r.mapcalc no trata de detectar casos &amp;quot;especiales&amp;quot; donde el resultado pueda ser deducido aun si uno de los operando es nulo. Por ejemplo, si x es nulo &amp;quot;x * 0&amp;quot;  es nulo y no es cero, &amp;quot;x == x&amp;quot; es nulo y no 1, &amp;quot;x != x&amp;quot; es nulo y no 0, etc.&lt;br /&gt;
&lt;br /&gt;
Si tiene un mapa &amp;quot;booleano&amp;quot; en donde los valores son nulos o 1, normalmente quiere convertir los valores nulos a ceros (0), antes de realizar cualquier procesamiento. Puede reemplazar los nulos en un mapa existente usando por ejemplo &amp;quot;r.null null=0&amp;quot; o ajustar las pruebas con r.mapcalc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operaciones aritméticas ==&lt;br /&gt;
&lt;br /&gt;
r.mapcalc: las operaciones aritméticas con tipos mixtos promueven el tipo menor al tipo mayor, donde CELL &amp;lt; FCELL &amp;lt; DCELL:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         |  CELL FCELL DCELL&lt;br /&gt;
   ------+------------------&lt;br /&gt;
    CELL |  CELL FCELL DCELL&lt;br /&gt;
   FCELL | FCELL FCELL DCELL&lt;br /&gt;
   DCELL | DCELL DCELL DCELL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notas de reglas para programadores==&lt;br /&gt;
Desde una perspectiva de programación, las funciones:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       G_row_to_northing()&lt;br /&gt;
       G_col_to_easting()&lt;br /&gt;
       G_northing_to_row()&lt;br /&gt;
       G_easting_to_col()&lt;br /&gt;
&lt;br /&gt;
todas transforman valores de puntos flotante.&lt;br /&gt;
&lt;br /&gt;
Pasar índices enteros de filas o columnas a las primeras dos funciones regresará las coordenadas de la celda de la esquina superior izquierda; para las coordenadas del centro, fila+0-5 y/o columna+0.5.&lt;br /&gt;
&lt;br /&gt;
De manera similar, las últimas dos funciones normalmente regresarán valores no enteros; use floor() para descartar la parte fraccionaria y obtener el índice de fila o columna de la celda dentro de la cual cae el punto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Interpolation]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics/es&amp;diff=23309</id>
		<title>GRASS raster semantics/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics/es&amp;diff=23309"/>
		<updated>2016-07-26T22:04:47Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para más detalles, vea lo relativo a la [[Computational region/es| Región computacional]].&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics/es&amp;diff=23308</id>
		<title>GRASS raster semantics/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics/es&amp;diff=23308"/>
		<updated>2016-07-26T22:04:17Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Created page with &amp;quot;Para más detalles, vea lo relativo a la Computational region/es.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para más detalles, vea lo relativo a la [[Computational region/es]].&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GIS_for_ArcGIS_users/es&amp;diff=23307</id>
		<title>GRASS GIS for ArcGIS users/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GIS_for_ArcGIS_users/es&amp;diff=23307"/>
		<updated>2016-07-26T20:06:22Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
''Esta es una guía para aquellas peronas que quieren migrar de ArcGIS a GRASS GIS, o que quieren aprender GRASS GIS pero ya están familiarizados con ArcGIS.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proyecciones ==&lt;br /&gt;
&lt;br /&gt;
ArcGIS soporta proyecciones al vuelo de los datos, GRASS GIS considera que ésta es una mala práctica y por tanto es necesario que los usuarios sean consistentes en el uso de la información de la proyección de los datos que ingresan al programa. Esta es una de las maneras en que GRASS GIS ayuda al usuario a facilitar la integridad de sus datos. Otras  maneras son el  mantener los datos geoespaciales ordenados y que sea necesario que todos los datos estén en un solo formato, por ej. el guardar los datos vectoriales en el formato topológico de GRASS. Sin embargo, tanto para datos ráster, como para vectoriales es posible enlazar los datos ({{cmd|r.external}}, {{cmd|v.external}}), en vez de importarlos y usar diferentes formatos de entrada, siempre y cuando respeten la proyección determinada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cuando los datos estén en una proyección diferente estos pueden ser importados a GRASS GIS usado los módulos {{cmd|r.import}} y {{cmd|v.import}}. Cuando los datos estén en otra Localización GRASS cuya proyección sea diferente a la deseada, se puede crear una Localización con la proyección deseada y usar los módulos  {{cmd|r.proj}} y {{cmd|v.proj}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez que se hayan importado los datos a la base de datos de GRASS GIS con la proyección adecuada, el usuario no tendrá que preocuparse de conversiones de proyección o incinsistencias y se puede concentrar en el análisis. En los módulos analíticos de GRASS GIS no es necesario definir la proyección de salida del resultado, cosa común en las herramientas de ArcGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datos, base de datos y formatos de archivos  ==&lt;br /&gt;
&lt;br /&gt;
En ArcGIS, el usuario generalemente tiene los datos en diferentes directorios dentro del disco. Básicamente todos los datos geoespaciales para GRASS GIS están en una base de datos GRASS GIS (un folder en un disco) Esta base de datos está dividida en ''Localizaciones'' (''Locations'') y las Localizaciones están divididas a su vez en ''Directorios de mapas'' (''Mapsets''). Cuando se inicializa GRASS GIS, el programa se conecta a ua base de datos, localizaciones y directorios de mapas especificados por el usuario.&lt;br /&gt;
&lt;br /&gt;
Al hacer esto, GRASS GIS es capaz de aplicar un sistema específico de organización de los datos. El sistema está diseñado para acomodar proyectos grandes y múltiples usuarios en un localización pero también es útil para individuos que desean tener sus datos bien organizados. Primero, los datos deben estar en un directorio llamado Directorio de bases de datos GRASS GIS. Puede tener uno o muchos de estos directorios en su disco. Este directorio contiene Localizaciones GRASS. Todos los datos en una localización tienen la misma proyección (sistema de coordenadas, datum). Una localización es un directorio que contiene Directorios de mapas GRASS. Un directorio de mapas contiene mapas (capas) ráster y vectoriales y otra información geoespacial.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para evitar cambios no deseados en los datos existentes, los módulos de GRASS GIS manejan la creación, modificación, cambio, copia o eliminación de aquellos datos que están guardados en el directorio de mapas en que se encutra el usuario (el directorio acutal). Cuando es necesario, los datos pueden ser copiados de otro directorio de mapas al directorio de mapas actual usando {{cmd|g.copy}}, por ejemplo, cuando uno necesita cambiar los atributos de un mapa vectorial que no le pertenece a uno(a).&lt;br /&gt;
&lt;br /&gt;
Los datos de otros Directorios de mepas están disponibles para lectura, así que se pueden usar para visualizar. De manera predeterminada, puede ver los datos del directorio de mapas actual y del directorio de mapas especial llamado PERMANENT, que debe estar presete en toda Localización. Si se desea, puede ver los datos de otros directorios de mapas (en la localización actual) usando Configuraciones &amp;gt; Entorno  de trabajo GRASS &amp;gt; Acceso a Directorio de mapas, o usando el módulo {{cmd|g.mapsets}}. Los datos e otras localizaciones son accesibles solamente si inicia GRASS GIS en esa localización. El acceso a datos de múltiples localizaciones no sería seguro por quqe los datos en diferentes localizaciones pueden estar en diferentes proyecciones (mientras que todos los directorios de mapas de una localización contienen datos en una proyección particular).&lt;br /&gt;
&lt;br /&gt;
También es posible enlazar datos de diferentes fuentes como por ejemplo GeoTIFF o bases de datos PostGIS.&lt;br /&gt;
&lt;br /&gt;
El sistema usado por GRASS GIS resulta en que siempre está definido dónde se van a crear los datos nuevos (el directorio de mapas actual). Todos los datos están en una sola proyección y en un formato consistente. El resultado es que una vez que los datos son importados, uno se puede concentrar en los análisis, y no en los formatos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los usuarios pueden seleccionar diferentes estrategias de cómo usar el directorio de bases de datos, localizaciones y directorios de mapas. Es común que los usuarios tengan un directorio de bases de datos GRASS GIS llamado &amp;lt;code&amp;gt;grassdata&amp;lt;/code&amp;gt;. Entonces cada localización es un proyecto mayor o un área de interés. Los directorios de mapas son proyectos menores, subproyectos, o tareas individuales. El directorio de mapas PERMANENT es usado para guardar los datos comunes a todos los directorios de mapas.&lt;br /&gt;
&lt;br /&gt;
La Localización y Directorio de mapas de GRASS GIS es en cierto sentido similar al archivo Geodatabase o al Personal Geodatabase, en que guardan todos los datos dentro en un solo formato.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cartografía ==&lt;br /&gt;
&lt;br /&gt;
ArcGIS tiene dos modos en la pantalla, uno es el estándar para ver e interactuar con los datos. El otro es un modo que es una herramienta de diseño de mapas. El ''Visualizador de mapas'' (''Map Display'') en la interfaz gráfica de usuario (GUI) de GRASS también está hecha para interactuar, pero contiene algunos elementos cartográficos básicos. La cartografía avanzada en GRASS GIS se hace en una aplicación separada (disponible desde la GUI) llamada ''Diseñador cartográfico'' o desde la línea de comados {{cmd|g.gui.psmap}}. Esta aplicación es la GUI para el módulo {{cmd|ps.map}}. Algunos usuarios de GRASS GIS prefieren la GUI por que es conveniente y sencilla, otros prefieren {{cmd|ps.map}}, otros prefieren combinar con la visualización estándar con un editor de gráficas profesional como [https://inkscape.org/ Inkscape], y otros más prefieren usar [http://qgis.org/ QGIS] para realizar tareas cartográficas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: the following is more introductory manual, possibly create manual from this version and include more comparisons here --&amp;gt;&lt;br /&gt;
El visualizador estádar en GRASS GIS está bien adaptado a visualización estándar y exploración de los datos geoespaciales. También es posible usarlo para crear salidas cartográficas básicas, por ej. para publicaciones científicas, dado que se pueden visualizar elementos básicos como la escala, la leyenda de datos ráster. Esta funcionalidad está disponible desde la GUI en el ''Visualizador de mapas'' y es controlada también en el ''Administrador de capas''. La funcionalidad también está disponible desde la línea de comandos, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.rast elevation&lt;br /&gt;
&lt;br /&gt;
mostrará un mapa de elevación en el visualizador. Comandos como este pueden ser usados para controlar el visualizador en la GUI, para controlar visualizadores gráficos independientes, o para automatizar la creación de mapas. Para las últimas dos opciones se usa el módulo {{cmd|d.mon}}. Por ejemplo,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.mon wx0&lt;br /&gt;
&lt;br /&gt;
abre una ventana nueva que es similar al ''Visualizador de mapas'' en la GUI, pero es controlado principalmente por los módulos de visualización (&amp;lt;code&amp;gt;d.*&amp;lt;/code&amp;gt;), como el ya mencionado  {{cmd|d.rast}}. Adicionalmente, {{cmd|d.mon}} puede ser usado para crear imágenes directamente, por ejemplo la siguiente serie de comandos crea una imagen PNG de un mapa ráster con un vectorial de arroyos sobre él:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 g.region raster=elevation&lt;br /&gt;
 d.mon start=cairo output=map.png&lt;br /&gt;
 d.rast map=elevation&lt;br /&gt;
 d.vect map=streams&lt;br /&gt;
 d.mon stop=cairo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto se puede escribir para Python como:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as script&lt;br /&gt;
gscript.run_command('g.region', raster='elevation')&lt;br /&gt;
gscript.run_command('d.mon', start='cairo', output='map.png')&lt;br /&gt;
gscript.run_command('d.rast', map='elevation')&lt;br /&gt;
gscript.run_command('d.vect', map='streams')&lt;br /&gt;
gscript.run_command('d.mon', stop='cairo')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aun cuando no se use la línea de comandos o Python uno puede sacar provecho de la línea de comandos dado que en la GUI los comandos son mostrados, y pueden ser copiados y guardados o compartidos. Por ejemplo, uno puede definir un estilo en la GUI, copiar el comando y obtener algo como la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.vect map=streets color=255:165:0 width_column=SPEED width_scale=0.07&lt;br /&gt;
&lt;br /&gt;
Esto puede ser guardado en un archivo de texto, y compartido por correo electrónico o incluido en un material de estudio para clases. Al final, el comando puede ser usado en la GUI para obtener exactamente la misma salida previamente obtenida.&lt;br /&gt;
&lt;br /&gt;
El visualizador estándar tiene sus limitaciones, pero pueden ser sobrepasadas. Por ejemplo, las líneas solamente pueden tener un color, así, cuando se quiere visualizar las líneas de contorno de un color diferente, es es necesario mostrar la línea dos veces, una como una línea gruesa con el color de borde, y otra un poco más delgada con el color interno.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.vect map=streets color=255:204:109 width=4&lt;br /&gt;
 d.vect map=streets color=255:165:0 width=8&lt;br /&gt;
&lt;br /&gt;
[[File:Vector_lines_roads.png|200px|thumb|right|Line with border created using two {{cmd|d.vect}} commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios también combinan el visualizador estándar con programas de manipulación de vectores como Inkscape, que les da mayores capacidades gŕaficas. Cuando se automatiza la creación de mapas en Python, se pueden combinar múltiples imágenes y luego editarlas usando paquetes de procesamiento de imagenes de Python como  [https://pypi.python.org/pypi/PIL PIL] (o [https://pypi.python.org/pypi/Pillow/ Pillow]) o [http://www.imagemagick.org ImageMagic].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visualización 3D ==&lt;br /&gt;
&lt;br /&gt;
En GRASS GIS, la vista 3D está integrada a la GUI principal mientras que en ArcGIS está separada en una herramienta llamada ArcScene. La librería que está detrás de la vista 3D se llama NVIZ. La integración de NVIZ a la GUI  wxGUI se llama wxNVIZ. La visualización 3D también se puede llamar desde la línea de comandos o en Python con el módulo  {{cmd|m.nviz.image}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: rewrite the above to be more how to use it, then the definition --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En GRASS GIS, cuando se está en una visualización 2D se puede cambiar a una 3D, todas las capas de mapa ráster son añadidas automaticamete como superficies en la vista 3D. Esto significa que si tiene un modelo de elevación 2D, lo verá como 3D. El color es igual al color que tiene en 2D. Esto es diferente de ArcScene donde las capas ráster son planas inicialmente y se tienen que especificar en propiedades cuál ráster se va a usar para crear la superficie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Raster algebra ==&lt;br /&gt;
&lt;br /&gt;
Actualmente la calculadora ráster de ArcGIS está implementada en Python. Algunas partes de la sintaxis son similares, mientras que otras difieren. En GRASS GIS el álgebra de mapas ráster se hace a través del módulo {{cmd|r.mapcalc}} (implementado en C) o a través de la GUI con la ''Calculadora de Mapas Ráster''. La sintaxis de {{cmd|r.mapcalc}} está diseñada específicamente para álgebra de mapas ráster y está basada en la sintáxis de C (Python también es un lenguaje tipo C). Ambas sintaxis son sensibles a mayúsulas y minúsculas, como es usual en los lenguajes tipo C.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comillas ===&lt;br /&gt;
&lt;br /&gt;
En ArcGIS los nombres de las capas para el álgebra de mapas deben estar entrecomilladas. En GRASS GIS, las comillas son opcionales y generalmente no se usan. Hay algunos pocos caos en donde son necesarias y esto es cuando los nombres de los mapas ráster contienen guiones (&amp;quot;-&amp;quot;), que pueden ser confundidos con el operador menos. Sin embargo, la mejor pŕactica es no usar guines en los nombres de los mapas (dado que el nombre debe ser utilizable en SQL sin necesidad de entrecomillado). Cuando se escribe un script de  Python y quiere que sea realmente robusto, quizás quiera usar el entrecomillado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Espacios en blanco ===&lt;br /&gt;
&lt;br /&gt;
En ArcGIS los operadores de álgebra de mapas deben estar separados por espacios e blanco. En GRASS GIS, los espacios alrededor de los operadores son opcionales, sin embargo, es una buena práctica el usarlos (lo mismo que en Python o C).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operadores ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ArcGIS&lt;br /&gt;
! GRASS GIS&lt;br /&gt;
! Notas&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&lt;br /&gt;
| &amp;amp;&amp;amp;&lt;br /&gt;
| El operador booleano (lógico) Y es un ampersand (&amp;lt;tt&amp;gt;&amp;amp;&amp;lt;/tt&amp;gt;) en ArcGIS. En GRASS GIS, el operador booleano Y son dos  (&amp;lt;tt&amp;gt;&amp;amp;&amp;amp;&amp;lt;/tt&amp;gt;), lo mismo que en C. Note que &amp;lt;tt&amp;gt;&amp;amp;&amp;lt;/tt&amp;gt; es el operador Y bitwise en GRASS GIS (también en Python o en C). También está el operador &amp;lt;tt&amp;gt;&amp;amp;&amp;amp;&amp;amp;&amp;lt;/tt&amp;gt; en GRASS GIS que no propaga los valores nulos (que es el comportamiento estándar), los trata como falsos.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| La diferencia entre ArcGIS y GRASS GIS en cuando al operador booleano (lógico) O es igual a la del operador booleano Y. En GRASS GIS hay un operador bitwise  &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; uno booleano (logico) &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; y &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;|||&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;. El operador &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; preserva los valores nulos (como se espera de manera predeterminada), y el operador &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;|||&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; evalúa los valores nulos como falsos, lo que a veces es ventajoso.&lt;br /&gt;
|-&lt;br /&gt;
| ~&lt;br /&gt;
| !&lt;br /&gt;
| En GRASS GIS el operador NO es (un) signo de exclamación (&amp;lt;tt&amp;gt;!&amp;lt;/tt&amp;gt;), lo cual es igual a C. El equivalente en ArcGIS es la tilde (&amp;lt;tt&amp;gt;~&amp;lt;/tt&amp;gt;), mientras que en GRASS GIS la tilde es el operador NO bitwise, lo mismo que en C o Python.&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
| xor()&lt;br /&gt;
| En ArcGIS el gorrito (&amp;lt;tt&amp;gt;^&amp;lt;/tt&amp;gt;) representa el operador booleano O excluyente (XOR), mientras que en GRASS GIS este representa el exponencial (una operación matemática). En GRASS GIS el operador booleano O excluyente se obtiene con la función &amp;lt;tt&amp;gt;xor()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La expresión de álgebra de mapas en ArcGIS que calcula el NDVI, para la Calculadora ráster en la GUI (el nombre de salida se ingresa de maera separada):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Float(&amp;quot;lsat7_40&amp;quot; - &amp;quot;lsat7_30&amp;quot;) / Float(&amp;quot;lsat7_40&amp;quot; + &amp;quot;lsat7_30&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La misma expresión en GRASS GIS para la calculadora de ráster en la GUI (el nombre de salida se ingresa de manera separada):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 float(lsat7_2002_40 - lsat7_2002_30) / float(lsat7_2002_40 + lsat7_2002_30)&lt;br /&gt;
&lt;br /&gt;
La misma expresión escrita en la línea de comandos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r.mapcalc &amp;quot;ndvi = float(lsat7_2002_40 - lsat7_2002_30) / float(lsat7_2002_40 + lsat7_2002_30)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consulte la lista de operadores disponibles en GRASS GIS en el manual de {{cmd|r.mapcalc}}.&lt;br /&gt;
&lt;br /&gt;
=== Funciones ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ArcGIS&lt;br /&gt;
! GRASS GIS&lt;br /&gt;
! Notas&lt;br /&gt;
|-&lt;br /&gt;
| Con(a, b, c), Con(a, b, c, d)&lt;br /&gt;
| if(a, b, c)&lt;br /&gt;
| La sentencia condicional más usada (la sentencia si, ''if'') tanto en ArcGIS como en GRASS GIS son funciones de álgebra de mapas tres parámetros, primero está la condición (condition), luego el valor que se usará si se cumple la condición (&amp;quot;if-part&amp;quot;) y en tercer lugar el valor que se usará si la condición no se cumple (&amp;quot;else-part&amp;quot;). ArcGIS soporta también una sintaxis con cuatro parámetros cuando el primero solo es un ráster y el cuarto es una sentencia condicional SQL. GRASS GIS también tiene una versión de cuatro parámetros, pero esta es conveniente para el caso en donde se necesita decidir etre tres valores basandose en el primer parámetro (ráster o expresió) menor, mayor o igual a cero.   &amp;lt;!-- the other difference might be that SQL where might go to raster attribute table --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Con(a, b)&lt;br /&gt;
| if(a, b, null())&lt;br /&gt;
| En ArcGIS la expresión  &amp;lt;tt&amp;gt;Con(a, b)&amp;lt;/tt&amp;gt; dará un dato nulo (sin dato, ''NULL''), si &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; es verdadero (o no cero). En GRASS GIS, la expresion &amp;lt;tt&amp;gt;if(a, b)&amp;lt;/tt&amp;gt; dará 0 (un número cero) en este caso. Así, se hace explícito el valor &amp;lt;tt&amp;gt;null()&amp;lt;/tt&amp;gt; cuando &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; sea falso (o cero) usando un tercer parámetro. La sintaxis general es &amp;lt;tt&amp;gt;if(a, b, c)&amp;lt;/tt&amp;gt; y esta es preferida por que es explícita y no es necesario recordar el valor especial de otras versiones cuando se lee la expresión.&lt;br /&gt;
|-&lt;br /&gt;
| SetNull(a, b), SetNull(a, b, c)&lt;br /&gt;
| if(a, null(), b)&lt;br /&gt;
| La función de ArcGIS &amp;lt;tt&amp;gt;SetNull&amp;lt;/tt&amp;gt; da un valor nulo cuando su primer parámetro es verdadero. El tercer parámetro, opcional, es una sentencia SQL que es usada en vez de la expresión (primer parámetro). La función GRASS GIS para dar valores nulos cuando no se cumple la condición es la función estándar &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;, función usada con tres parámetros cuando el segundo es &amp;lt;tt&amp;gt;null()&amp;lt;/tt&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| IsNull()&lt;br /&gt;
| isnull()&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Int()&lt;br /&gt;
| int()&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Float()&lt;br /&gt;
| float(), double()&lt;br /&gt;
| GRASS GIS tiene dos tipos de números de punto flotante. El primero es el de single precision que corresponde al mapa tipo FCELL. El segundo es el double precision que corresponde al mapa DCELL.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una expresión en ArcGIS a usar con el valor ''landclass'' cuando ''ladclass'' es 1 o 2 y nulo (SinDato) de otro modo:&lt;br /&gt;
&lt;br /&gt;
 Con( (&amp;quot;landclass&amp;quot; == 1) | (&amp;quot;landclass&amp;quot; == 2), &amp;quot;landclass&amp;quot;, null())&lt;br /&gt;
&lt;br /&gt;
La misma expresión en álgebra de mapas de GRASS GIS, en la GUI:&lt;br /&gt;
&lt;br /&gt;
 if(landclass == 1 || landclass == 2, landclass, null())&lt;br /&gt;
&lt;br /&gt;
En la línea de comandos se usa el módulo {{cmd|r.mapcalc}}, empieza con el nombre de la salida y toda la expresión entre comillas (como necesita la línea de comandos).&lt;br /&gt;
&lt;br /&gt;
Una expresión en ArgGIS que usa los valores del ráster ''landclass'' cuando ''lakes'' contiene valores nulos (SinDatos) y usa los valores del ráster ''lakes'' de otro modo:&lt;br /&gt;
&lt;br /&gt;
 Con(IsNull(&amp;quot;lakes&amp;quot;), &amp;quot;landclass&amp;quot;, &amp;quot;lakes&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La misma expresión en la línea de comandos de GRASS GIS:&lt;br /&gt;
&lt;br /&gt;
 r.mapcalc &amp;quot;land = if(isnull(lakes), landclass, lakes)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
En este caso las expresiones son muy similares. La diferencia son las minúsculas &amp;lt;code&amp;gt;isnull&amp;lt;/code&amp;gt;. Para la línea de comandos se añaden comillas al inicio y final de la expresión.&lt;br /&gt;
&lt;br /&gt;
Vea la lista de funciones disponibles en GRASS GIS en el manual de {{cmd|r.mapcalc}}.&lt;br /&gt;
&lt;br /&gt;
=== Más notas ===&lt;br /&gt;
&lt;br /&gt;
Note que hay diferentes álgebras en GRASS GIS, esto es, hay un álgebra 3D que es similar a la 2D con algunas diferencias, y hay también una adaptada a datos temporales (álgebra temporal), que contiene sintaxis adicionales para funcionar con datos espacio temporales. Hay también un módulo de Complemento  que soporta álgebra de mapas vectoriales, y está disponible en el repositorio de complementos de extensión.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interfaz Python ==&lt;br /&gt;
&lt;br /&gt;
=== Importando cajas de herramientas y revisar una licencia ===&lt;br /&gt;
&lt;br /&gt;
Un script de Python en ArcGIS revisa si una determinada extensión está disponible, i.e. si la licencia para usarla es adecuada. En GRASS GIS, todos los módulos disponibles están incluidos en la instalación estándar y no es necesario revisar si la extensión está presente o si se tiene la licencia para usarla. Consecuentemente, lo siguiente no tiene equivalente en GRASS GIS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=Python&amp;gt;&lt;br /&gt;
# revisar si se tiene la licencia  de la extensión de Análisis espacial (''Spatial Analyst'')&lt;br /&gt;
arcpy.CheckOutExtension(&amp;quot;Spatial&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En ArcGIS las herramientas de otras fuentes pueden ser usadas en Python luego de llamar la función &amp;lt;code&amp;gt;ImportToolbox()&amp;lt;/code&amp;gt;. En GRASS GIS, las herramientas de otras fuentes (módulos o conjuntos de módulos) están previamente instaladas con el módulo {{cmd|g.extension}}. Lo siguiente usualmente no se hace e GRASS GIS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=Python&amp;gt;&lt;br /&gt;
arcpy.ImportToolbox(&amp;quot;d:/toolsdir/sometools.tbx&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sin embargo, cualquier módulo en GRASS GIS puede ser llamado desde Python, así que si se quisiera instalar alguna herramienta o solamente asegurarse de que esté instalada y actualizada, se puede llamar {{cmd|g.extension}} desde Python:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=Python&amp;gt;&lt;br /&gt;
gscript.run_command('g.extension', extension='v.sometool')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El módulo {{cmd|g.extension}} puede instalar módulos (extensiones, complementos) desde diferentes fuentes. Sin embargo, la fuente más usual es el repositorio oficial de Complementos de GRASS GIS que contiene un rango amplio de módulos contribuidos por los usuarios. Vea el manual de {{cmd|g.extension}} para su versión de GRASS GIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Análisis de costes ==&lt;br /&gt;
Las superficies de coste son definidas de modo diferente en GRASS GIS y en ArcGIS. La superficie de coste en GRASS GIS es ''a través de una celda'' (''cross a cell'') mientras que en ArcGIS es el coste ''a través de una unidad de mapa'' (''cross one map unit''). Por ejemplo definimos el coste como tiempo y tenemos celdas de 30 m y la velocidad es de 5 m/s. El coste de una celda es de 6 s e GRASS mientras que es de 0.2 s e ArcGIS.&lt;br /&gt;
&lt;br /&gt;
== Direcciones de flujo ==&lt;br /&gt;
Como la función FLOWDIRECTION de ArcGIS, GRASS también puede crear un ráster de dirección de flujo, dando a cada celda un valor entero que representa una de las 8 direcciones de flujo de la celda. En ambos programas la dirección de flujo es determinada encontrando cual de las celdas que la rodean tiene la menor elevación. Sin embargo, el valor que cada software utiliza es diferente. En ArcGIS, las direcciones de flujo son numeradas desde el este en dirección de las manecillas del reloj, y cada dirección es dos veces la anterior. Así, cuando la dirección de flujo es al este de la celda, la celda tiene un valor de 1. Cuando es al sur este de 2. Una celda con dirección de flujo al este tiene un valor de 4, y así hasta el noreste, que tiene un valor de 128. Los detalles de este procedimiento se presentan en [http://resources.arcgis.com/en/help/main/10.1/index.html#//009z00000052000000 el sitio web de ArcGIS]).&lt;br /&gt;
&lt;br /&gt;
GRASS numera las direcciones de flujo en contra de las manecillas del reloj, con el noreste tomando el valor de 1, el norte 2, noreste 3, oeste 4, y así hasta el 8 (este).&lt;br /&gt;
&lt;br /&gt;
Dos diferencias adicionales entre la implementación de GRASS y la de Arc:&lt;br /&gt;
&lt;br /&gt;
* ¿Qué pasa cuando dos o más celdas de los alrededores tienen la misma elevación y la dirección de flujo es ambigua? GRASS usa el algoritmo de búsqueda de Ruta del menor coste (''Least Cost Path'') para &amp;quot;ver hacia adelante&amp;quot; más allá de las celdas que rodea al punto, para encontrar una tendencia. Este procedimiento da resultados más reales en áreas planas. De manera similar el procedimiento de GRASS trabaja bien con sumideros, sin que sea necesario un procedimiento de &amp;quot;llenado de sumideros&amp;quot;. ArcGIS requiere un MDE sin sumideros, y las celdas con dirección de flujo ambiguas se les da el valor de la suma de las direcciones ambiguas.&lt;br /&gt;
&lt;br /&gt;
* ¿Qué pasa en la región del borde, cuando la dirección de flujo va más allá del mapa? En este caso GRASS escoge la dirección de flujo pero establece su valor como negativo. ArcGIS no indica de ninguna manera espcial que el flujo está fuera de la región. Sin embargo hay una bandera en ArcGIS que fuerza a las celdas del borde a fluir fuera del mapa.&lt;br /&gt;
&lt;br /&gt;
Supongamos que necesita convertir un ráster de direcciónes de flujo creado con GRASS al esquema numérico de ArcGIS. Esto se consigue definiendo una tabla de valores de reclasificación y corriedo el módulo &amp;lt;nowiki&amp;gt;r.reclass&amp;lt;/nowiki&amp;gt;. Por ejemplo con esta tabla de reclasificación:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 1   -1 || = 128&lt;br /&gt;
|-&lt;br /&gt;
| 2   -2 || =64&lt;br /&gt;
|-&lt;br /&gt;
| 3   -3 || =32&lt;br /&gt;
|-&lt;br /&gt;
| 4   -4 || =16&lt;br /&gt;
|-&lt;br /&gt;
| 5   -5 || =8&lt;br /&gt;
|-&lt;br /&gt;
| 6   -6 || =4&lt;br /&gt;
|-&lt;br /&gt;
| 7   -7 || =2&lt;br /&gt;
|-&lt;br /&gt;
| 8   -8 || =1&lt;br /&gt;
|-&lt;br /&gt;
| 0 || =255&lt;br /&gt;
|}&lt;br /&gt;
(Descrito con más detalle en  [http://www.surfaces.co.il/flow-direction-from-grass-to-arcgis/  Flow Directions from GRASS to ArcGIS])&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[Terminology comparison between ArcGIS and GRASS GIS]]&lt;br /&gt;
* [[Tips for Arc users]]&lt;br /&gt;
* [[GRASS migration hints]]&lt;br /&gt;
* [[Performance comparison GRASS vs. ArcGIS]]&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
* [http://gracilis.carleton.ca/CUOSGwiki/index.php/Comparative_Analysis_of_Cost_Path_Analysis_In_Grass_GIS_and_ArcMap Comparative Analysis of Cost Path Analysis In Grass GIS and ArcMap] at Carleton University Open Source GIS&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category:ArcGIS]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GIS_for_ArcGIS_users/es&amp;diff=23306</id>
		<title>GRASS GIS for ArcGIS users/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GIS_for_ArcGIS_users/es&amp;diff=23306"/>
		<updated>2016-07-26T03:12:14Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: GRASS GIS for ArcGIS users/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Trans|Spanish|English}}&lt;br /&gt;
&lt;br /&gt;
''Esta es una guía para aquellas peronas que quieren migrar de ArcGIS a GRASS GIS, o que quieren aprender GRASS GIS pero ya están familiarizados con ArcGIS''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proyecciones ==&lt;br /&gt;
&lt;br /&gt;
ArcGIS soporta proyecciones al vuelo de los datos, GRASS GIS considera que ésta es una mala práctica y por tanto es necesario que los usuarios sean consistentes en el uso de la información de la proyección de los datos que ingresan al programa. Esta es una de las maneras en que GRASS GIS ayuda al usuario a facilitar la integridad de sus datos. Otras  maneras son el  mantener los datos geoespaciales ordenados y que sea necesario que todos los datos estén en un solo formato, por ej. el guardar los datos vectoriales en el formato topológico de GRASS. Sin embargo, tanto para datos ráster, como para vectoriales es posible enlazar los datos ({{cmd|r.external}}, {{cmd|v.external}}), en vez de importarlos y usar diferentes formatos de entrada, siempre y cuando respeten la proyección determinada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cuando los datos estén en una proyección diferente estos pueden ser importados a GRASS GIS usado los módulos {{cmd|r.import}} y {{cmd|v.import}}. Cuando los datos estén en otra Localización GRASS cuya proyección sea diferente a la deseada, se puede crear una Localización con la proyección deseada y usar los módulos  {{cmd|r.proj}} y {{cmd|v.proj}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez que se hayan importado los datos a la base de datos de GRASS GIS con la proyección adecuada, el usuario no tendrá que preocuparse de conversiones de proyección o incinsistencias y se puede concentrar en el análisis. En los módulos analíticos de GRASS GIS no es necesario definir la proyección de salida del resultado, cosa común en las herramientas de ArcGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datos, base de datos y formatos de archivos  ==&lt;br /&gt;
&lt;br /&gt;
En ArcGIS, el usuario generalemente tiene los datos en diferentes directorios dentro del disco. Básicamente todos los datos geoespaciales para GRASS GIS están en una base de datos GRASS GIS (un folder en un disco) Esta base de datos está dividida en ''Localizaciones'' (''Locations'') y las Localizaciones están divididas a su vez en ''Directorios de mapas'' (''Mapsets''). Cuando se inicializa GRASS GIS, el programa se conecta a ua base de datos, localizaciones y directorios de mapas especificados por el usuario.&lt;br /&gt;
&lt;br /&gt;
Al hacer esto, GRASS GIS es capaz de aplicar un sistema específico de organización de los datos. El sistema está diseñado para acomodar proyectos grandes y múltiples usuarios en un localización pero también es útil para individuos que desean tener sus datos bien organizados. Primero, los datos deben estar en un directorio llamado Directorio de bases de datos GRASS GIS. Puede tener uno o muchos de estos directorios en su disco. Este directorio contiene Localizaciones GRASS. Todos los datos en una localización tienen la misma proyección (sistema de coordenadas, datum). Una localización es un directorio que contiene Directorios de mapas GRASS. Un directorio de mapas contiene mapas (capas) ráster y vectoriales y otra información geoespacial.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para evitar cambios no deseados en los datos existentes, los módulos de GRASS GIS manejan la creación, modificación, cambio, copia o eliminación de aquellos datos que están guardados en el directorio de mapas en que se encutra el usuario (el directorio acutal). Cuando es necesario, los datos pueden ser copiados de otro directorio de mapas al directorio de mapas actual usando {{cmd|g.copy}}, por ejemplo, cuando uno necesita cambiar los atributos de un mapa vectorial que no le pertenece a uno(a).&lt;br /&gt;
&lt;br /&gt;
Los datos de otros Directorios de mepas están disponibles para lectura, así que se pueden usar para visualizar. De manera predeterminada, puede ver los datos del directorio de mapas actual y del directorio de mapas especial llamado PERMANENT, que debe estar presete en toda Localización. Si se desea, puede ver los datos de otros directorios de mapas (en la localización actual) usando Configuraciones &amp;gt; Entorno  de trabajo GRASS &amp;gt; Acceso a Directorio de mapas, o usando el módulo {{cmd|g.mapsets}}. Los datos e otras localizaciones son accesibles solamente si inicia GRASS GIS en esa localización. El acceso a datos de múltiples localizaciones no sería seguro por quqe los datos en diferentes localizaciones pueden estar en diferentes proyecciones (mientras que todos los directorios de mapas de una localización contienen datos en una proyección particular).&lt;br /&gt;
&lt;br /&gt;
También es posible enlazar datos de diferentes fuentes como por ejemplo GeoTIFF o bases de datos PostGIS.&lt;br /&gt;
&lt;br /&gt;
El sistema usado por GRASS GIS resulta en que siempre está definido dónde se van a crear los datos nuevos (el directorio de mapas actual). Todos los datos están en una sola proyección y en un formato consistente. El resultado es que una vez que los datos son importados, uno se puede concentrar en los análisis, y no en los formatos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los usuarios pueden seleccionar diferentes estrategias de cómo usar el directorio de bases de datos, localizaciones y directorios de mapas. Es común que los usuarios tengan un directorio de bases de datos GRASS GIS llamado &amp;lt;code&amp;gt;grassdata&amp;lt;/code&amp;gt;. Entonces cada localización es un proyecto mayor o un área de interés. Los directorios de mapas son proyectos menores, subproyectos, o tareas individuales. El directorio de mapas PERMANENT es usado para guardar los datos comunes a todos los directorios de mapas.&lt;br /&gt;
&lt;br /&gt;
La Localización y Directorio de mapas de GRASS GIS es en cierto sentido similar al archivo Geodatabase o al Personal Geodatabase, en que guardan todos los datos dentro en un solo formato.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cartografía ==&lt;br /&gt;
&lt;br /&gt;
ArcGIS tiene dos modos en la pantalla, uno es el estándar para ver e interactuar con los datos. El otro es un modo que es una herramienta de diseño de mapas. El ''Visualizador de mapas'' (''Map Display'') en la interfaz gráfica de usuario (GUI) de GRASS también está hecha para interactuar, pero contiene algunos elementos cartográficos básicos. La cartografía avanzada en GRASS GIS se hace en una aplicación separada (disponible desde la GUI) llamada ''Diseñador cartográfico'' o desde la línea de comados {{cmd|g.gui.psmap}}. Esta aplicación es la GUI para el módulo {{cmd|ps.map}}. Algunos usuarios de GRASS GIS prefieren la GUI por que es conveniente y sencilla, otros prefieren {{cmd|ps.map}}, otros prefieren combinar con la visualización estándar con un editor de gráficas profesional como [https://inkscape.org/ Inkscape], y otros más prefieren usar [http://qgis.org/ QGIS] para realizar tareas cartográficas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: the following is more introductory manual, possibly create manual from this version and include more comparisons here --&amp;gt;&lt;br /&gt;
El visualizador estádar en GRASS GIS está bien adaptado a visualización estándar y exploración de los datos geoespaciales. También es posible usarlo para crear salidas cartográficas básicas, por ej. para publicaciones científicas, dado que se pueden visualizar elementos básicos como la escala, la leyenda de datos ráster. Esta funcionalidad está disponible desde la GUI en el ''Visualizador de mapas'' y es controlada también en el ''Administrador de capas''. La funcionalidad también está disponible desde la línea de comandos, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.rast elevation&lt;br /&gt;
&lt;br /&gt;
mostrará un mapa de elevación en el visualizador. Comandos como este pueden ser usados para controlar el visualizador en la GUI, para controlar visualizadores gráficos independientes, o para automatizar la creación de mapas. Para las últimas dos opciones se usa el módulo {{cmd|d.mon}}. Por ejemplo,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.mon wx0&lt;br /&gt;
&lt;br /&gt;
abre una ventana nueva que es similar al ''Visualizador de mapas'' en la GUI, pero es controlado principalmente por los módulos de visualización (&amp;lt;code&amp;gt;d.*&amp;lt;/code&amp;gt;), como el ya mencionado  {{cmd|d.rast}}. Adicionalmente, {{cmd|d.mon}} puede ser usado para crear imágenes directamente, por ejemplo la siguiente serie de comandos crea una imagen PNG de un mapa ráster con un vectorial de arroyos sobre él:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 g.region raster=elevation&lt;br /&gt;
 d.mon start=cairo output=map.png&lt;br /&gt;
 d.rast map=elevation&lt;br /&gt;
 d.vect map=streams&lt;br /&gt;
 d.mon stop=cairo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto se puede escribir para Python como:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as script&lt;br /&gt;
gscript.run_command('g.region', raster='elevation')&lt;br /&gt;
gscript.run_command('d.mon', start='cairo', output='map.png')&lt;br /&gt;
gscript.run_command('d.rast', map='elevation')&lt;br /&gt;
gscript.run_command('d.vect', map='streams')&lt;br /&gt;
gscript.run_command('d.mon', stop='cairo')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aun cuando no se use la línea de comandos o Python uno puede sacar provecho de la línea de comandos dado que en la GUI los comandos son mostrados, y pueden ser copiados y guardados o compartidos. Por ejemplo, uno puede definir un estilo en la GUI, copiar el comando y obtener algo como la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.vect map=streets color=255:165:0 width_column=SPEED width_scale=0.07&lt;br /&gt;
&lt;br /&gt;
Esto puede ser guardado en un archivo de texto, y compartido por correo electrónico o incluido en un material de estudio para clases. Al final, el comando puede ser usado en la GUI para obtener exactamente la misma salida previamente obtenida.&lt;br /&gt;
&lt;br /&gt;
El visualizador estándar tiene sus limitaciones, pero pueden ser sobrepasadas. Por ejemplo, las líneas solamente pueden tener un color, así, cuando se quiere visualizar las líneas de contorno de un color diferente, es es necesario mostrar la línea dos veces, una como una línea gruesa con el color de borde, y otra un poco más delgada con el color interno.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 d.vect map=streets color=255:204:109 width=4&lt;br /&gt;
 d.vect map=streets color=255:165:0 width=8&lt;br /&gt;
&lt;br /&gt;
[[File:Vector_lines_roads.png|200px|thumb|right|Line with border created using two {{cmd|d.vect}} commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios también combinan el visualizador estándar con programas de manipulación de vectores como Inkscape, que les da mayores capacidades gŕaficas. Cuando se automatiza la creación de mapas en Python, se pueden combinar múltiples imágenes y luego editarlas usando paquetes de procesamiento de imagenes de Python como  [https://pypi.python.org/pypi/PIL PIL] (o [https://pypi.python.org/pypi/Pillow/ Pillow]) o [http://www.imagemagick.org ImageMagic].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visualización 3D ==&lt;br /&gt;
&lt;br /&gt;
En GRASS GIS, la vista 3D está integrada a la GUI principal mientras que en ArcGIS está separada en una herramienta llamada ArcScene. La librería que está detrás de la vista 3D se llama NVIZ. La integración de NVIZ a la GUI  wxGUI se llama wxNVIZ. La visualización 3D también se puede llamar desde la línea de comandos o en Python con el módulo  {{cmd|m.nviz.image}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: rewrite the above to be more how to use it, then the definition --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En GRASS GIS, cuando se está en una visualización 2D se puede cambiar a una 3D, todas las capas de mapa ráster son añadidas automaticamete como superficies en la vista 3D. Esto significa que si tiene un modelo de elevación 2D, lo verá como 3D. El color es igual al color que tiene en 2D. Esto es diferente de ArcScene donde las capas ráster son planas inicialmente y se tienen que especificar en propiedades cuál ráster se va a usar para crear la superficie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Raster algebra ==&lt;br /&gt;
&lt;br /&gt;
Actualmente la calculadora ráster de ArcGIS está implementada en Python. Algunas partes de la sintaxis son similares, mientras que otras difieren. En GRASS GIS el álgebra de mapas ráster se hace a través del módulo {{cmd|r.mapcalc}} (implementado en C) o a través de la GUI con la ''Calculadora de Mapas Ráster''. La sintaxis de {{cmd|r.mapcalc}} está diseñada específicamente para álgebra de mapas ráster y está basada en la sintáxis de C (Python también es un lenguaje tipo C). Ambas sintaxis son sensibles a mayúsulas y minúsculas, como es usual en los lenguajes tipo C.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comillas ===&lt;br /&gt;
&lt;br /&gt;
En ArcGIS los nombres de las capas para el álgebra de mapas deben estar entrecomilladas. En GRASS GIS, las comillas son opcionales y generalmente no se usan. Hay algunos pocos caos en donde son necesarias y esto es cuando los nombres de los mapas ráster contienen guiones (&amp;quot;-&amp;quot;), que pueden ser confundidos con el operador menos. Sin embargo, la mejor pŕactica es no usar guines en los nombres de los mapas (dado que el nombre debe ser utilizable en SQL sin necesidad de entrecomillado). Cuando se escribe un script de  Python y quiere que sea realmente robusto, quizás quiera usar el entrecomillado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Espacios en blanco ===&lt;br /&gt;
&lt;br /&gt;
En ArcGIS los operadores de álgebra de mapas deben estar separados por espacios e blanco. En GRASS GIS, los espacios alrededor de los operadores son opcionales, sin embargo, es una buena práctica el usarlos (lo mismo que en Python o C).&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category:ArcGIS]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer&amp;diff=23305</id>
		<title>Vector Buffer</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer&amp;diff=23305"/>
		<updated>2016-07-22T18:20:23Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Q:''' How to create a vector buffer around polygons/areas/points in GRASS &amp;gt;= 5.7:&lt;br /&gt;
&lt;br /&gt;
'''A:''' buffer around vector features can be easily generated with:&lt;br /&gt;
 v.buffer in=polygonmap out=in=polygonmap_buf buffer=200 type=area&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Vector]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer/es&amp;diff=23304</id>
		<title>Vector Buffer/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer/es&amp;diff=23304"/>
		<updated>2016-07-22T18:20:05Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''P:''' ¿Cómo crear un buffer vectorial alrededor de un área/polígono/punto vectorial?&lt;br /&gt;
&lt;br /&gt;
'''R:''' Se usa el comando {{cmd|v.buffer}}, por ejemplo para hacer un buffer alrededor de  áreas:&lt;br /&gt;
 v.buffer input=polygonmap out=polygonmap_buf buffer=200 type=area&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer&amp;diff=23303</id>
		<title>Vector Buffer</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer&amp;diff=23303"/>
		<updated>2016-07-22T18:19:40Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Q:''' How to create a vector buffer around polygons/areas/points in GRASS &amp;gt;= 5.7:&lt;br /&gt;
&lt;br /&gt;
'''A:''' buffer around vector features can be easily generated with:&lt;br /&gt;
 v.buffer in=polygonmap out=in=polygonmap_buf buffer=200&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Vector]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer/es&amp;diff=23302</id>
		<title>Vector Buffer/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Vector_Buffer/es&amp;diff=23302"/>
		<updated>2016-07-22T18:19:17Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: vector buffer/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''P:''' ¿Cómo crear un buffer vectorial alrededor de un área/polígono/punto vectorial?&lt;br /&gt;
&lt;br /&gt;
'''R:''' Se usa el comando {{cmd|v.buffer}}, por ejemplo para hacer un buffer alrededor de un área:&lt;br /&gt;
 v.buffer input=polygonmap out=polygonmap_buf buffer=200 type=area&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Computational_region/es&amp;diff=23301</id>
		<title>Computational region/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Computational_region/es&amp;diff=23301"/>
		<updated>2016-07-22T16:36:31Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Computational region/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La región actual o región computacional es la configuración actual de los límites de la región y la resolución ráster actual.&lt;br /&gt;
&lt;br /&gt;
Como regla general, en GRASS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Los mapas ráster siempre son importados de '''manera completa''' con su propia resolucióntheir (a excepción de capas WMS importadas).&lt;br /&gt;
#Los mapas vectoriales siempre son importados de '''manera completa''' &lt;br /&gt;
#En los cálculos,&lt;br /&gt;
##los mapas ráster de '''entrada''' ('''input''') son automáticamente recortados y reescalados (usando el método de remuestreo de vecino más cercano) para igualar a la región actual y producir el mapa ráster de salida o para consultar valores.&lt;br /&gt;
##Los mapas ráster de '''salida''' ('''output''') tienen su contorno y resolución igual a la de la región computacional actual.&lt;br /&gt;
##Los mapas vectoriales siempre son considerados '''de manera completa'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Consejo''' para usuarios que están migrando desde otros softwares: &amp;lt;br&amp;gt;&lt;br /&gt;
La región actual o región computacional puede ser considerada como la '''región de interés''' (ROI).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FAQs  ===&lt;br /&gt;
&lt;br /&gt;
'''P:''' ¡No veo nada!&lt;br /&gt;
&lt;br /&gt;
'''R:''' Normalmente se debe a que  la región computacional se establece a un área que no cubre el mapa ráster de interés. Use el comando {{cmd|g.region}} para ajustar la configuración de la región, por ejemplo al definirla de acuerdo a un mapa ráster:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.region rast=myrastermap -p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Usando la interfaz gráfica de usuario:'''&lt;br /&gt;
&lt;br /&gt;
Acercar al mapa seleccionado:&lt;br /&gt;
&lt;br /&gt;
[[Image:Wxgui zoom to raster.png|350px|center|thumb|wxGUI: acercar al mapa seleccionado (menú desplegable con el botón derecho del ratón sobre el nombre del mapa)]]&lt;br /&gt;
&lt;br /&gt;
Definir la región computacional a partir de un mapa seleccionado:&lt;br /&gt;
&lt;br /&gt;
[[Image:Wxgui computat region to raster.png|350px|center|thumb|wxGUI: definir la región computacional a partir de un mapa seleccionado (menú desplegable con el botón derecho del ratón sobre el nombre del mapa)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; '''P:''' !La resolución de mi región no es la que yo quisiera¡&lt;br /&gt;
&lt;br /&gt;
'''R:'''  Algunas veces la resolución de la región computacional no coincide exactamente con la resolución ingresada en {{cmd|g.region}}. Aquí hay un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.region rast=myrastermap res=1 -p&lt;br /&gt;
(...)&lt;br /&gt;
nsres:      0.9993515&lt;br /&gt;
ewres:      1.00025576&lt;br /&gt;
(...)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para forzar a que la región computacional coincida con la resolución ingresada, use la bandera -a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.region rast=myrastermap res=1 -ap&lt;br /&gt;
(...)&lt;br /&gt;
nsres:      1&lt;br /&gt;
ewres:      1&lt;br /&gt;
(...)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; '''P:''' El mapa ráster se ve muy feo.&lt;br /&gt;
&lt;br /&gt;
'''A:''' La resolución de la región computacional no coincide con la resolución del mapa ráster. Use {{cmd|g.region}} para ajustar la configuración de la resolución de la región computacional o defínala de acuerdo a un mapa ráster (ver arriba).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; '''P:''' Obtengo &amp;quot;xyz module: G_malloc error&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''R:''' Seguramente se intentó usar más memoria de lo que tu computadora ofrece, lo cual es causado normalmente por una resolución ráster demasiado grante (o una región computacional demasiado grande). Por ejemplo, no tiene sentido calcular datos de un MDE a ua resolución de ráster de nanómetros. Establecer la extensión de la región y la resolución de manera adecuada con {{cmd|g.region}} (en la wxGUI: menú Configuraciones -&amp;gt; Región -&amp;gt; Mostrar región | Establecer región).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''P:''' !Quiero hacer un recorte de un mapa ráster!&lt;br /&gt;
&lt;br /&gt;
'''R:''' Esto se hace al vuelo definiendo la región computacional de manera adecuada, puede crear un recorte de un mapa ráster copia con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
r.mapcalc &amp;quot;subset = original_map&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [[Location and Mapsets]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Crop_a_shapefile_during_import/es&amp;diff=23300</id>
		<title>Crop a shapefile during import/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Crop_a_shapefile_during_import/es&amp;diff=23300"/>
		<updated>2016-07-22T15:53:06Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Crop a shapefile during import/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''P:''' ¿Es posible recortar un archivo SHAPE durante la importación a GRASS (importar solamente una subregión)?&lt;br /&gt;
&lt;br /&gt;
'''R:''' Sí, es muy sencillo:&lt;br /&gt;
&lt;br /&gt;
Primero defina la [[región computacional]] de interés, con &lt;br /&gt;
&lt;br /&gt;
   {{cmd|g.region}} -p e=&amp;lt;borde este&amp;gt; w=&amp;lt;borde oeste&amp;gt; n=&amp;lt;norte&amp;gt; s=&amp;lt;sur&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego simplemente limita la importación del archivo SHAPE a la región actual:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   {{cmd|v.in.ogr}} -r vectmap.shp out=vectmap&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Import]]&lt;br /&gt;
[[Category: Vector]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Cropping_maps/es&amp;diff=23299</id>
		<title>Cropping maps/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Cropping_maps/es&amp;diff=23299"/>
		<updated>2016-07-22T15:48:24Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: Creating Cropping maps/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El recortar un mapa significa agarrar el contenido de un mapa (''fuente'') y eliminar todos los datos que están fuera del área de estudio (''contorno'') para crear un nuevo mapa más pequeño (''mapa recortado''). Las técnicas difieren dependiendo de si los datos de entrada (fuente) son ráster o vectoriales y si el contorno es definido por otro mapa o si es definido por coordenadas. Quizás quiera hacerlo con datos vectoriales dado que GRASS siempre opera sobre todo el mapa vectorial, aun cuando los elementos estén fuera de la de la región en que se encuentra el usuario ([[current region]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa vectorial como fuente''' y  '''mapa vectorial como contorno'''. Use&lt;br /&gt;
 {{cmd|v.overlay}} operator=and&lt;br /&gt;
&lt;br /&gt;
Ejemplo: tiene un mapa de carreteras de Estados Unidos y quiere un mapa que contenga solamente los caminos de California. Antes el módulo &amp;lt;tt&amp;gt;v.cutter&amp;lt;/tt&amp;gt;  hacía esa tarea; sin embargo, se reemplazó por {{cmd|v.overlay}} en la versión 6 de GRASS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa vectorial como fuente''' y '''coordenadas como contorno'''. Definir la región a las coordenas deseadas  ({{cmd|g.region}}), crear un nuevo mvectorial a partir de la extensión de la región para usar el contorno  {{cmd|v.in.region}}, entonces  {{cmd|v.overlay}} como antes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De otro modo, considere [[Crop a shapefile during import]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa ráster como fuente''' y '''mapa ráster como contorno'''. Hacer un contorno usado {{cmd|r.mask}} luego copiar mapa ráster fuente a un nuevo mapa con el comando ({{cmd|g.copy}}). Todas las celdas fuera de la máscara serán omitidas al hacer la copia. De manera alternativa se puede usar el comando {{cmd|r.mapcalc}}:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.mapcalc}} &amp;quot;cropped = if(boundary,raster_source)&amp;quot;&lt;br /&gt;
{{cmd|r.colors}} map=cropped rast=source # puede requerir transferir la tabla de colores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mapa ráster como fuente''' y '''contorno vectorial'''. Convierte el vectorial a una máscara ráster (1 en la zona dentro, null (nulo) de otro modo):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.to.rast}} in=vector_boundary out=raster_boundary use=val value=1&lt;br /&gt;
&lt;br /&gt;
Luego se procesa como arriba para dos mapas ráster.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=How_the_Open_Source_software_development_model_works/es&amp;diff=23298</id>
		<title>How the Open Source software development model works/es</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=How_the_Open_Source_software_development_model_works/es&amp;diff=23298"/>
		<updated>2016-07-22T15:27:38Z</updated>

		<summary type="html">&lt;p&gt;⚠️Dat: How the Open Source software development model works/es&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How the Open Source software development model works ==&lt;br /&gt;
&lt;br /&gt;
GRASS difiere de muchos otros softwares SIGs usados en el mundo profesional en que su desarrollo y distribución se da de usuarios para usuarios; principalmente por volutariado, se da de manera gratuita y libre.&lt;br /&gt;
&lt;br /&gt;
El énfasis se hace en la interoperabilidad y acceso no limitado a los datos así como en la flexibilidad del software y la tasa de evolución (al añadir nuevos elementos y minimizar los bugs)&lt;br /&gt;
&lt;br /&gt;
''Libre'' (''Free'') puede tener muchos significados, como ilustran los enlaces siguientes, y dentro de un proyecto normalmente hay un espectro de filosofías y metas entre los desarrolladores. Pero funciona - el Software Libre ha revolucionado muchos sectores del mundo de la computación en pocos años y lo continua haciendo el día de hoy.&lt;br /&gt;
&lt;br /&gt;
* [http://www.gnu.org/philosophy/philosophy.html Philosophy of the Free Software Movement]&lt;br /&gt;
* [http://www.opensource.org The Open Source Initiative has a good explanation]&lt;br /&gt;
* [http://www.fsf.org The Free Software Foundation]&lt;br /&gt;
* [http://www.gnu.org/copyleft/gpl.html The GNU General Public License]&lt;br /&gt;
* [http://producingoss.com/ Producing Open Source Software] (book)&lt;br /&gt;
&lt;br /&gt;
Artículos:&lt;br /&gt;
* D. Rocchini, M. Neteler, 2012: Let the four freedoms paradigm apply to ecology. Trends in Ecology &amp;amp; Evolution, Vol. 27, No. 6. (June 2012), pp. 310-311 [http://tinyurl.com/tree-four-freedoms doi:10.1016/j.tree.2012.03.009]&lt;br /&gt;
&lt;br /&gt;
== Relacionados con GRASS ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/markusN/community-based-software-development-the-grass-gis-project Community based software development: The GRASS GIS project] (presentation)&lt;br /&gt;
* [http://www.slideshare.net/markusN/scaling-up-globally-30-years-of-foss4g-development-keynote-at-foss4gcee-2013-romania Scaling up globally: 30 years of FOSS4G development] (presentation)&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Promotion]]&lt;br /&gt;
[[Category:Languages/es]]&lt;/div&gt;</summary>
		<author><name>⚠️Dat</name></author>
	</entry>
</feed>