From de1c278c8e39ce0a41160d88058d628119b90b79 Mon Sep 17 00:00:00 2001 From: evilla713 Date: Fri, 24 Apr 2026 10:27:06 -0700 Subject: [PATCH] Spanish spanish translations --- .../modeling_movement/GRASS_movement_es.qmd | 570 +++++++ .../GRASS_remotesensing_es.qmd | 728 ++++++++ .../terrain_and_DEMs/GRASS_terrain_es.qmd | 1096 ++++++++++++ .../thematic_maps/thematic_maps_es.qmd | 1463 +++++++++++++++++ 4 files changed, 3857 insertions(+) create mode 100644 content/tutorials/modeling_movement/GRASS_movement_es.qmd create mode 100644 content/tutorials/remote_sensing_visualization/GRASS_remotesensing_es.qmd create mode 100644 content/tutorials/terrain_and_DEMs/GRASS_terrain_es.qmd create mode 100644 content/tutorials/thematic_maps/thematic_maps_es.qmd diff --git a/content/tutorials/modeling_movement/GRASS_movement_es.qmd b/content/tutorials/modeling_movement/GRASS_movement_es.qmd new file mode 100644 index 0000000..416e8b4 --- /dev/null +++ b/content/tutorials/modeling_movement/GRASS_movement_es.qmd @@ -0,0 +1,570 @@ +--- +title: "Modelado del movimiento en GRASS" +author: "Michael Barton, Anna Petrasova, y Eunice Villaseñor Iribe" +date: 2025-02-10 +date-modified: today +format: + html: + embed-resources: true + toc: true + code-tools: true + code-copy: true + code-fold: false +page-layout: article +categories: [intermediate, advanced, GUI, raster, cost surface, least cost path] +description: Generación de una superficie de costo acumulativo y ruta de menor costo con *r.walk* y *r.path* para modelar el movimiento caminando a través de un paisaje. +image: img_movement/thumbnail.webp +execute: + eval: false +copyright: + holder: Michael Barton, Anna Petrasova, y Eunice Villaseñor Iribe + year: 2026 +funding: "La creación de este tutorial fue financiada en parte por la subvención FAIN 2303651 de la Fundación Nacional de Ciencias de los Estados Unidos." + +--- +GRASS cuenta con herramientas sofisticadas para modelar el movimiento a través del terreno, incluyendo [r.cost](https://grass.osgeo.org/grass-stable/manuals/r.cost.html), [r.walk](https://grass.osgeo.org/grass-stable/manuals/r.walk.html), [r.drain](https://grass.osgeo.org/grass-stable/manuals/r.drain.html) y [r.path](https://grass.osgeo.org/grass-stable/manuals/r.path.html). En este tutorial, utilizaremos ***r.walk*** y ***r.path*** para determinar la mejor ruta a pie para llegar a un destino, como un hospital. + +::: {.callout-note title="Dataset"} +Este tutorial utiliza uno de los conjuntos de datos de muestra estándar de GRASS: flagstaff_arizona_usa. Nos referiremos a los nombres de los lugares en ese conjunto de datos, pero se puede completar con cualquiera de los [conjuntos de datos de muestra estándar](https://grass.osgeo.org/download/data/) para cualquier región; por ejemplo, el [conjunto de datos de Carolina del Norte](https://grass.osgeo.org/sampledata/north_carolina/nc_basic_spm_grass7.zip). Utilizaremos el modelo digital de *elevación* (elevation)(MDE) de Flagstaff, el archivo de puntos vectoriales de los *hospitales* (hospitals) (cualquier otro archivo de puntos vectoriales servirá) y el mapa ráster de *uso del suelo* (landuse). + +Este tutorial está diseñado para que puedas completarlo utilizando la **interfaz gráfica de usuario de GRASS**, comandos de GRASS desde la **consola o terminal**, o utilizando comandos de GRASS en un entorno de **Jupyter Notebook**. +::: + +::: {.callout-note title="Don't know how to get started?"} +Si no está seguro de cómo empezar a usar GRASS con su interfaz gráfica de usuario o con Python, consulte los tutoriales [Get started with GRASS GIS GUI](../get_started/fast_track.qmd) y [Get started with GRASS & Python in Jupyter Notebooks](../get_started/fast_track_grass_and_python.qmd).. +::: + +## ¿Qué es una superficie de costos? + +::::: grid +::: g-col-6 + +- Una **superficie de costes** (cost surface) es una cuadrícula en la que cada celda representa el “coste” o la dificultad de desplazarse por el terreno. + +- Una **superficie de costo acumulado** (accumulated cost surface) muestra el costo total acumulado de desplazarse desde un punto de partida hasta una ubicación. Las superficies de costo acumulado también se utilizan para encontrar la **ruta de menor costo** (lowest cost route) entre una ubicación y el punto de partida. + +- La herramienta GRASS [r.walk](https://grass.osgeo.org/grass-stable/manuals/r.walk.html) genera una superficie de costo acumulativo utilizando la regla de Naismith para tiempos de caminata donde cada celda tiene el valor en **segundos** (seconds) del tiempo que se tarda en caminar desde el punto de inicio hasta esa celda. +::: + +::: g-col-6 +![superficie de costes](img_movement/GRASS_movement_0.webp){fig-align="right" width="100%"} +::: +::::: + +# Modelado del movimiento con una superficie de costo acumulativo + +## Descripción general + +::::: grid +::: g-col-6 + +1. Comience con un **modelo digital de elevación** (digital elevation model) para determinar los costos de movimiento. + +2. Cree un **mapa de fricción** (friction map) con un valor de 0 (u otros valores para costos de movimiento adicionales). + +3. Seleccione el/los **punto(s) de inicio** (starting point(s)). + +4. Cree una **superficie de costos** (cost surface). + +5. A continuación, se puede calcular la ruta de **menor costo** (least cost) entre cualquier punto de la superficie de costos y el punto de inicio. +::: + +::: g-col-6 +![DEM](img_movement/GRASS_movement_1.webp) +::: +::::: + +## Mapa de fricción + +- La calculadora de mapas de GRASS (https://grass.osgeo.org/grass-stable/manuals/r.mapcalc.html) permite crear, modificar o combinar mapas mediante álgebra cartográfica. Puede utilizarse desde la interfaz gráfica o como comando. + +- Antes de crear un mapa de fricción, asegúrese de que la región de cálculo coincida con el mapa de elevación. + +- Cree el mapa *friction0* con un valor de 0 en cada celda. + +:::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Agregue el ráster de *elevación* (elevation) al Administrador de capas. + +2. Haga clic derecho en *elevación* (elevation) en el Administrador de capas. + +3. Seleccione **Establecer región de cálculo a partir del mapa seleccionado** (Set calculation region based on the selected map). + +4. Abra la **Calculadora de mapas ráster** (Raster map calculator) desde la barra de herramientas superior (icono de "ábaco"). + +5. Ingrese el nombre del mapa de salida como *fricción0* e introduzca 0 en el campo de expresión. + +6. Pulse Ejecutar. +::: + +::: g-col-6 +![Calculadora de mapas ráster](img_movement/GRASS_movement_2.webp) +::: +::::: + +#### Command line + +1. Configure la región para que coincida con el mapa de elevación. + +2. Cree un mapa de fricción con un valor de 0 en todas las celdas, que coincida con la extensión y la resolución del mapa de elevación. + +```{python} +g.region raster=elevation +r.mapcalc "friction0 = 0" +``` + +#### Python + +1. Configure la región para que coincida con el mapa de elevación. + +2. Cree un mapa de fricción con un valor de 0 en todas las celdas, que coincida con la extensión y la resolución del mapa de elevación. + +```{python} +gs.run_command("g.region", raster="elevation") +gs.mapcalc("friction0 = 0") +``` +:::::: + +## Elige un punto de partida + +- Ahora que tenemos un mapa DEM del terreno y un mapa de fricción, para crear una superficie de costos acumulativos solo necesitamos un punto de partida: el punto desde el cual calcular los costos de movimiento. + +- Un punto de partida puede ser un vector, una celda ráster o incluso un par de coordenadas. + +- Una superficie de costos en *r.walk* puede tener varios puntos de partida. + +- Tomaremos como punto de partida el Centro Médico de Flagstaff, que se encuentra en el archivo de vectores *hospitales* (hospitals). + +:::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 +Utilice el **Administrador de tablas de atributos** (Attribute table manager) para *hospitales* (hospitals): + +1. Visualiza el mapa de hospitales añadiéndolo al Administrador de capas desde el Catálogo de datos. + +2. Haz clic derecho y abre el Administrador de tablas de atributos. + +3. Selecciona el registro "Flagstaff Medical Center". + +4. Haz clic derecho y selecciona **Extraer entidades seleccionadas** (Extract selected entities) en el menú contextual. + +5. Nombra el nuevo mapa como *FMC*. +::: + +::: g-col-6 +![Herramienta de tabla de datos para mapas de puntos vectoriales de hospitales](img_movement/GRASS_movement_3.webp) + +![menú contextual de fila de tabla](img_movement/GRASS_movement_4.webp){width="60%"} +::: +::::: + +#### Command line + +Utilice la herramienta v.extract para crear un mapa de puntos vectoriales llamado *FMC* a partir del mapa *hospitales* (hospitals). + +```{python} +v.extract input=hospitals type=point where="FACILITY_N = 'FLAGSTAFF MEDICAL CENTER'" output=FMC +``` + +#### Python + +Utilice la herramienta v.extract para crear un mapa de puntos vectoriales llamado *FMC* a partir del mapa *hospitales* (hospitals). + +```{python} +gs.run_command("v.extract", input="hospitals", type="point", where="FACILITY_N = 'FLAGSTAFF MEDICAL CENTER'", output="FMC") +``` +:::::: + +- Utilice la herramienta *d.vect* haciendo doble clic en FMC en el administrador de capas para mostrar el punto con un color y un tamaño para verlo mejor. + +![](img_movement/GRASS_movement_5.webp) + +## Generar la superficie de costo acumulado {#generate-cumulative-cost-surface} + +::::::::::::: {.panel-tabset group="language"} + +#### GUI + +- Utilice la herramienta *r.walk* del menú **Análisis ráster/terreno** (Raster/terrain analysis). + +::::: grid +::: g-col-6 + +1. Introduzca el **mapa de elevación** (elevation map) ( *elevación* (elevation)), el **mapa de fricción** (friction map) (*friction0*) y el **nombre de la superficie de coste** (name of the cost surface) que se va a crear (FMC_cost_seconds). + +![](img_movement/GRASS_movement_6.webp){fig-align="left" width="100%"} +::: + +::: g-col-6 +2. Introduzca el nombre de un **mapa de direcciones** (direction map) ( *FMC_directions* ) que se utilizará para crear una ruta de menor coste. + +![](img_movement/GRASS_movement_7.webp){fig-align="left" width="100%"} +::: +::::: + +::::: grid +::: g-col-6 +3. Introduzca el **punto de inicio** (starting point) ( *FMC* ). + +![](img_movement/GRASS_movement_8.webp){fig-align="left" width="100%"} +::: + +::: g-col-6 +4. Opcional: controlar la **extensión espacial** (spatial extent) de la superficie de costos. + +![](img_movement/GRASS_movement_9.webp) +::: +::::: + +::::: grid +::: g-col-6 +5. Opcional: ajuste la configuración de **Parámetro de movimiento** (Movement parameter). + +![](img_movement/GRASS_movement_10.webp){fig-align="left" width="100%"} +::: + +::: g-col-6 +6. Recomendado: seleccione **movimiento de caballero** (knight's move) para calcular el costo y la dirección. + +![](img_movement/GRASS_movement_11.webp){fig-align="left" width="100%"} +::: +::::: + +::: {.callout-note title="Tip"} +Haz clic en el botón "Copiar" para copiar el comando GRASS. Puedes guardarlo en un archivo de texto para usarlo posteriormente o para documentar tu trabajo. +::: + +#### Command line + +- Utilice el comando r.walk para generar la superficie de costo acumulado. + +```{python} +r.walk elevation=elevation friction=friction0 output=FMC_cost_seconds outdir=FMC_directions start_points=FMC -k +``` + +#### Python + +- Utilice el comando r.walk para generar la superficie de costo acumulado. + +```{python} +gs.run_command("r.walk", + elevation="elevation", + friction="friction0", + output="FMC_cost_seconds", + outdir="FMC_directions", + start_points="FMC", + flags="k") +``` +::::::::::::: + +## Mapa de superficie de costos acumulados + +- Cada valor de celda ráster en la superficie de costos representa el tiempo en segundos que se tarda en caminar desde FMC hasta esa celda sobre el terreno del modelo digital de elevación (DEM) de Flagstaff. + +![](img_movement/GRASS_movement_12.webp) + +::: {.callout-note title="Tip"} +Consejo: Puede mostrar la superficie de costo acumulado sobre un mapa de relieve sombreado en el **administrador de capas** utilizando la herramienta [d.shade](https://grass.osgeo.org/grass-stable/manuals/d.shade.html) y un mapa de relieve de *elevación* (elevation) creado con [r.relief](https://grass.osgeo.org/grass-stable/manuals/d.shade.html). +::: + +## Movimiento a través de una superficie de costo acumulativo {#movement-across-cost-surface} + +- Puedes convertir el tiempo de caminata de segundos a horas dividiendo el mapa por 3600 usando la calculadora de mapas. + +:::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Abre la calculadora de mapas. + +2. Introduce el nombre del nuevo mapa de tiempo de caminata en horas: *FMC_cost_hours*. + +3. Introduce FMC_cost_seconds / 3600 en el campo de expresiones. + +4. Pulsa Ejecutar. +::: + +::: g-col-6 +![](img_movement/GRASS_movement_13.webp){fig-align="left" width="100%"} +::: +::::: + +#### Command line + +```{python} +r.mapcalc "FMC_cost_hours = FMC_cost_seconds / 3600" +``` + +#### Python + +```{python} +gs.mapcalc("FMC_cost_hours = FMC_cost_seconds / 3600") +``` +:::::: + +------------------------------------------------------------------------ + +::::: grid +::: g-col-6 + +- Podemos consultar o filtrar esta superficie de coste acumulado por hora para mostrar áreas con un tiempo de caminata equivalente. + +- Por ejemplo, en el **administrador de capas** podemos usar la herramienta *d.rast* para mostrar el área dentro de un radio de 2 horas de caminata desde FMC y luego ajustar la opacidad de la superficie de coste al 50 % para ver el terreno subyacente. +::: + +::: g-col-6 +![](img_movement/GRASS_movement_15.webp) +::: +::::: + +![El área sombreada representa el terreno al que se puede llegar caminando en 2 horas desde FMC.](img_movement/GRASS_movement_14.webp) + +# Rutas de menor coste {#least-cost-path} + +## Descripción general + +- También podemos trazar una **ruta de menor costo** (least cost path) (LCP), que es la ruta menos costosa (de menor tiempo) entre cualquier punto de la superficie de costo acumulado y FMC. + +- Imaginemos a un excursionista varado al noreste de Flagstaff que tiene que caminar hasta FMC. + +- ¿Qué ruta le tomaría menos tiempo? + +![](img_movement/GRASS_movement_16.webp) + +## Generar la ruta de menor coste + +Para crear un LCP en GRASS, utilizaremos [r.path](https://grass.osgeo.org/grass-stable/manuals/r.path.html) (también en el menú de análisis de ráster/terreno). + +:::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Introduzca el **mapa de direcciones** (direction map) (*FMC_directions*) que también creamos cuando generamos la superficie de costos acumulados.\ + ![](img_movement/GRASS_movement_17.webp) +::: + +::: g-col-6 +2. Introduce las **coordenadas del excursionista** (477476,3914951) como punto de partida para el LCP. (También podríamos usar un punto vectorial predefinido). + +![](img_movement/GRASS_movement_18.webp) +::: +::::: + +:::: grid +::: g-col-6 +3. Especifique el **nombre del mapa de ruta del vector de salida** (output vector route map name) (*LCP_cumulative*). + +![](img_movement/GRASS_movement_19.webp) +::: +:::: + +#### Command line + +```{python} +r.path input=FMC_directions format=auto vector_path=LCP_cumulative start_coordinates=477476,3914951 +``` + +#### Python + +```{python} +gs.run_command("r.path", + input="FMC_directions", + format="auto", + vector_path="LCP_cumulative", + start_coordinates=[477476, 3914951]) +``` +:::::::: + +## Ruta de menor coste generada + +- Aquí está el resultado de LCP. + +![](img_movement/GRASS_movement_20.webp) + +# Agregar un mapa de fricción a los costos de movimiento + +## Descripción general + +- Un **mapa de fricción** (friction map) puede utilizarse para incorporar otros factores además del terreno al crear una superficie de costo acumulativo y modelar el movimiento. + +- El valor de cada celda en un ráster de mapa de fricción representa el tiempo de caminata, en segundos/metro, *además del* tiempo necesario debido al terreno. + +- Podemos **reclasificar** (reclassify) el mapa de *uso del suelo* (landuse) para crear un mapa de fricción que muestre el tiempo adicional que se tardaría en caminar a través de diferentes tipos de cobertura del suelo. + +![Reclasificación del *uso del suelo* (landuse) para mostrar los principales tipos de cobertura del suelo.](img_movement/GRASS_movement_21.webp) + +## Reclasificación del *uso del suelo* (landuse) para crear un mapa de fricción + +Una velocidad de marcha estándar en terreno llano es de aproximadamente 5 km/h = 0,72 s/m. + +Podríamos estimar que se necesitaría un tiempo adicional: + +- 3 s/m para caminar por un denso bosque de piñones y enebros + +- 1 s/m para cruzar un bosque de coníferas + +- 2 s/m para recorrer la zona urbana de Flagstaff + +- 5 s/m para trepar por campos de lava + +- 10 s/m para intentar cruzar un cuerpo de agua + +Podemos crear este mapa de fricción reclasificando el mapa de *uso del suelo* (landuse) usando [*r.reclass*](https://grass.osgeo.org/grass-stable/manuals/r.reclass.html) para asignar nuevos valores de fricción a las categorías de cobertura del suelo existentes. + +:::::: {.panel-tabset group="language"} + +## GUI + +La herramienta [r.reclass](https://grass.osgeo.org/grass-stable/manuals/r.reclass.html) se encuentra en el menú de la categoría Raster/Change…. + +::::: grid +::: g-col-6 + +1. Introduzca *uso del suelo* (landuse) para el ráster que se va a reclasificar. + +2. Introduzca *friction_reclassified* para el mapa reclasificado resultante. + +3. Introduzca las reglas de reclasificación directamente en el cuadro de texto o desde un archivo de texto guardado. Utilice el símbolo * para representar todo lo que no esté cubierto por las reglas de reclasificación específicas. + + > 11 90 95 = 10 water + > 21 thru 24 = 2 urban + > 31 = 5 lava + > 41 thru 43 = 1 conifer forest + > 52 = 3 pinyon juniper woodland + > \* = 0 no friction + +::: + +::: g-col-6 + +- Esto crea un nuevo mapa de fricción llamado *friction_landcover*. + +![](img_movement/GRASS_movement_22.webp) +::: +::::: + +## Command line + +```{python} +r.reclass input=landuse output=friction_landcover rules=- << EOF +11 90 95 = 10 water +21 thru 24 = 2 urban +31 = 5 lava +41 thru 43 = 1 conifer forest +52 = 3 pinyon juniper woodland +* = 0 no friction +EOF +``` + +## Python + +```{python} +rules = """\ +11 90 95 = 10 water +21 thru 24 = 2 urban +31 = 5 lava +41 thru 43 = 1 conifer forest +52 = 3 pinyon juniper woodland +* = 0 no friction +""" +gs.write_command("r.reclass", + input="landuse", + output="friction_landcover", + rules="-", + stdin=rules) +``` +:::::: + +![El mapa de fricción reclasificado (*friction_landcover*)](img_movement/GRASS_movement_23.webp) + +## Modificación de una superficie de coste acumulativo con un mapa de fricción + +Ahora podemos crear una nueva superficie de costo acumulado utilizando este nuevo mapa de fricción y convertirla de segundos a horas, como lo hicimos anteriormente.: + +::: {.panel-tabset group="language"} + +#### GUI + +1. Siga los procedimientos de la sección [Generar la superficie de costo acumulado](#generate-cumulative-cost-surface) y sustituya el mapa *friction_landcover* utilizado anteriormente por el nuevo mapa *friction0*. + +2. Convierta la superficie de costo acumulado a horas en lugar de segundos siguiendo los procedimientos de la sección [Movimiento a través de una superficie de costo acumulado]({#movement-across-cost-surface}). + +#### Command line + +```{python} +r.walk elevation=elevation friction=friction_landcover output=FMC_vegcost_seconds outdir=FMC_vegcost_directions start_points=FMC -k +r.mapcalc "FMC_vegcost_hours = FMC_vegcost_seconds / 3600" +``` + +#### Python + +```{python} +gs.run_command("r.walk", + elevation="elevation", + friction="friction_landcover", + output="FMC_vegcost_seconds", + outdir="FMC_vegcost_directions", + start_points="FMC", + flags="k") +gs.mapcalc("FMC_vegcost_hours = FMC_vegcost_seconds / 3600") +``` +::: + +![superficie de costo acumulativo con fricción adicional por cobertura del suelo](img_movement/GRASS_movement_24.webp) + +## Rutas de menor coste y fricción + +- Podemos crear un nuevo LCP desde el excursionista varado hasta FMC en un terreno donde la cobertura del suelo también afecta el costo del movimiento. + +::: {.panel-tabset group="language"} + +#### GUI + +1. Siga los procedimientos descritos en la sección [Ruta de menor coste](#least-cost-path), sustituyendo el nuevo mapa de direcciones generado junto con la superficie de coste acumulado por el mapa de fricción de la cobertura del suelo. + +2. Asigne a esta nueva ruta de menor coste el nombre *LCP_vegcost* para distinguirla de la anterior. + +#### Command line + +```{python} +r.path input=FMC_vegcost_directions format=auto vector_path=LCP_vegcost start_coordinates=477476,3914951 +``` + +#### Python + +```{python} +gs.run_command("r.path", + input="FMC_vegcost_directions", + format="auto", + vector_path="LCP_vegcost", + start_coordinates=[477476, 3914951]) +``` +::: + +- Se tarda más en llegar a FMC si el excursionista tiene que atravesar vegetación densa y terreno accidentado. + +- En el mapa inferior, donde el terreno está coloreado según la cobertura vegetal, la ruta LCP original, que solo muestra el terreno, se representa con la línea azul. La ruta LCP, que incluye un mapa de fricción de la cobertura vegetal, se representa con la línea amarilla más gruesa. + +![Comparación de LCP con solo terreno y con fricción de la cobertura del suelo](img_movement/GRASS_movement_25.webp) + +--- + +:::{.smaller} +*© Michael Barton, Anna Petrasova, y Eunice Villaseñor Iribe* +*El desarrollo de este tutorial fue financiado en parte por la Fundación Nacional de Ciencias de EE. UU. (NSF) (https://www.nsf.gov/), premio [2303651] (https://www.nsf.gov/awardsearch/showAward?AWD_ID=2303651)* +::: + diff --git a/content/tutorials/remote_sensing_visualization/GRASS_remotesensing_es.qmd b/content/tutorials/remote_sensing_visualization/GRASS_remotesensing_es.qmd new file mode 100644 index 0000000..dc6ed47 --- /dev/null +++ b/content/tutorials/remote_sensing_visualization/GRASS_remotesensing_es.qmd @@ -0,0 +1,728 @@ +--- +title: "Introducción a la teledetección con GRASS" +author: "Michael Barton and Eunice Villaseñor Iribe" +date: 2025-05-21 +date-modified: today +image: img_remotesensing/thumbnail.webp +lightbox: true +engine: knitter +format: + html: + embed-resources: true + toc: true + code-tools: true + code-copy: true + code-fold: false +page-layout: article +categories: [Beginner, Graphical User Interface (GUI), Images, Remote Sensing, Visualization] +Description: Análisis y visualización de imágenes satelitales multibanda mediante fusión de imágenes, índices ambientales y reducción de dimensionalidad con análisis de componentes principales. +execute: + eval: false +copyright: + holder: Michael Barton and Eunice Villaseñor Iribe + year: 2026 +funding: "La creación de este tutorial fue financiada en parte por la subvención FAIN 2303651 de la Fundación Nacional de Ciencias de EE. UU." + +# © Michael Barton 2025 +--- + +::::: grid +::: g-col-4 +GRASS cuenta con numerosas herramientas para procesar y visualizar imágenes de teledetección. Este tutorial solo presenta una pequeña muestra de la amplia capacidad de procesamiento de imágenes de GRASS. + +Esperamos que esto les ayude a comprender el potencial de análisis y visualización de imágenes de teledetección en GRASS y la posibilidad de combinar el análisis de teledetección con el procesamiento SIG ráster y vectorial. + +Comenzaremos con una breve descripción general de las imágenes satelitales multibanda. +::: + +::: g-col-8 +![Imagen OLI del Landsat 8 de la región de Flagstaff, Arizona. Fusión de imágenes RGB de las bandas 3, 4 y 5.](img_remotesensing/remotesensing_0.webp) +::: +::::: + +::: {.callout-note title="Dataset"} +Este tutorial utiliza uno de los conjuntos de datos de muestra estándar de GRASS para Flagstaff, Arizona, EE. UU.: ***flagstaff_arizona_usa***. Nos referiremos a los topónimos de ese conjunto de datos, pero puede completarse con cualquiera de los [conjuntos de datos de muestra estándar](https://grass.osgeo.org/download/data/) para cualquier región, por ejemplo, la [Conjunto de datos de Carolina del Norte](https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip). + +Utilizaremos un conjunto de imágenes del satélite **Landsat 8** y el mapa ráster DEM de *elevación* (elevation). Sin embargo, este tutorial también puede utilizarse con otras imágenes multibanda, como Sentinel o Terra/ASTER. Con imágenes satelitales distintas a las del Landsat 8, los números de banda pueden diferir de los descritos en este tutorial. +::: + +::: {.callout-note title="GRASS environment"} +Este tutorial está diseñado para que puedas completarlo utilizando la **GUI de GRASS**, comandos de GRASS desde la **consola o terminal**, o utilizando comandos de GRASS en un entorno de **Jupyter Notebook**. +::: + +::: {.callout-note title="Don't know how to get started?"} +Si no está seguro de cómo comenzar a utilizar GRASS utilizando su interfaz gráfica de usuario o utilizando Python, consulte los tutoriales [Get started with GRASS GUI](../get_started/fast_track.qmd) y [Get started with GRASS & Python in Jupyter Notebooks](../get_started/fast_track_grass_and_python.qmd). +::: + +# Conceptos básicos de teledetección + +## Diversas formas de teledetección + +Existen diversas formas de teledetección. Este tutorial se centrará en las plataformas espaciales de teledetección. + +:::::: grid +::: g-col-4 +![Plataformas espaciales (NASA 2015)](img_remotesensing/remotesensing_3.webp){style="width: 100%"} +::: + +::: g-col-4 +![Fotografía aérea y LiDAR](img_remotesensing/remotesensing_2.webp){style="width: 100%"} +::: + +::: g-col-4 +![Estudio geofísico (*© Michael Barton 2025*)](img_remotesensing/remotesensing_1.webp){style="width: 100%"} +::: +:::::: + +## Plataformas espaciales + +::::: grid +::: g-col-5 +- Estos satélites cuentan con sensores que capturan la reflectancia de **la radiación electromagnética (EM)** solar que llega a la Tierra, incluyendo la EM que percibimos como luz visible. + +- Diferentes materiales absorben, emiten y reflejan la radiación EM en diferentes frecuencias. + +- Los sensores espaciales capturan imágenes en múltiples frecuencias EM en diferentes «**bandas**» o «**canales**» para permitir la identificación de diferentes materiales o características. + +- Las imágenes de banda de sensores, como rásteres, se pueden combinar matemáticamente de diferentes maneras para permitir la visualización o identificación de características o materiales. +::: + +::: g-col-7 +![Reflectancia electromagnética de diferentes materiales. *Imagen basada en SEOS, Educación Científica a través de la Observación de la Tierra para Escuelas Secundarias (SEOS), CC BY-NC-SA 2.0.*](img_remotesensing/remotesensing_4.webp) + +![Bandas de imágenes de diferentes plataformas espaciales y frecuencias electromagnéticas que alcanzan la superficie terrestre. *Imagen de L. Rocchio y J. Barsi, NASA.*](img_remotesensing/remotesensing_5.webp) +::: +::::: + +# Visualización de imágenes de teledetección multibanda en GRASS + +GRASS cuenta con numerosas herramientas para combinar y analizar imágenes monobanda y multibanda. En este tutorial, exploraremos algunas de estas herramientas analíticas utilizando imágenes de la región de Flagstaff del satélite **Landsat 8**. + +![*Imagen del Landsat 8 de Robert Simmon, USGS y NASA 2013*](img_remotesensing/remotesensing_6.webp){width="80%"} + +## Bandas Landsat para analizar + +Las siguientes bandas Landsat 8 se proporcionan con el conjunto de datos de Flagstaff: + +- *landsat8_2024_B1* : azul visible de alta frecuencia para nubes cirros\ +- *landsat8_2024_B2* : azul visible\ +- *landsat8_2024_B3* : verde visible\ +- *landsat8_2024_B4* : rojo visible\ +- *landsat8_2024_B5* : Infrarrojo cercano\ +- *landsat8_2024_B6* : infrarrojo medio (frecuencia más alta))\ +- *landsat8_2024_B7* : infrarrojo medio (frecuencia más baja) + +En este tutorial, utilizaremos las bandas 2-7 del Landsat 8.. + +## Visualizar bandas individuales del Landsat + +::::: grid +::: g-col-6 +- Cargue las **bandas 2 a 7** en el administrador de capas, pero no la banda 1 (*landsat8_2024_B1*). + +- Observe lo oscura que es cada imagen. + +Esto se debe a que, aunque cada celda podría tener uno de 65,536 valores, casi todos se encuentran dentro de un rango muy estrecho. + +![Histograma del número de píxeles para cada valor posible](img_remotesensing/landsat_b5_histogram.webp) +::: + +::: g-col-6 +![Banda 5 del Landsat](img_remotesensing/remotesensing_9.webp) +::: +::::: + +## Ecualización de histograma + +La gama de tonos de gris se puede reasignar a los valores de las celdas para que cubran completamente un continuo de negro a blanco. Esto se puede hacer en [r.colors](https://grass.osgeo.org/grass-stable/manuals/r.colors.html) "ecualizando" el histograma de color de las celdas. + +![Distribución de valores de píxeles después de la ecualización del histograma](img_remotesensing/landsat_b5eq_histogram.webp){width="80%"} + +### Ecualización de histograma en GRASS + +El uso de [r.colors](https://grass.osgeo.org/grass-stable/manuals/r.colors.html) para la ecualización de histograma mejorará la visibilidad de la imagen, pero no modificará los valores de sus celdas. + +::::::::: {.panel-tabset group="language"} +#### GUI + +::::: grid +::: g-col-6 +1. Seleccione *r.colors* en el menú **Raster/Administrar colores** (Raster/Manage colors). + +2. Introduzca una imagen Landsat en el cuadro de texto **Nombre del mapa ráster** (Raster map name). +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_15.webp) +::: +::::: + +::::: grid +::: g-col-6 +3. Marque la casilla **ecualización del histograma** (histogram equalization). + +4. Seleccione *gris* (grey) en el cuadro de texto **Nombre de la tabla de colores** (Name of the color chart). + +5. Pulse **Ejecutar** (Execute). + +6. Haga lo mismo para cada banda Landsat.\ +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_14.webp) +::: +::::: + +#### línea de comando + +```{bash} +r.colors -e map=landsat8_2024_B2 color=grey +r.colors -e map=landsat8_2024_B3 color=grey +r.colors -e map=landsat8_2024_B4 color=grey +r.colors -e map=landsat8_2024_B5 color=grey +r.colors -e map=landsat8_2024_B6 color=grey +r.colors -e map=landsat8_2024_B7 color=grey +``` + +#### Python + +```{bash} +gs.run_command("r.colors", + map=landsat8_2024_B2, + color=grey, + flags="e") +gs.run_command("r.colors", + map=landsat8_2024_B3, + color=grey, + flags="e") +gs.run_command("r.colors", + map=landsat8_2024_B4, + color=grey, + flags="e") +gs.run_command("r.colors", + map=landsat8_2024_B5, + color=grey, + flags="e") +gs.run_command("r.colors", + map=landsat8_2024_B6, + color=grey, + flags="e") +gs.run_command("r.colors", + map=landsat8_2024_B7, + color=grey, + flags="e") + +``` +::::::::: + +Todos los ejemplos descritos en el resto de este tutorial se realizan con imágenes estiradas mediante histograma. + +::: {.callout-note title="Tip"} +Histograma cada imagen **por separado** en lugar de hacerlo todas juntas, ya que cada imagen tiene una distribución diferente de valores de píxeles/celdas que estirar. +::: + +------------------------------------------------------------------------ + +![Banda 5 del Landsat después de la ecualización del histograma](img_remotesensing/remotesensing_13.webp){width="80%"} + +# Fusión de imágenes + +## Fusión de imágenes a color de bandas Landsat + +Cada imagen Landsat tiene valores de celda que representan la intensidad de reflectancia en un rango específico de frecuencias EM (es decir, múltiples bandas de imagen). Al visualizarse como ráster, una sola banda Landsat aparece como un mapa variable de un solo color (p. ej., en escala de grises). + +La **fusión de imágenes** se refiere a las formas de combinar múltiples bandas para visualizarlas como una imagen a todo color. En términos simples, esto implica definir tres bandas de imagen como los canales rojo, verde y azul de una **imagen RGB multicolor**. La visualización a color resultante muestra las áreas con combinaciones similares de reflectancia en las tres bandas seleccionadas (p. ej., vegetación, agua o carreteras) como si tuvieran el mismo color y se diferencian de las áreas con diferentes combinaciones de reflectancia. + +Esto se puede hacer fácilmente en GRASS usando la herramienta [*d.rgb*](https://grass.osgeo.org/grass-stable/manuals/d.rgb.html) en el administrador de capas. + +## Fusión de imágenes en el administrador de capas {#image-fusion-layermgr} + +::::: grid +::: g-col-6 +1. Seleccione **Agregar capa de mapa RGB** (Add RGB map layer) de la herramienta **Agregar varias capas ráster** (Add multiple raster layers). +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_17.webp) +::: +::::: + +::::: grid +::: g-col-6 +2. Seleccione las bandas Landsat para definirlas como los canales rojo, verde y azul de una imagen multicolor. + +3. Para una fusión de imágenes de "color natural", pruebe: + + - Banda 4 (EM rojo visible) en rojo (red) + - Banda 3 (EM verde visible) en verde (green) + - Banda 2 (EM azul visible) en azul (blue) +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_19.webp) + +![](img_remotesensing/remotesensing_16.webp) +::: +::::: + +![Imagen en color natural de la fusión de las bandas 4, 3 y 2 del Landsat](img_remotesensing/remotesensing_20.webp){width="80%"} + +## Fusión de imágenes: otras combinaciones de bandas + +Prueba otras combinaciones para resaltar diferentes características. + +::::: grid +::: g-col-6 +- Usando las bandas 5, 4 y 3 se resalta la clorofila (vegetación) en rojo. +::: + +::: g-col-6 +![Imagen RGB de las bandas 5, 4 y 2](img_remotesensing/remotesensing_21.webp) +::: +::::: + +::::: grid +::: g-col-6 +- La fusión de imágenes con las bandas 6, 5 y 3 utiliza EM infrarrojo para resaltar otras coberturas y usos del suelo de manera diferente. +::: + +::: g-col-6 +![Imagen RGB de las bandas 6, 5 y 2](img_remotesensing/remotesensing_22.webp) +::: +::::: + +# Índices ambientales + +## Información ambiental a partir de combinaciones matemáticas de bandas de teledetección + +Debido a que diferentes materiales (incluida distinta vegetación, suelos y agua) reflejan, absorben y emiten EM en diferentes frecuencias, se pueden derivar muchos tipos de información ambiental con diferentes combinaciones de bandas. + +GRASS puede generar una gran cantidad de índices ambientales con su amplio conjunto de herramientas de imágenes (consulte el menú **Imágenes** (Images)), así como con la *calculadora de mapas* (map calculator) ráster. Existen herramientas adicionales para productos de imágenes de teledetección disponibles como extensiones de GRASS. + +Un índice ambiental comúnmente utilizado es el **NDVI**: el índice de vegetación de diferencia normalizada. El NDVI es un índice del crecimiento y la salud de las plantas. Se calcula a partir de bandas que detectan el infrarrojo cercano (NIR) y la luz roja visible. + +$$ +NDVI = \frac{NIR - rojo}{NIR + rojo} +$$ + +Si bien puede crear un mapa de NDVI utilizando la *calculadora de mapas* (map calculator), también se puede generar automáticamente desde GRASS [i.vi](https://grass.osgeo.org/grass-stable/manuals/i.vi.html) módulo, junto con muchos otros índices de vegetación. + +::: {.callout-note title="Tip"} +Al generar cualquier mapa nuevo, como NDVI, recuerde asegurarse primero de que la **región** (region) esté configurada para coincidir con las imágenes LandSat. +::: + +### Ejemplo de NDVI: índice de vegetación de diferencia normalizada + +::::::::: {.panel-tabset group="language"} +#### GUI + +**Establezca la región para que coincida con las imágenes Landsat** + +1. Añade una de las imágenes ráster LandSat al Administrador de capas. + +2. Haz clic derecho en la imagen LandSat en el Administrador de capas. + +3. Selecciona Establecer región computacional del mapa seleccionado. + +::::: grid +::: g-col-6 +**Calcular ráster NDVI** + +1. Seleccione la herramienta [i.vi](https://grass.osgeo.org/grass-stable/manuals/i.vi.html) del menú **Imágenes/Productos de imágenes satelitales/Índices de vegetación** (Images/Satellite imagery products/Vegetation indices). + +2. Seleccione **NDVI** como índice a calcular. + +3. Ingrese el nombre del **mapa de salida** (output map) que desea crear. +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_23.webp) +::: +::::: + +::::: grid +::: g-col-6 +4. Introduzca la banda 4 para el **canal rojo** (red channel). + +5. Introduzca la banda 5 para el **canal NIR (infrarrojo cercano)** (NIR channel). +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_24.webp) +::: +::::: + +#### línea de comando + +1. Establezca la región para que coincida con las imágenes Landsat. + +2. Utilice la herramienta [i.vi](https://grass.osgeo.org/grass-stable/manuals/i.vi.html) para crear un mapa de valores NDVI. + +```{bash} +g.region raster=landsat8_2024_B2 + +i.vi output=Flagstaff_NDVI viname=ndvi red=landsat8_2024_B4 nir=landsat8_2024_B5 +``` + +#### Python + +1. Establezca la región para que coincida con las imágenes Landsat. + +2. Utilice la herramienta [i.vi](https://grass.osgeo.org/grass-stable/manuals/i.vi.html) para crear un mapa de valores NDVI. + +```{bash} +gs.run_command("g.region", raster="landsat8_2024_B2") + +gs.run_command("i.vi", + output=Flagstaff_NDVI, + viname=ndvi, + red=landsat8_2024_B4, + nir=landsat8_2024_B5 + ) +``` +::::::::: + +![Mapa NDVI que sombrea un mapa de relieve de la topografía DEM](img_remotesensing/remotesensing_25.webp){width="80%"} + +# Combinando información de muchas bandas de imágenes + +Podemos visualizar tres bandas simultáneamente con una imagen en color RGB. Pero ¿cómo podemos usar la información de las seis bandas Landsat simultáneamente? Esto requiere el uso de estadísticas multivariantes para la reducción de dimensionalidad. GRASS cuenta con múltiples herramientas analíticas para la reducción de dimensionalidad. + +Aquí exploraremos el análisis de componentes principales (ACP). El ACP combina matemáticamente las variables originales (las bandas Landsat) para crear nuevas variables "componentes" que capturan la mayor parte de la variación en las bandas Landsat originales. + +## PCA de imágenes multibanda con GRASS + +:::::: {.panel-tabset group="language"} +#### GUI + +::::: grid +::: g-col-6 +1. Abra el módulo de análisis de componentes principales (PCA), [*i.pca*](https://grass.osgeo.org/grass-stable/manuals/i.pca.html), que se encuentra en el menú **Imágenes/Transformar imágenes** (Images/Transform images). + +2. Introduzca **nombres de imágenes para las bandas Landsat 2-7** (names of images for Landsat bands 2-7). + +3. Proporcione un **nombre de base de salida** (output base name). A este nombre de base de salida se le añadirá un número que representa los mapas de componentes de PCA calculados. + +4. Hay otras opciones, pero la predeterminada es la correcta por ahora. + +5. Pulsa "Ejecutar". +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_26.webp) +::: +::::: + +#### Línea de comandos + +Realiza un análisis de componentes de PCA y envía los resultados a la consola/terminal y como mapas de componentes de PCA. + +```{bash} +i.pca input=landsat8_2024_B2,landsat8_2024_B3,landsat8_2024_B4, landsat8_2024_B5,landsat8_2024_B6,landsat8_2024_B7 output=Flagstaff_landsat8 +``` + +#### Python + +Realice un PCA y envíe los resultados a la consola/terminal y como mapas de componentes PCA. + +```{bash} +gs.run_command("i.pca", + input="landsat8_2024_B2,landsat8_2024_B3,landsat8_2024_B4, landsat8_2024_B5,landsat8_2024_B6,landsat8_2024_B7", + output=Flagstaff_landsat8) +``` +:::::: + +### Trabajo con resultados de PCA + +Los detalles estadísticos de la salida de PCA aparecen en la consola o terminal, como se muestra a continuación. Cada línea de la salida representa un componente de PCA. + +La lista de valores entre paréntesis muestra el vector propio de cada componente del PCA. Los 6 valores indican la contribución de cada una de las imágenes Landsat 2 a 7 al componente. Los números positivos o negativos más altos indican mayores contribuciones de una banda al componente. Por ejemplo, la banda 4 de Landsat tiene la mayor contribución al componente 1 del PCA, mientras que la banda 6 tiene la mayor contribución al componente 2. + +El porcentaje entre paréntesis representa la cantidad de variación en las bandas originales Landsat 2 a 7 que captura dicho componente PCA. Por ejemplo, el componente PCA 1 captura el 58 % de la variación en las 6 bandas originales y el componente PCA 2, el 35 %. + +``` +Eigen valores (vectores) [% importancia] + +PC1 14640530.56 ( 0.4461, 0.4915, 0.5480, 0.4167, 0.1994, 0.2136) [58.03%] +PC2 8850161.06 ( 0.2240, 0.1951, 0.1050, 0.0543,-0.7001,-0.6385) [35.08%] +PC3 1502032.84 ( 0.2335, 0.1528, 0.2947,-0.8794,-0.1102, 0.2231) [ 5.95%] +PC4 108422.28 ( 0.4370,-0.8041, 0.3529, 0.0416, 0.1120,-0.1536) [ 0.43%] +PC5 94291.01 ( 0.4417, 0.2122,-0.4285,-0.1814, 0.5597,-0.4797) [ 0.37%] +PC6 34241.78 ( 0.5570,-0.0735,-0.5418, 0.1242,-0.3636, 0.4931) [ 0.14%] +``` + +::::: grid +::: g-col-6 +![Imagen PCA 1](img_remotesensing/PCA1.webp) +::: + +::: g-col-6 +![Imagen PCA 2](img_remotesensing/PCA2.webp) +::: +::::: + +### Visualización de los resultados de PCA + +::::: grid +::: g-col-6 +Para visualizar mejor la variación espacial en una imagen de componentes PCA, se puede asignar una tabla de colores diferente a la escala de grises estándar. Esto suele denominarse **"imagen de color falso"** (false color image). + +Aquí se muestra el componente 1 de PCA coloreado con una tabla de colores **bcyr** (azul-cian-amarillo-rojo) con la **ecualización de histograma** (histogram equalization) activada. + +Siga las instrucciones anteriores para la ecualización de histograma, pero seleccione `bcyr` en lugar de gris para la tabla de colores. + +Observe cómo las áreas de diferente vegetación, suelo y agua se destacan con mayor claridad que con la escala de grises. Pruebe con otras tablas de colores. +::: + +::: g-col-6 +![Imagen en falso color del componente PCA 1 de LandSat 8 bandas 2-7](img_remotesensing/remotesensing_27.webp){width="80%"} +::: +::::: + +### Fusión de imágenes con resultados de PCA + +::::: grid +::: g-col-6 +Los métodos de fusión de imágenes descritos anteriormente para múltiples bandas Landsat también pueden utilizarse para los resultados de PCA. + +El resultado de texto de PCA mostrado arriba indica que los tres primeros componentes de PCA capturan el 97 % de la variación en las seis bandas Landsat originales (2-7). Esto significa que podemos visualizar casi toda la información de las seis bandas Landsat originales creando una imagen en color RGB de los componentes de PCA 1, 2 y 3 utilizando [*d.rgb*](https://grass.osgeo.org/grass-stable/manuals/d.rgb.html) en el administrador de capas.. + +Siga los procedimientos descritos en la sección [Fusión de imágenes en el administrador de capas](#image-fusion-layermgr) utilizando los componentes PCA 1-3. + +Las áreas con diferente vegetación, agua, construcciones urbanas y otras modificaciones del paisaje realizadas por el hombre se destacan con colores distintivos. +::: + +::: g-col-6 +![Fusión de imágenes de los componentes PCA 1, 2 y 3](img_remotesensing/remotesensing_28.webp) +::: +::::: + +::::: grid +::: g-col-6 +A veces, los componentes PCA menos importantes también pueden ser informativos, aunque capturen un pequeño porcentaje de la variación general en las bandas Landsat. + +Pruebe la fusión de imágenes RGB con los componentes PCA 4, 5 y 6. ¿En qué se diferencia esta imagen de una que utiliza los componentes PCA 1, 2 y 3? +::: + +::: g-col-6 +![Fusión de imágenes de los componentes PCA 4, 5 y 6](img_remotesensing/PCA456.webp) +::: +::::: + +## Combinación de imágenes de teledetección con otros datos SIG + +En GRASS, las imágenes de teledetección son simplemente rásteres, como los mapas de elevación DEM o los mapas de uso del suelo. Esto significa que podemos combinar imágenes de teledetección con cualquier otro tipo de mapa disponible en su base de datos SIG. + +Por ejemplo, un mapa vectorial de arroyos y lagos se puede superponer en el Administrador de Capas sobre la fusión de imágenes de los componentes PCA 1-3 creada anteriormente. + +![Fusión de imágenes de los componentes 1, 2 y 3 del PCA superpuestos con vectores de arroyos y lagos](img_remotesensing/PCA123_streams_lakes.webp){width="80%"} + +# Visualización 3D de teledetección y SIG + +La fusión de imágenes también permite añadir color a la topografía de múltiples maneras. Esto permite visualizar información de imágenes satelitales o productos derivados, como componentes PCA, junto con el relieve topográfico. + +La fusión de imágenes con componentes PCA de imágenes Landsat, combinada con el relieve de un DEM, permite representar información en 6 bandas del espectro electromagnético (EM), elevación, pendiente y orientación en una única visualización de 9 dimensiones. + +Estas visualizaciones complejas se pueden realizar fácilmente en GRASS creando un nuevo mapa de relieve sombreado en color en el administrador de capas. Esto requiere solo unos pasos. + +1. Cree un mapa de relieve topográfico a partir de un DEM. + +2. Combine bandas de satélite o componentes PCA en un nuevo mapa de color RGB. + +3. Use el mapa de color RGB para sombrear el mapa de relieve en un nuevo mapa de relieve sombreado en color en el Administrador de capas. + +## Generación de un mapa de relieve topográfico en el Administrador de capas + +Se puede generar un mapa de relieve a partir del MDE de elevación utilizando la herramienta [r.relief](https://grass.osgeo.org/grass-stable/manuals/r.relief.html) del menú **Ráster/Análisis del terreno/Calcular relieve sombreado** + +:::::: {.panel-tabset group="language"} +#### GUI + +::::: grid +::: g-col-6 +1. Abra *r.relief*. + +2. Seleccione la *elevación* (elevation) en el cuadro de texto **Ráster de entrada** (Input raster) . + +3. Introduzca *elevation_relief* en el cuadro de texto **Nombre para el mapa de relieve sombreado de salida** (Name for output shaded relief map). + +4. Introducir un número mayor que 1 (p. ej., 3) como **Factor de exageración del relieve** (Factor for exaggerating relief) hará que el relieve topográfico sea más visible. + +5. Pulse Ejecutar. +::: + +::: g-col-6 +![](img_remotesensing/r_relief1.webp) + +![](img_remotesensing/r_relief2.webp) +::: +::::: + +#### línea de comando + +```{bash} +r.relief input=elevation output=elevation_relief zscale=3 +``` + +#### Python + +```{bash} +gs.run_command("r.relief", + input="elevation", + output="elevation_relief", + zscale=3) +``` +:::::: + +### Generación de un mapa de color RGB a partir de la fusión de imágenes + +Utilice la herramienta [r.composite](https://grass.osgeo.org/grass-stable/manuals/r.composite.html) del menú **Raster/Administrar colores/Crear RGB** (Raster/Manage colors/Create RGB)para crear un nuevo mapa RGB a partir de la fusión de 3 mapas de componentes PCA. + +:::::: {.panel-tabset group="language"} +#### GUI + +::::: grid +::: g-col-6 +1. Abra *r.composite*. + +2. Introduzca los mapas de componentes PCA 1-3 en los **cuadros de texto rojo, verde y azul** (red, green, and blue text entry boxes). + +3. Introduzca Flagstaff_landsat8PCA_123_RGB como **mapa RGB de salida** (output RGB map). + +4. Pulse Ejecutar.\ +::: + +::: g-col-6 +![](img_remotesensing/remotesensing_29.webp) +::: +::::: + +#### línea de comando + +```{bash} +r.composite red=Flagstaff_landsat8.1 green=Flagstaff_landsat8.2 blue=Flagstaff_landsat8.3 output=Flagstaff_landsat8PCA_123_RGB +``` + +#### Python + +```{bash} +gs.run_command("r.composite", + red="Flagstaff_landsat8.1", + green="Flagstaff_landsat8.2", + blue="Flagstaff_landsat8.3", + output="Flagstaff_landsat8PCA_123_RGB") +``` +:::::: + +## Combinación de relieve y un mapa de fusión de imágenes a color + +Un mapa de relieve topográfico y un mapa de fusión de imágenes RGB se pueden combinar con la herramienta [d.shade](https://grass.osgeo.org/grass-stable/manuals/d.shade.html) del administrador de capas o con la herramienta [r.shade](https://grass.osgeo.org/grass-stable/manuals/r.shade.html) del menú **/Raster/Terrain analysis/Apply shade to raster**. + +:::::: {.panel-tabset group="language"} +#### GUI + +::::: grid +::: g-col-6 +**Crear una visualización de mapa de relieve sombreado en el administrador de capas** + +1. En el administrador de capas, seleccione **Añadir capa de mapa de relieve sombreado** (Add shaded relief map layer) (herramienta *d.shade*) en el botón de menú **Añadir varias capas de mapa ráster** (Add various raster map layers). + +2. Introduzca el mapa *elevation_relief* en el cuadro de texto **Nombre del relieve sombreado** (Name of shaded relief). + +3. Introduzca *Flagstaff_landsat8PCA_123_RGB* en el cuadro de texto **Nombre del ráster que se aplicará sobre el relieve** (Name of raster to drape over relief). + +4. Si establece el **Porcentaje de brillo** (Percent to brighten) en 30 o 40, creará una visualización más atractiva. +::: + +::: g-col-6 +![](img_remotesensing/layer_manager_shaded_relief.webp) + +![](img_remotesensing/d_shade.webp) +::: +::::: + +**Crear un mapa ráster de relieve sombreado** + +1. Abra la herramienta *r.shade* desde el menú **/Ráster/Análisis del terreno/Aplicar sombreado al ráster** (/Raster/Terrain analysis/Apply shade to raster). + +2. Utilice las mismas entradas que las anteriores para el administrador de capas y asigne un nombre al mapa de salida que se creará (p. ej., *PCA_relief*). + +#### Command line + +```{bash} +r.shade shade=elevation_relief color=Flagstaff_landsat8PCA_123_RGB output=PCA_relief brighten=40 +``` + +#### Python + +```{bash} +gs.run_command("r.shade", + shade="elevation_relief", + color="Flagstaff_landsat8PCA_123_RGB", + output="PCA_relief", + brighten=40) +``` +:::::: + +![Mapa de relieve de la topografía sombreada por la fusión RGB de los componentes PCA 1-3](img_remotesensing/PCA123_relief.webp){width="80%"} + +### Visualización de la fusión de imágenes y topografía en NVIZ + +Además, la fusión de imágenes PCA permite colorear una **visualización 3D** (3D view) de la topografía en la vista 3D de GRASS mediante el módulo NVIZ. + +- Comience abriendo el **MDE de elevación** (elevation DEM) en el administrador de capas. Asegúrese de que no se muestren otros mapas, excepto el de elevación. + +- Seleccione **Vista 3D** (3D view) en el menú desplegable de la parte superior de la ventana de visualización del mapa. Esto debería mostrar el mapa de elevación en 3D con el mismo sombreado que en la visualización 2D. + +![Topografía DEM mostrada en 3D](img_remotesensing/NVIZ_elevation.webp){width="80%"} + +- A continuación, seleccione la pestaña **datos** (data) en la ventana del administrador de visualización 3D (puede que sea más fácil gestionar la visualización 3D si la separa de la barra lateral en una ventana independiente). Asegúrese de que el mapa de elevación esté seleccionado en el cuadro **Mapa ráster** (Raster map) en la parte superior de la ventana de datos. + +- Desplácese hacia abajo hasta la sección **Color** y reemplace el mapa de elevación con el mapa ráster RGB de la fusión de imágenes PCA 1-3 (*Flagstaff_landsat8PCA_123_RGB*). + +![Topografía DEM coloreada por los componentes PCA 1-3 mostrada en 3D](img_remotesensing/NVIZ_elevation_PCA123.webp){width="80%"} + +# Teledetección avanzada con GRASS + +GRASS tiene muchas más funciones y herramientas para trabajar con datos de teledetección. - Para las **imágenes satelitales** (satellite images), hay herramientas en el [menú Imágenes](https://grass.osgeo.org/grass-stable/manuals/imageryintro.html) y en los [complementos de GRASS](https://grass.osgeo.org/grass-stable/manuals/addons/)... + +``` +- Imagen [corrección y calibración](https://grass.osgeo.org/grass-stable/manuals/imageryintro.html#radiometric-corrections) + +- Georectificación de imágenes (https://grass.osgeo.org/grass-stable/manuals/imageryintro.html#geocoding-of-imagery-data) + +- Algoritmos de aprendizaje automático para la clasificación de imágenes supervisada y no supervisada (https://grass.osgeo.org/grass-stable/manuals/imageryintro.html#image-classification) y la detección de características (https://grass.osgeo.org/grass-stable/manuals/addons/r.learn.ml2.html) + +- Análisis estadístico y visualización (https://grass.osgeo.org/grass-stable/manuals/rasterintro.html#raster-map-statistics) como se muestra en este tutorial +``` + +- Las **series temporales** (time series) de satélite se pueden transformar en **cubos de tiempo** (time cubes) para su análisis con las herramientas exclusivas [GIS temporal](https://grass.osgeo.org/grass-stable/manuals/temporalintro.html) de GRASS. + +- Para la **fotografía aérea** (aerial photography), existen herramientas para.... + + - [Georectificación](https://grass.osgeo.org/grass-stable/manuals/imageryintro.html#geocoding-of-imagery-data) + + - Rectificación 3D y distorsión de escaneo para corrección de [ortofotografía](https://grass.osgeo.org/grass-stable/manuals/i.ortho.photo.html) + + - Mejora de imagen, incluidos filtros de [vecindario](https://grass.osgeo.org/grass-stable/manuals/r.neighbors.html), [convolución](https://grass.osgeo.org/grass-stable/manuals/r.mfilter.html), [detección de bordes](https://grass.osgeo.org/grass-stable/manuals/i.zc.html) y [transformada rápida de Fourier](https://grass.osgeo.org/grass-stable/manuals/i.fft.html). + +- GRASS cuenta con un amplio conjunto de herramientas raster y vectoriales para procesar y visualizar [datos LiDAR](https://grass.osgeo.org/grass-stable/manuals/vectorintro.html#lidar-data-processing), así como para la importación y procesamiento raster y vectorial de datos LiDAR. + +- Existen múltiples métodos para la [interpolación](https://grass.osgeo.org/grass-stable/manuals/rasterintro.html#raster-map-operations) de puntos de datos de **estudios geofísicos** (geophysical surveys). + +- Para la **geofísica 3D** (3D geophysics) (por ejemplo, tomografía eléctrica o radar de penetración terrestre), GRASS ofrece un conjunto único de verdaderas [herramientas de análisis de vóxeles 3D (3D voxel analysis tools)](https://grass.osgeo.org/grass-stable/manuals/raster3dintro.html) con visualización n-dimensional en [NVIZ](https://grass.osgeo.org/grass-stable/manuals/wxGUI.nviz.html). + +Estas y otras herramientas hacen de GRASS un entorno de geoprocesamiento rico y poderoso para muchas aplicaciones de teledetección. + +:::{.smaller} +El desarrollo de este tutorial fue financiado en parte por la Fundación Nacional de Ciencias de EE. UU. (NSF) (https://www.nsf.gov/), premio [2303651] (https://www.nsf.gov/awardsearch/showAward?AWD_ID=2303651) +::: + +--- + +:::{.smaller} +*© Michael Barton y Eunice Villaseñor Iribe* +*El desarrollo de este tutorial fue financiado en parte por la Fundación Nacional de Ciencias de EE. UU. (NSF) (https://www.nsf.gov/), premio [2303651] (https://www.nsf.gov/awardsearch/showAward?AWD_ID=2303651)* +::: + + diff --git a/content/tutorials/terrain_and_DEMs/GRASS_terrain_es.qmd b/content/tutorials/terrain_and_DEMs/GRASS_terrain_es.qmd new file mode 100644 index 0000000..fc4defc --- /dev/null +++ b/content/tutorials/terrain_and_DEMs/GRASS_terrain_es.qmd @@ -0,0 +1,1096 @@ +--- +title: "Visualización y modelado del terreno a partir de DEM en GRASS" +author: "Michael Barton and Eunice Villaseñor Iribe" +date: 2025-06-23 +date-modified: today +lightbox: true +engine: knitter +image: img_terrain/thumbnail.webp +format: + html: + embed-resources: true + toc: true + code-tools: true + code-copy: true + code-fold: false +page-layout: article +categories: [Beginner, intermediate, raster, DEM, visualization, terrain, slope, orientation, geographical features, hydrology, streams] +description: Este tutorial guía al usuario a través de múltiples formas de analizar y modelar terrenos a partir de mapas raster DEM. +execute: + eval: false +copyright: + holder: Michael Barton and Eunice Villaseñor Iribe + year: 2026 +funding: "La creación de este tutorial fue financiada en parte por la subvención FAIN 2303651 de la Fundación Nacional de Ciencias de EE. UU.." +--- +GRASS cuenta con numerosas herramientas que permiten visualizar y modelar el terreno a partir de mapas ráster de modelos digitales de elevación (MDE). Algunos ejemplos incluyen: + +- [r.shade](https://grass.osgeo.org/grass-stable/manuals/r.shade.html) para visualización, + +- [r.slope.aspect](https://grass.osgeo.org/grass-stable/manuals/r.slope.aspect.html) para modelar pendiente y aspecto, + +- [r.geomorphon](https://grass.osgeo.org/grass-stable/manuals/r.geomorphon.html) para modelar características topográficas, + +- [r.watershed](https://grass.osgeo.org/grass-stable/manuals/r.watershed.html) para modelar el flujo superficial y las cuencas hidrográficas, y + +- [r.stream.extract](https://grass.osgeo.org/grass-stable/manuals/r.stream.extract.html) para generar redes de corrientes. + +Este tutorial explorará estas herramientas, pero son solo algunos de los muchos módulos de GRASS para representar y analizar paisajes. + +::: {.callout-note title="Demo Dataset"} +Este tutorial utiliza uno de los conjuntos de datos de muestra estándar de GRASS para Flagstaff, Arizona, EE. UU.: ***flagstaff_arizona_usa***. Haremos referencia a los nombres de lugares en ese conjunto de datos, pero se puede completar con cualquiera de los [conjuntos de datos de muestra estándar](https://grass.osgeo.org/download/data/) para cualquier región, por ejemplo, la [North Carolina conjuntos de datos](https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip). Nosotras usaremos la *elevación*(elevation) DEM. +::: + +::: {.callout-note title="GRASS interfaces"} +Este tutorial está diseñado para que puedas completarlo utilizando la **GUI de GRASS**, comandos de GRASS desde la **consola o terminal**, o utilizando comandos de GRASS en un entorno de **Jupyter Notebook**. +::: + +::: {.callout-note title="¿No sabes cómo empezar?"} +Si no está seguro de cómo comenzar a utilizar GRASS usando su interfaz gráfica de usuario o usando Python, consulte los tutoriales [Comience a utilizar GRASS GIS GUI](https://grass-tutorials.osgeo.org/content/tutorials/get_started/fast_track.html) y [Comience a usar GRASS y Python en Jupyter Notebooks](https://grass-tutorials.osgeo.org/content/tutorials/get_started/JupyterOnWindows_OSGeo4W_Tutorial.html). +::: + +# Terreno, DEM y SIG ráster + +:::: grid +::: g-col-4 + +- Si bien muchos mapas representan entidades con puntos, líneas y áreas **vectoriales**, el paisaje espacialmente continuo del terreno a menudo se representa en SIG mediante rásteres. +::: + +::: g-col-8 +![Ráster DEM del terreno alrededor de Flagstaff, Arizona](img_terrain/flagstaff_color_DEM.webp) +::: +:::: + +:::: grid +::: g-col-4 + +- Las imágenes ráster representan el terreno mediante una cuadrícula continua de celdas, muy similar a los píxeles de una fotografía digital. +::: + +::: g-col-8 +![Fotografía digital y primer plano de píxeles. *Crédito de imagen: Basile Morin 2020 ([Wikimedia Commons,](https://commons.wikimedia.org/wiki/File:Sunlight_and_stormy_sky_over_the_mountains_and_paddy_fields_in_Vang_Vieng,_Laos.jpg) [CC4.0)](https://creativecommons.org/licenses/by-sa/4.0/deed.en))*](img_terrain/landscape.webp) +::: +:::: + +:::: grid +::: g-col-4 + +- Con un ráster de **modelo de elevación digital** (Digital Elevation Model), cada celda de la cuadrícula almacena la elevación sobre el nivel del mar del terreno cubierto por la celda de la cuadrícula. +::: + +::: g-col-8 +![DEM del área de Flagstaff. Las celdas del ráster almacenan la elevación del terreno.](img_terrain/flagstaf_DEM_detail.webp) + +::: +:::: + +:::: grid +::: g-col-4 + +- Al almacenar la elevación de un terreno en múltiples puntos, se puede utilizar un DEM para calcular la pendiente y la orientación en cada ubicación, para identificar características topográficas o para modelar en qué dirección fluirá el agua sobre un terreno. + +- También se puede utilizar para producir visualizaciones impactantes que muestren las características del terreno, además de representar la topografía. +::: + +::: g-col-8 +![](img_terrain/flagstaff_NVIZ_DEM_white.webp) +::: +:::: + +En este tutorial, utilizaremos el DEM denominado ***elevación*** (elevation). En el conjunto de datos de muestra de Flagstaff, este DEM tiene una resolución espacial de 30 m (las celdas de la cuadrícula representan áreas del terreno de 30 x 30 m) con elevación en metros sobre el nivel medio del mar. + +# Visualizando el terreno + +Hay varias formas de crear visualizaciones de terreno en GRASS. + +- Se puede aplicar una tabla de colores a un DEM para que diferentes elevaciones se asignen a diferentes colores. + +- Se puede sombrear un DEM para crear la apariencia de relieve topográfico 3D. + +- Se puede aplicar color a un mapa de relieve sombreado. + +- Es posible renderizar un DEM del terreno en 3D para visualizarlo desde diferentes perspectivas. + +## Aplicación de una tabla de colores a un DEM + +GRASS ofrece varias maneras de aplicar color a un DEM para visualizar el terreno en el menú Ráster/Administrar colores. La forma más sencilla es aplicar una tabla de colores mediante el módulo [r.colors](https://grass.osgeo.org/grass-stable/manuals/r.colors.html). + +Apliquemos la tabla de colores de *elevación* (elevation) al DEM de Flagstaff. Esta tabla asigna colores cálidos a las elevaciones más altas y fríos a las más bajas. + +::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Seleccione la herramienta [r.colors](https://grass.osgeo.org/grass-stable/manuals/r.colors.html) del menú Ráster/Administrar colores. + +2. En la pestaña "Mapa", seleccione el mapa de *elevación* (elevation) en el cuadro de entrada "Nombre del mapa(s) ráster". +::: + +::: g-col-6 +![](img_terrain/r_colors1.webp) +::: +::::: + +::::: grid +::: g-col-6 +3. En la pestaña Definir, seleccione *elevación* (elevation) como tabla de colores. + +4. Haga clic en Ejecutar. +::: + +::: g-col-6 +![](img_terrain/r_colors2.webp) +::: +::::: + +Prueba otras tablas de colores. Las tablas de colores ETOPO2, de terreno y SRTM también son útiles para los colores de terreno. También puedes crear fácilmente una tabla de colores personalizada, como se describe en el manual de r.colors. + +#### Command line + +```{bash} +r.colors -e map=elevation color=elevation +``` + +#### Python + +```{python} +gs.run_command("r.colors", + map="elevation", + color="elevation", + flags="e") +``` + +::::::::: + +![DEM de *elevación* de Flagstaff con la tabla de colores de elevación](img_terrain/flagstaff_elevation_colortable.webp) + +## Relieve sombreado del terreno + +Un mapa de relieve sombreado añade sombras a un MDE según la dirección de la luz solar y la posición del sol sobre el horizonte especificadas por el usuario. El sombreado de relieve se puede generar porque, al almacenarse la elevación del terreno en cada celda de la cuadrícula, se conoce la altura y la orientación (dirección del terreno) de cada celda. Un mapa de relieve tiene la apariencia de una topografía 3D. + +Nosotras podemos usar la [r.relief](https://grass.osgeo.org/grass-stable/manuals/r.relief.html) herramienta para visualizar el relieve topográfico del *elevación* (elevation) DEM para el área de Flagstaff. + + +Mantendremos los valores predeterminados para la dirección y la altura del sol, pero aumentaremos la exageración vertical a 3 para que la topografía se destaque mejor. + +::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + Análisis ráster/terreno/Cálculo del relieve sombreado + +1. Seleccione el [r.relief](https://grass.osgeo.org/grass-stable/manuals/r.relief.html) herramienta del menú Análisis de terreno/Ráster/Calcular relieve sombreado. + +2. Introduzca el DEM de *elevación* (elevation) como mapa de entrada. + +3. Introduzca *relieve* (relief) como nombre para la salida. +::: + +::: g-col-6 +![](img_terrain/r_relief1.webp) +::: +::::: + +::::: grid +::: g-col-6 +4. En la pestaña "Opcional", ingrese 3 para el "Factor para exagerar el alivio". + +5. Haga clic en Ejecutar. +::: + +::: g-col-6 +![](img_terrain/r_relief2.webp) +::: +::::: + +#### Command line + +```{bash} +r.relief input=elevation output=relief zscale=3 +``` + +#### Python + +```{python} +gs.run_command("r.relief",input="elevation", output="relief" zscale=3) +``` + +::::::::: + +![Mapa en relieve del terreno de Flagstaff](img_terrain/relief.webp) + +## Combinando color y relieve + +Para visualizar mejor la diferencia en el terreno, puedes colocar la elevación de color sobre el mapa de relieve que acabas de crear. + +GRASS le permite fusionar fácilmente el color y el sombreado del relieve para visualizar la topografía, las características del terreno, la cobertura terrestre u otra información geográfica. + +- Esto se puede hacer creando un nuevo mapa, utilizando [r.shade](https://grass.osgeo.org/grass-stable/manuals/r.shade.html) herramienta o + +- superponiendo dinámicamente un mapa de color sobre un mapa de relieve en la GUI **administrador de capas** y ventana de visualización. + +Superpondremos el DEM con la tabla de colores asignada al principio de esta sección con el mapa de relieve que acaba de realizar utilizando ambos métodos. + +Este enfoque también se puede utilizar para visualizar otros análisis de terreno que se realizarán más adelante en este tutorial. + +:::::::::::: {.panel-tabset group="language"} + +#### GUI + +Comenzaremos creando un nuevo mapa de relieve sombreado en color utilizando [r.shade](https://grass.osgeo.org/grass-stable/manuals/r.shade.html). + +::::: grid +::: g-col-6 + +1. Abra *r.shade* desde el menú Ráster/Análisis de terreno/Aplicar sombra al ráster. + +2. Establezca el mapa "Nombre del relieve sombreado" en *relieve* (relief). + +3. Establezca "Nombre del ráster que se superpondrá al ráster de relieve" en *elevación* (elevation). + +4. Introduzca *topography_colored_relief* como "Nombre del mapa ráster sombreado". +::: + +::: g-col-6 +![](img_terrain/r_shade1.webp) +::: +::::: + +::::: grid +::: g-col-6 +5. En la pestaña "Opcional", configure el Brillo al 40% para proporcionar un resultado más colorido. + +6. Haga clic en Ejecutar. +::: + +::: g-col-6 +![](img_terrain/r_shade2.webp) +::: +::::: + +#### Command line + +```{bash} +r.shade shade=relief color=elevation output=topography_colored_relief brighten=40] +``` + +#### Python + +```{python} +gs.run_command("r.shade", + shade="relief", + color="elevation", + output="topografía_relieve_coloreado", + brighten=40) +``` + +:::::::::::: + +![mapa en relieve sombreado en color](img_terrain/flagstaff_color_relief2.webp) + + +También puede mostrar un mapa de relieve sombreado de color de forma dinámica en el **administrador de capas** de la GUI utilizando la herramienta d.shade. + +:::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. En el administrador de capas, seleccione **Agregar capa de mapa de relieve sombreado** (Add shaded relief map layer) (herramienta *d.shade*) en el botón de menú **Agregar varias capas de mapa raster** (Add multiple raster map layers). + +2. Introduzca el mapa de *relieve* (relief) en el cuadro de texto "Nombre del relieve sombreado". + +3. Ingrese el mapa de *elevación* (elevation) en el cuadro de texto "Nombre del ráster que se aplicará sobre el relieve". + +4. Si establece el "Porcentaje de brillo" en 30 o 40, creará una pantalla visualmente más atractiva. +::: + +::: g-col-6 +![](img_terrain/layer_manager_shaded_relief.webp) +::: +::::: +:::::: + +## Rendering terrain in 3D + +Además, se puede generar una visualización 3D de la topografía en la **vista 3D** (3D view) de GRASS utilizando el módulo *NVIZ*. + +1. Comience abriendo el DEM de *elevación* (elevation) en el administrador de capas. Asegúrese de que **No other maps will be displayed, except for the elevation map**. + +2. Seleccione **Vista 3D** en el menú desplegable en la parte superior de la ventana de visualización del mapa. + +3. Esto debería mostrar el mapa de elevación en 3D con el mismo sombreado que se ve en la pantalla 2D. + +4. Utilice los controles en la pestaña "Ver" para cambiar la perspectiva, la exageración z y otras características. + +5. Para obtener una vista más detallada del terreno, disminuya la resolución "fina" en la pestaña "Datos". + +![Topografía DEM renderizada en 3D](img_terrain/NVIZ_elevation.webp) + +# Análisis y modelado de las características del terreno + +GRASS facilita el modelado y análisis de una amplia gama de características del terreno mediante un DEM. La pendiente y la orientación del terreno, así como las características topográficas como picos, crestas y valles, son importantes para estudiar y modelar las características del suelo, la vegetación, los microclimas, el flujo de agua y el movimiento superficial. Modelar el flujo del agua sobre el terreno también es relevante para la ecología, las redes fluviales y el riesgo de inundaciones. En este tutorial, demostraremos cómo usar un DEM para realizar estos análisis. + +## Pendiente y aspecto + +::::: grid +::: g-col-6 +La diferencia de elevación entre una celda ráster de un MDE y las celdas circundantes permite calcular la pendiente del terreno para dicha celda. También permite calcular la orientación de la celda (su orientación). + +Nosotros podemos usar la misma herramienta [r.slope.aspect](https://grass.osgeo.org/grass-stable/manuals/r.slope.aspect.html) para determinar la pendiente y la orientación, así como varias otras características del terreno. + +Crearemos nuevos mapas a partir del DEM de *elevación* (elevation) para la pendiente (cada celda almacenará la pendiente en grados) y el aspecto (cada celda almacenará el aspecto en grados desde el norte). +::: + +::: g-col-6 +![Diagrama esquemático de la pendiente y la orientación de un DEM. Las flechas sólidas indican la pendiente de las celdas para los colores correspondientes y las líneas discontinuas indican la orientación.](img_terrain/slope.webp) +::: +::::: + +:::::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Abra la herramienta r.slope.aspect desde el menú Análisis de terreno/Ráster/Pendiente y orientación. + +2. Establezca la capa ráster de elevación como "Nombre del mapa ráster de elevación de entrada". +::: + +::: g-col-6 +![](img_terrain/r.slope1.webp) +::: +::::: + +::::: grid +::: g-col-6 +3. Introduzca el nombre *pendiente* (slope) para "Nombre para el mapa ráster de pendiente de salida". + +4. Introduzca el nombre *aspecto* (aspect) para "Nombre para el mapa ráster de aspecto de salida". +::: + +::: g-col-6 +![](img_terrain/r.slope2.webp) +::: +::::: + +::::: grid +::: g-col-6 +5. En la pestaña Configuración, marque la casilla "Crear orientación en grados en sentido horario desde el norte". De lo contrario, la orientación se calculará en grados en sentido antihorario desde el este. + +6. Haga clic en Ejecutar. +::: + +::: g-col-6 +![](img_terrain/r.slope3.webp) +::: +::::: + +#### Command line + +Agregue la opción "-n" para que la orientación se registre en grados en sentido horario desde el norte. De lo contrario, la orientación se calculará en grados en sentido antihorario desde el este. + +```{bash} +r.slope.aspect elevation=elevation slope=slope aspect=aspect -n +``` + +#### Python + +Agregue la opción "-n" para que la orientación se registre en grados en sentido horario desde el norte. De lo contrario, la orientación se calculará en grados en sentido antihorario desde el este. +```{python} +gs.run_command("r.slope.aspect", + elevation="elevation", + slope="slope", + aspect="aspect", + flags="n") +``` + +:::::::::::: + +Aquí están los mapas de pendiente y orientación resultantes. + +- Observe cómo la tabla de colores de orientación en escala de grises predeterminada le da al mapa una apariencia 3D, similar a la de un mapa en relieve. Esto se debe a que se sombrea de claro a oscuro según la orientación del terreno, de forma similar a las sombras del sol [r.relief](https://grass.osgeo.org/grass-stable/manuals/r.relief.html) La herramienta utiliza un algoritmo similar para generar un mapa de relieve. + +- La [r.slope.aspect](https://grass.osgeo.org/grass-stable/manuals/r.slope.aspect.html) La herramienta puede producir otros mapas analíticos, incluidos mapas del **cambio de pendiente** (change of slope) tanto en dirección descendente como transversal, y la **tasa de cambio de pendiente** (rate of change of slope) en diferentes direcciones. + +::::: grid +::: g-col-6 +![mapa ráster de pendiente](img_terrain/flagstaff_slope.webp) +::: + +::: g-col-6 +![mapa ráster de aspecto](img_terrain/flagstaff_aspect.webp) +::: +::::: + +### Agregar una leyenda a la visualización de pendiente y topografía + +Puede colorear un mapa de relieve con pendiente utilizando el mismo procedimiento descrito anteriormente, pero utilizando el mapa de *pendiente* (slope) para el color en lugar del DEM de *elevación* (elevation). Esto le permitirá comparar el relieve topográfico y la pendiente. + +Si bien esto puede ayudarle a visualizar las diferencias entre áreas, usar una **leyenda** (legend) puede ayudarle a determinar el rango de valores presentes en el área ráster y cómo los colores corresponden a estos valores. Con GRASS, puede crear fácilmente una leyenda muy informativa para su mapa. + +:::::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 +Se puede acceder a la herramienta de leyenda ráster desde la barra de herramientas de la ventana de visualización. Esta herramienta ofrece numerosas opciones. Exploraremos varias de ellas. +::: + +::: g-col-6 +![mostrar herramienta de leyenda](img_terrain/legend_tool.webp) +::: +::::: + +::::: grid +::: g-col-6 + +1. En la pestaña Entrada, ingrese *pendiente* (slope) como "Nombre del mapa ráster". +::: + +::: g-col-6 +![d.entrada de leyenda](img_terrain/d.legend1.webp) +::: +::::: + +::::: grid +::: g-col-6 +2. En la pestaña Título, ingrese "Pendiente" como "Título de la leyenda" e ingrese 14 como "Tamaño de fuente del título". +::: + +::: g-col-6 +![d.entrada de leyenda](img_terrain/d.legend2.webp) +::: +::::: + +::::: grid +::: g-col-6 +3. En la pestaña Avanzada, ingrese el símbolo de grado (\°) o la palabra "deg" como "Unidades para mostrar" (Units to display). +::: + +::: g-col-6 +![d.entrada de leyenda](img_terrain/d.legend3.webp) +::: +::::: + +::::: grid +::: g-col-6 +4. En la pestaña Gradiente, marque la casilla "Agregar histograma a la leyenda suavizada" (Add histogram to smoothed legend). +::: + +::: g-col-6 +![d.entrada de leyenda](img_terrain/d.legend5.webp) +::: +::::: + +::::: grid +::: g-col-6 +5. La pendiente máxima del mapa es de 76 grados. Para una leyenda atractiva, podemos limitar la visualización a 0-75 grados. En la pestaña Subconjunto, introduzca "0,75" en el cuadro de subconjunto para los valores mínimo y máximo que se mostrarán. +::: + +::: g-col-6 +![d.entrada de leyenda](img_terrain/d.legend6.webp) +::: +::::: + +::::: grid +::: g-col-6 +6. Por último, en la pestaña Configuración de fuente, ingrese 12 como "Tamaño de fuente" para la leyenda. + +7. Haga clic en Aceptar para ver la leyenda. Puede reposicionarla y redimensionarla con el ratón o numéricamente en la pestaña Opciones. +::: + +::: g-col-6 +![d.legend entrada](img_terrain/d.legend7.webp) +::: +::::: + +#### Command line + +Se puede generar una leyenda utilizando el [d.legend](https://grass.osgeo.org/grass-stable/manuals/d.legend.html) orden. + +```{bash} +d.legend -d raster=slope title=Slope title_fontsize=14 units=° labelnum=4 range=0,75 fontsize=12 +``` + +#### Python + +Se puede generar una leyenda utilizando el [d.legend](https://grass.osgeo.org/grass-stable/manuals/d.legend.html) orden. + +```{python} +gs.run_command("d.legend", + map="slope", + color="slope", + title="Slope", + title_fontsize=14, + units="°", + labelnum=4, + range="0,75", + fontsize=12) +``` + +:::::::::::: + +Aquí está el resultado. + +- No solo muestra el rango de valores de pendiente y los colores de los diferentes valores, sino que el histograma también muestra el número de celdas para cada valor de pendiente. + +- También puede agregar una barra de escala y una flecha norte desde el mismo elemento de la barra de menú en la ventana de visualización donde seleccionó la herramienta de leyenda. + +![Mapa en relieve coloreado por pendiente, con leyenda, barra de escala y flecha norte](img_terrain/slope_relief_legend.webp) + +### Visualización de valores de pendiente específicos + +En lugar de ver todas las pendientes u otras características del terreno, a veces resulta útil centrarse en un rango limitado de valores. Esto se puede hacer rápidamente en la herramienta de propiedades de visualización para mapas ráster. + +:::::::::::: {.panel-tabset group="language"} + +#### GUI + +1. Asegúrese de que los mapas de *pendiente* (slope) y *relieve* (relief) se muestren en el Administrador de capas (haga doble clic en un mapa en el Catálogo de datos para agregarlo al Administrador de capas). El mapa de *pendiente* (slope) debe estar encima del mapa de *relieve* (relief). + +2. Haga doble clic en el mapa de *pendiente* (slope) para abrir su herramienta de propiedades de visualización. ([d.rast](https://grass.osgeo.org/grass-stable/manuals/d.rast.html)) + +3. En la pestaña Selección, ingrese 10-76 para mostrar solo pendientes de 10° o más y haga clic en Aplicar o Aceptar. + +4. Puedes mostrar esto sobre el mapa de relieve configurando la **opacidad** (opacity) al 50%. + +#### Command line + +Solo se pueden mostrar pendientes ≥ 10° utilizando el ([d.rast](https://grass.osgeo.org/grass-stable/manuals/d.rast.html)) herramienta. + +```{bash} +d.rast map=slope values=10-76 +``` + +#### Python + +Solo se pueden mostrar pendientes ≥ 10° utilizando el ([d.rast](https://grass.osgeo.org/grass-stable/manuals/d.rast.html)) herramienta. + +```{python} +gs.run_command("d.rast", + map="slope", + values="10-76") +``` + +:::::::::::: + +::::: grid +::: g-col-6 +El filtrado por un rango limitado de valores de pendiente resalta importantes características del terreno de la región de Flagstaff. + +- El terreno en esta zona está dominado por el campo volcánico de San Francisco, incluyendo el volcán estratificado San Francisco Peaks, y numerosos otros volcanes y conos de ceniza más pequeños. Los altos valores de pendiente acentúan estas características volcánicas en la parte superior del mapa. + +- En la esquina suroeste del mapa se encuentra el comienzo del escarpe de la Meseta del Colorado, donde el terreno desciende rápidamente cientos de metros hacia el valle del Río Verde. El drenaje profundo de esta región delimita esta característica del terreno. +::: + +::: g-col-6 +![Áreas de alta pendiente (10-76°) superpuestas al relieve topográfico](img_terrain/flagstaff_highslope.webp) +::: +::::: + +## Formas topográficas + +Los análisis de pendiente, orientación y otros análisis relacionados pueden ayudar a identificar características del terreno como volcanes y cañones. GRASS también ofrece herramientas para identificar características topográficas y clasificar el terreno en categorías de accidentes geográficos. En el conjunto estándar de herramientas de GRASS, estas incluyen: + +- [r.geomorphon](https://grass.osgeo.org/grass-stable/manuals/r.geomorphon.html): Calcula geomorfos (formas del terreno) y geometría asociada utilizando el enfoque de visión artificial. + +- [r.param.scale](https://grass.osgeo.org/grass-stable/manuals/r.param.scale.html): Extrae parámetros del terreno de un DEM. + +Los complementos GRASS adicionales útiles para este tipo de análisis de terreno incluyen: + +- [r.local.relief](https://grass.osgeo.org/grass-stable/manuals/addons/r.local.relief.html) + +- [r.shaded.pca](https://grass.osgeo.org/grass-stable/manuals/addons/r.shaded.pca.html) + +- [r.skyview](https://grass.osgeo.org/grass-stable/manuals/addons/r.skyview.html) + +- [r.terrain.texture](https://grass.osgeo.org/grass-stable/manuals/addons/r.terrain.texture.html) + +En este tutorial, exploraremos brevemente [r.geomorphon](https://grass.osgeo.org/grass-stable/manuals/r.geomorphon.html) Para clasificar el DEM en un conjunto de categorías de accidentes geográficos. Le recomendamos probar las otras herramientas para usar los conjuntos de datos de muestra estándar de GRASS o sus propios datos. + +- La herramienta *r.geomorphon* identifica y clasifica una celda utilizando información sobre el relieve topográfico en ocho direcciones (ver la [r.geomorphon](https://grass.osgeo.org/grass-stable/manuals/r.geomorphon.html) Descripción para más detalles)). Hay varias opciones. + +- La opción más importante es el **Radio de búsqueda exterior** (Outdoor search radius), que es la distancia máxima que el algoritmo registrará en el relieve topográfico. Por defecto, esta distancia se mide en celdas del mapa, pero puede cambiarla a metros con la opción "-m". + +- Cuando el radio es pequeño, el terreno se clasifica en accidentes geográficos locales de pequeña escala: por ejemplo, pequeños montículos, barrancos y depresiones locales. Cuando el radio es grande, el terreno se clasifica en accidentes geográficos más grandes: por ejemplo, grandes colinas y montañas, valles y cuencas. + +- Se puede configurar un **radio de búsqueda interna** (indoor search radius) para que la herramienta ignore todo relieve menor cerca de una celda. + +:::::::::::: {.panel-tabset group="language"} + +#### GUI + +Comenzaremos con un amplio radio de búsqueda exterior de 200 celdas (6 km en el DEM de Flagstaff). Esto permitirá clasificar accidentes geográficos a mayor escala.. + +::::: grid +::: g-col-6 + +1. Seleccione el *r.geomorphon* herramienta del menú Raster/Análisis del terreno/Formas del terreno. + +2. Introduzca 200 para "Radio de búsqueda exterior" y 10 para "Radio de búsqueda interior". +::: + +::: g-col-6 +![](img_terrain/r.geomorphon1.webp) +::: +::::: + +::::: grid +::: g-col-6 +3. Ingrese landforms200 para el mapa de salida en el cuadro de texto "Formas geomórficas más comunes" (Most common geomorphic shapes). +::: + +::: g-col-6 +![](img_terrain/r.geomorphon2.webp) +::: +::::: + +::::: grid +::: g-col-6 +4. En la pestaña Opcional, configure "Comparación" (comparison) en *anglev2_distance* para mejores resultados. + +5. Haz clic en Ejecutar. Este análisis puede tardar unos minutos dependiendo del procesador y la memoria RAM. +::: + +::: g-col-6 +![](img_terrain/r.geomorphon3.webp) +::: +::::: + +Ahora cree un análisis de accidentes geográficos muy pequeños utilizando un radio de búsqueda de solo 5 celdas (150 m). + +1. Repita los mismos pasos para los accidentes geográficos grandes, pero con 5 para el radio de búsqueda exterior y 0 para el radio de búsqueda interior. El análisis se ejecutará mucho más rápido con esta configuración. + +#### Command line + +Comenzaremos con un amplio radio de búsqueda exterior de 200 celdas (600 m en el DEM de Flagstaff). Esto permitirá clasificar accidentes geográficos de mayor escala. + +```{bash} +r.geomorphon elevation=elevation forms=landforms200 search=200 skip=10 flat=1 comparison=anglev2_distance +``` + +Repita con un radio de búsqueda mucho más pequeño para clasificar accidentes geográficos mucho más pequeños. + +```{python} +r.geomorphon elevation=elevation@terrain forms=landforms5 search=5 skip=0 flat=1 comparison=anglev2_distance +``` + +#### Python + +Comenzaremos con un amplio radio de búsqueda exterior de 200 celdas (600 m en el DEM de Flagstaff). Esto permitirá clasificar accidentes geográficos de mayor escala. + +```{python} +gs.run_command("r.geomorphon", + elevation="elevation", + forms="landforms200", + search=200, + skip=10, + flat=1, + comparison="anglev2_distance") +``` + +Repita con un radio de búsqueda mucho más pequeño para clasificar accidentes geográficos mucho más pequeños. + +```{python} +gs.run_command("r.geomorphon", + elevation="elevation", + forms="landforms200", + search=5, + skip=0, + flat=1, + comparison="anglev2_distance") +``` + +:::::::::::: + +Las dos imágenes a continuación muestran accidentes geográficos clasificados por *r.geomorphon* a diferentes escalas en un primer plano del DEM de *elevación* (elevation) de Flagstaff, centrándose en una sección del campo volcánico de San Francisco. Los mapas de accidentes geográficos se muestran con sombreado de color sobre el mapa de relieve topográfico. + +- A mayor escala (radio de búsqueda de 200 celdas), los picos y crestas marcan las cimas de todos los grandes volcanes y pequeños conos de ceniza. Están rodeados por zonas de estribaciones, laderas y hondonadas, divididas por valles que indican sus campos de lava. + +- A menor escala (radio de búsqueda de 5 celdas), los estrechos bordes de los cráteres volcánicos están marcados por crestas, con el interior de los cráteres a menudo delimitado por valles y fosas. Todas las características volcánicas se clasifican como laderas. + +::::: grid +::: g-col-6 +![Formaciones terrestres a gran escala en un radio de búsqueda de 200 celdas](img_terrain/geomorphons_radius200_10.webp) +::: + +::: g-col-6 +![Formas terrestres a pequeña escala en un radio de búsqueda de 5 celdas](img_terrain/geomorphons_radius5_0.webp) +::: +::::: + +# Cuencas hidrográficas y modelado hidrológico + +Dado que los rásteres DEM permiten generar mapas de pendiente y orientación, esta información puede utilizarse para modelar el flujo de agua a través del relieve topográfico del terreno. Esto, a su vez, permite una amplia gama de análisis, a menudo descritos como modelado de **cuencas hidrográficas** (water basins) o **hidrológico** (hydrology). Algunos ejemplos de modelado de cuencas hidrográficas son: + +- Modelado de la **acumulación de caudal** (flow accumulation), que representa la cantidad de agua que pasa por cada celda a medida que fluye pendiente abajo sobre un terreno; + +- Identificación de **cuencas hidrográficas** (water basins), la porción de terreno que drena hacia una red fluvial de un tamaño determinado; + +- Modelado de una **red fluvial o de drenaje** (river or drainage network) considerando las ubicaciones de mayor acumulación de caudal dentro de una cuenca hidrográfica; + +- Modelar la **erosión potencial** (potential erosion) en función de la cantidad de agua que fluye a través de las celdas de un terreno, su pendiente (que afecta la velocidad del flujo de agua), la cobertura del suelo y el sustrato. + +- Modelar el **potencial de inundaciones** (flood potential); + +- Modelar la **infiltración potencial** (potential infiltration) de aguas superficiales y su impacto en la vegetación y las aguas subterráneas; + +- Y muchos otros fenómenos ambientales. + +GRASS tiene muchos módulos para analizar y modelar [hydrology and watersheds](https://grass.osgeo.org/grass-stable/manuals/topic_hydrology.html), Mucho más de lo que se puede cubrir en este tutorial. El objetivo de este tutorial es darle una idea del potencial del modelado de cuencas hidrográficas en GRASS y animarle a explorar su amplia gama de herramientas por su cuenta. Para ello, este tutorial explorará algunas de las numerosas características de dos de estas herramientas. [r.watershed](https://grass.osgeo.org/grass-stable/manuals/r.watershed.html) y [r.stream.extract](https://grass.osgeo.org/grass-stable/manuals/r.stream.extract.html). + +## Cuencas hidrográficas + +Las cuencas hidrográficas son porciones de terreno donde toda el agua superficial fluye por tierra hacia un único sistema de drenaje y sale de la cuenca por una única salida. Pueden ser tan pequeñas como unos pocos kilómetros o tan grandes como las cuencas que abarcan toda el agua que desemboca en los ríos Misisipi o Amazonas. + +- Si bien hay muchas entradas posibles que pueden afectar la forma en que *r.watershed* modela diferentes características hidrológicas, aquí utilizaremos el ejemplo más simple. + +- El mínimo requerido para modelar cuencas hidrográficas, acumulaciones de caudal y redes fluviales es un DEM (*elevación* (elevation)) y el tamaño mínimo de las cuencas a modelar (medido en número de celdas). Crearemos cuencas con un tamaño mínimo de **10,000** celdas (9 km²). Elegir un número menor generaría un mapa de muchas cuencas más pequeñas. + +- Aunque comenzamos con el mapeo de cuencas hidrográficas, para ahorrar tiempo, *r.watershed* también generará resultados para la acumulación de flujo y segmentos de corriente al mismo tiempo que crea un mapa de cuenca. + +- Para producir mapas de cuencas y arroyos con mejor apariencia, también seleccionaremos las opciones "Acumulación de flujo positivo" (Accumulation of positive flow) y "Embellecer áreas planas". + +::::::::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Abre el[r.watershed](https://grass.osgeo.org/grass-stable/manuals/r.watershed.html) módulo del menú Modelado ráster/hidrológico/Análisis de cuencas hidrográficas. + +2. Establezca "Nombre del mapa ráster de elevación" (Elevation raster map name) en *elevación* (elevation). + +3. Ingrese 10,000 para "Tamaño mínimo de la cuenca hidrográfica exterior" (Minimum size of the external watershed). +::: + +::: g-col-6 +![](img_terrain/r.watershed1.webp) +::: +::::: + +::::: grid +::: g-col-6 +4. En la pestaña "Salidas", introduzca: + +- watershed_accumulation10000 para "acumulación" (accumulation), + +- watershed_basin10000 para "cuencas" (basins) y + +- watershed_streams10000 para "segmentos de corriente" (streams). +::: + +::: g-col-6 +![](img_terrain/r.watershed2.webp) +::: +::::: + +::::: grid +::: g-col-6 +5. En la pestaña Opcional: + +- Marque la casilla "Acumulación de flujo positiva" (Positive flow accumulation). De lo contrario, la acumulación de flujo será negativa para las cuencas en el borde del mapa, lo que indica que podrían subrepresentar la acumulación. + +- Marque la casilla "Embellecer áreas planas" (Beautify flat areas) para obtener segmentos de corriente más precisos en las áreas planas. + +6. Haga clic en Ejecutar. +::: + +::: g-col-6 +![](img_terrain/r.watershed3.webp) +::: +::::: + +#### Command line + +```{bash} +r.watershed -a -b elevation=elevation threshold=10000 accumulation=watershed_accumulation10000 basin=watershed_basins10000 stream=watershed_streams10000 +``` + +#### Python + +```{python} +gs.run_command("r.watershed", + elevation="elevation", + threshold=10000, + accumulation=watershed_accumulation10000, + basin="watershed_basin10000", + stream="watershed_streams10000", + flags="ab") + +``` + +::::::::::::::: + +Mapa resultante de cuencas hidrográficas. + +![Cuencas hidrográficas con ≥ 10 000 celdas coloreando un mapa en relieve](img_terrain/watershed_basins.webp) + +## Acumulación de flujo + +Arriba, también elaboramos un mapa de acumulación de flujo. Un mapa de acumulación de flujo modela el flujo potencial de agua sobre un terreno: + +::::: grid +::: g-col-6 + +- Suponiendo que cae un centímetro de lluvia en cada celda de un MDE, los valores de un mapa de acumulación de flujo mostrarán la profundidad del agua en centímetros que se acumula y fluye sobre cada celda a medida que el agua fluye hacia ella desde celdas adyacentes en pendiente ascendente. + +El mapa que creamos asume que cayó la misma cantidad de lluvia en cada celda y que el relieve topográfico es el único factor que afecta el flujo superficial del agua. Por lo tanto, el modelo de acumulación de flujo generado representa valores máximos. + +- Las configuraciones adicionales en *r.watershed* permiten modelar el flujo terrestre de manera más realista con diferentes cantidades de lluvia cayendo en la región, y la vegetación, las características del suelo o las barreras como represas o diques también afectan la acumulación. + +- [r.watershed](https://grass.osgeo.org/grass-stable/manuals/r.watershed.html) utiliza un algoritmo de **dirección de flujo múltiple** (multiple flow direction) por defecto, en el que el agua que fluye desde una celda se distribuye entre todas las celdas adyacentes de ladera abajo. El mayor caudal se dirige a la celda adyacente de ladera abajo con mayor diferencia de elevación, y los caudales menores se asignan a las celdas de ladera abajo con menor diferencia de elevación. + +- Si bien algunas herramientas de modelado hidrológico requieren que las depresiones o sumideros de un DEM se llenen primero para canalizar correctamente el agua a través del terreno, *r.watershed* no lo requiere. En su lugar, utiliza un algoritmo de ruta de menor costo para canalizar el agua a través de las depresiones. +::: + +::: g-col-6 +![Mapa de acumulación de flujo para la región de Flagstaff](img_terrain/watershed_accumulation.webp) + +![Diagrama esquemático de un modelo de acumulación de flujo en múltiples direcciones de flujo en un DEM](img_terrain/watershed.webp) +::: +::::: + +Al igual que con la pendiente, una leyenda puede ayudar a transmitir la información de un mapa de acumulación de flujo con mayor claridad. Sin embargo, la distribución de los valores de acumulación no es lineal: muchas celdas en laderas presentan una acumulación mínima y algunas celdas en los fondos de los arroyos principales presentan valores mucho más altos. Por esta razón, una escala logarítmica comunica mejor las relaciones entre colores y valores. Cree una leyenda como se describió anteriormente, pero con opciones adicionales. + +::::::::::::::: {.panel-tabset group="language"} + +#### GUI + +- Nombre del mapa ráster: watershed_accumulation10000@terrain (pestaña Entrada). + +- Título de la leyenda: "Acumulación de caudal" (pestaña Título). + +- Tamaño de fuente del título: 14 (pestaña Título). + +- Usar escala logarítmica: marca la casilla (pestaña Avanzado). + +- Valores específicos para dibujar marcas: 1, 10, 100, 1000, 10000, 100000, 1000000 (pestaña Gradiente). + +- Tamaño de fuente: 12 (pestaña Configuración de fuente). + +#### Command line + +```{bash} +d.legend -l raster=watershed_accumulation100000 title="Flow Accumulation" title_fontsize=14 label_values=1,10,100,1000,10000,100000,1000000 fontsize=12 +``` + +#### Python + +```{python} +gs.run_command("d.legend", + raster="watershed_accumulation10000", + title="Flow Accumulation", + title_fontsize=14, + label_values="1,10,100,1000,10000,100000,1000000", + fontsize=12, + flags="l") +``` + +::::::::::::::: + +Aquí se presenta un mapa de acumulación de flujo con una leyenda en escala logarítmica. Observe la mayor acumulación en las laderas de los picos de San Francisco, en los principales cauces fluviales y en las pequeñas depresiones lacustres poco profundas. + +![Mapa de acumulación de flujo coloreando un mapa de relieve con leyenda de escala logarítmica](img_terrain/watershed_accumulation_legend.webp) + +## Redes de transmisión + +*r.watershed* También se produjeron mapas de arroyos que representan los drenajes primarios de cada cuenca hidrográfica de 10.000 celdas. + +::::: grid +::: g-col-6 + +- Se trata de un mapa ráster de arroyos, con cada celda codificada y coloreada para coincidir con la cuenca que drena, como se ve en el mapa de la región de Flagstaff a la derecha. + +- El fondo se configura en negro en las propiedades de visualización porque, de lo contrario, es muy difícil distinguir las celdas ráster de los arroyos. +::: + +::: g-col-6 +![Mapa de segmentos de corrientes raster para cada cuenca hidrográfica](img_terrain/watershed_streams.webp) +::: +::::: + +### Vectorización de una red de corrientes con *r.to.vect* + +Podemos hacer que los arroyos sean más visibles si convertimos el mapa ráster de arroyos en un mapa vectorial de líneas. Esto se puede hacer fácilmente con el [r.to.vect](https://grass.osgeo.org/grass-stable/manuals/r.to.vect.html) herramienta que convierte mapas raster en vectores. + +- *r.to.vect* puede convertir puntos, líneas y áreas. En este caso, convertiremos los segmentos de corriente creados por *r.watershed* en líneas vectoriales. + +- Los segmentos de corriente ráster se codifican con los valores de las cuencas hidrográficas que drenan. Estos valores pueden transferirse a los segmentos de línea vectoriales equivalentes. + +::::::::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Select the [r.to.vect](https://grass.osgeo.org/grass-stable/manuals/r.to.vect.html) herramienta desde el menú Conversiones de tipo ráster/mapa/ráster a vector **o** desde el menú Archivo/Conversiones de tipo mapa/ráster a vector. + +2. Ingrese el mapa *watershed_streams10000* como "Nombre del mapa ráster de entrada" (Input raster map name). + +3. Introduzca *watershed_streams10000* como "Nombre del mapa vectorial de salida" (Output raster map name). + +4. Introduzca *línea* (line) como "Tipo de entidad de salida" (Output entity type). + +5. En la pestaña "Opciones" (Options), marque la casilla "Usar valores ráster como categorías en lugar de secuencia única" (Use raster values as categories instead of a single sequence). Esto copiará el número de cuenca en el campo clave del índice *CAT* del nuevo mapa vectorial de líneas. + +6. Haga clic en "Ejecutar". +::: + +::: g-col-6 +![](img_terrain/r.vect1.webp) +::: +::::: + +#### Command line + +```{bash} +r.to.vect -v input=watershed_streams10000 output=watershed_streams10000 type=line +``` + +#### Python + +```{python} +gs.run_command("r.to.vect", + input="watershed_streams10000", + output="watershed_streams10000", + type="line", + flags="v") +``` + +::::::::::::::: + +Los mapas a continuación muestran la red de corrientes vectoriales superpuestas a las cuencas hidrográficas a la izquierda y a un mapa de relieve sombreado en color a la derecha. + +::::: grid +::: g-col-6 +![corrientes vectoriales y cuencas hidrográficas](img_terrain/watershed_basins&streamvectors.webp) +::: + +::: g-col-6 +![corrientes vectoriales y relieve topográfico](img_terrain/relief&streamvectors.webp) +::: +::::: + +::: {.callout-note title="Tip"} +Para obtener una red de arroyos más detallada, ejecute *r.watershed* con un tamaño mínimo de cuenca inferior a las 10,000 celdas utilizadas anteriormente. Si elige un tamaño mínimo de cuenca muy pequeño para crear un mapa de arroyos muy detallado, es posible que se le solicite ejecutar [r.thin](https://grass.osgeo.org/grass-stable/manuals/r.thin.html) antes de ejecutar *r.to.vect* para asegurarse de que el mapa de flujo ráster consta solo de líneas de flujo de celdas de cuadrícula individuales. +::: + +### Vectorización de una red de flujo con *r.stream.extract* + +Una forma alternativa de generar una red de arroyos a partir de un análisis de cuencas hidrográficas es con el [r.stream.extract](https://grass.osgeo.org/grass-stable/manuals/r.stream.extract.html) herramienta. + +- Esta herramienta utiliza un DEM y un mapa de acumulación de flujo para generar una red fluvial vectorial o ráster. + +El detalle de la red fluvial se controla seleccionando la acumulación mínima de flujo. + +- *r.stream.extract* no solo crea un mapa de líneas vectoriales de arroyos, sino que también genera puntos vectoriales en la cabecera de cada arroyo y en las uniones de un arroyo con todos los demás arroyos. + +::::::::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Seleccione el[r.stream.extract](https://grass.osgeo.org/grass-stable/manuals/r.to.vect.html) herramienta del menú Modelado ráster/hidrológico/Extracción de redes de corrientes. + +2. Introduzca *elevación* (elevation) en el campo "Nombre del mapa ráster de elevación de entrada" (Input elevation raster map name). + +3. Introduzca 5000 en "Acumulación mínima de caudal para arroyos" (Minimum flow accumulation for streams) (los números más bajos generarán una red de arroyos más detallada, mientras que los números más altos generarán una red menos detallada). +::: + +::: g-col-6 +![](img_terrain/r.stream.extract1.webp) +::: +::::: + +::::: grid +::: g-col-6 +4. Ingrese *watershed_accumulation10000* para el "Nombre del mapa ráster de acumulación de entrada" (Input Accumulation Raster Map Name). +::: + +::: g-col-6 +![](img_terrain/r.stream.extract2.webp) +::: +::::: + +::::: grid +::: g-col-6 +5. Introduzca *streams5000accumulation* en "Nombre del mapa vectorial de salida con ID de flujo único" (Name of the output vector map with unique flow ID). + +6. Haga clic en "Ejecutar". +::: + +::: g-col-6 +![](img_terrain/r.stream.extract3.webp) +::: +::::: + +#### Command line + +```{bash} +r.stream.extract elevation=elevation accumulation=watershed_accumulation10000@ threshold=5000 stream_vector=streams5000accumulation +``` + +#### Python + +```{python} +gs.run_command("r.stream.extract", + elevation="elevation", + accumulation="watershed_accumulation10000@", + threshold=5000, + stream_vector="streams5000accumulation") +``` + +::::::::::::::: + +Las 2 imágenes a continuación muestran la red de arroyos generada por *r.stream.extract* superponiendo un mapa de relieve sombreado en color (izquierda) y una comparación de esta red con la generada por r.watershed y luego vectorizada con *r.to.vect* (derecha). + +- Observe las líneas de corriente (azules) y los puntos (rojos) que indican las cabeceras y las confluencias de los arroyos en la imagen izquierda. Las líneas o los puntos se pueden mostrar, ocultar o mostrar juntos en la herramienta de propiedades vectoriales. [d.vect](https://grass.osgeo.org/grass-stable/manuals/d.vect.html). + +- En la imagen de la derecha, la red de arroyos más detallada generada por *r.stream.extract* se muestra en líneas azules angostas y la red de arroyos generada por *r.watershed* y *r.to.vect* se muestra como líneas amarillas más anchas. + +::::: grid +::: g-col-6 +![](img_terrain/relief&extracted_streams.webp) +::: + +::: g-col-6 +![](img_terrain/stream_comparison.webp) +::: +::::: + +::: {.callout-note title="Tip"} +Para mostrar la red de corriente sin los nodos de unión, desmarque la casilla "punto" en la pestaña Selección de la herramienta de propiedades de visualización de vectores (command: *d.vect map=streams5000accumulation type=line*) +::: + +# Resumen + +En este tutorial, hemos repasado solo algunas de las muchas herramientas disponibles en GRASS para realizar análisis de terreno y cuencas hidrográficas. Utilizamos el conjunto de datos de ejemplo de Flagstaff para completar este análisis, pero también puede probar otros conjuntos de datos y mapas DEM. También puede usar los conjuntos de datos de ejemplo de GRASS para explorar las muchas otras herramientas disponibles en el área de análisis de terreno y [hydrology](https://grass.osgeo.org/grass-stable/manuals/topic_hydrology.html) Secciones de hidrología. Además de los módulos principales de GRASS, también hay muchos otros disponibles como [GRASS addons](https://grass.osgeo.org/grass-stable/manuals/addons/). + +:::{.smaller} +El desarrollo de este tutorial fue financiado en parte por la Fundación Nacional de Ciencias de EE. UU. (NSF) (https://www.nsf.gov/), premio [2303651] (https://www.nsf.gov/awardsearch/showAward?AWD_ID=2303651) +::: + +--- + +:::{.smaller} +*© Michael Barton y Eunice Villaseñor Iribe* +*El desarrollo de este tutorial fue financiado en parte por la Fundación Nacional de Ciencias de EE. UU. (NSF) (https://www.nsf.gov/), premio [2303651] (https://www.nsf.gov/awardsearch/showAward?AWD_ID=2303651)* +::: + diff --git a/content/tutorials/thematic_maps/thematic_maps_es.qmd b/content/tutorials/thematic_maps/thematic_maps_es.qmd new file mode 100644 index 0000000..bd2f43c --- /dev/null +++ b/content/tutorials/thematic_maps/thematic_maps_es.qmd @@ -0,0 +1,1463 @@ +--- +title: "Elaboración de mapas temáticos" +author: "Eunice Villaseñor Iribe y Michael Barton" +date: 2025-06-25 +date-modified: today +lightbox: true +engine: knitter +image: img_thematic/thumbnail.webp +format: + html: + embed-resources: true + toc: true + code-tools: true + code-copy: true + code-fold: false +page-layout: article +categories: [Beginner, intermediate, raster, DEM, visualization, terrain, slope, orientation, geographical features, hydrology, streams] +description: Este tutorial guía al usuario a través de múltiples formas de analizar y modelar terrenos a partir de mapas raster DEM. +execute: + eval: false +copyright: + holder: Michael Barton and Eunice Villaseñor Iribe + year: 2026 +funding: "La creación de este tutorial fue financiada en parte por la subvención FAIN 2303651 de la Fundación Nacional de Ciencias de EE. UU.." +--- +Los mapas temáticos son la forma más común de visualización analítica en software SIG. Un mapa temático utiliza el color, la forma o el tamaño de los objetos, para representar la variación geográfica de alguna propiedad, representada por valores categóricos o numéricos en datos espaciales. + +La mayoría de los programas SIG permiten crear mapas temáticos a partir de objetos vectoriales (puntos, líneas y áreas). GRASS también permite crear mapas temáticos a partir de datos vectoriales. También permite crear mapas temáticos a partir de rásteres, que representan el espacio como una cuadrícula de celdas o píxeles. + +En este tutorial, exploraremos la creación de mapas temáticos a partir de datos geoespaciales vectoriales y raster. + +::: {.callout-note title="Dataset"} +Este tutorial utiliza uno de los conjuntos de datos de muestra estándar de GRASS: nc_basic_spm_grass7. Nos referiremos a los nombres de lugares en ese conjunto de datos, pero se puede completar con cualquiera de los [standard sample data sets](https://grass.osgeo.org/download/data/) Para cualquier región. Tenga en cuenta que las columnas de atributos de mapas vectoriales específicos podrían no estar disponibles para un mapa de otra ubicación, por lo que podría necesitar usar otras columnas de atributos. + +Este tutorial está diseñado para que puedas completarlo utilizando la **GUI de GRASS**, comandos de GRASS desde la **consola o terminal**, o utilizando comandos de GRASS en un entorno de **Jupyter Notebook**. +::: + +::: {.callout-note title="Don't know how to get started?"} +Si no está seguro de cómo comenzar a utilizar GRASS utilizando su interfaz gráfica de usuario o utilizando Python, consulte los tutoriales. [Get started with GRASS GUI](../get_started/fast_track.qmd) and [Get started with GRASS & Python in Jupyter Notebooks](../get_started/fast_track_grass_and_python.qmd). +::: + +# Mapas temáticos vectoriales + +## Mapas temáticos en el Administrador de capas + +### Diferentes colores y tamaños para representar el valor de una columna + +Una de las maneras más sencillas de crear un mapa temático es con el administrador de capas. En este método, cada capa representa un tema diferente. Puedes controlar la información mostrada y las propiedades de los objetos vectoriales (por ejemplo, color o tamaño) para cada capa utilizando también las propiedades vectoriales, [d.vect](https://grass.osgeo.org/grass-stable/manuals/d.vect.html). + +Por ejemplo, podemos mostrar el mapa de puntos vectoriales *escuelas* (schools) (superponiendo un mapa vectorial de calles para mostrar la ubicación de las escuelas) usando diferentes colores y tamaños para los distintos grados. Los grados se registran en la columna *GLEVEL* de la tabla de atributos *escuelas* (schools) con valores categóricos: **E** para escuelas primarias, **M** para escuelas secundarias y **H** para escuelas preparatorias. + +- Para ello, simplemente hay que mostrar el mapa de *calles* (streets) y luego el mapa de *escuelas* (schools) en tres capas adicionales. + +- Para cada capa, seleccione el nivel de grado que se mostrará, así como el color y el tamaño del símbolo. + +- Para cada capa, también deberá especificar una etiqueta que aparecerá en la leyenda. + +::: {.panel-tabset group="language"} + +#### GUI + +**Capa de Calles** + +1. Visualice el mapa de *calles* (streets) en el administrador de capas. En las propiedades vectoriales, configure el color de la línea como **gris** (grey) para que sea más fácil ver los símbolos escolares. Haga clic en el botón de propiedades de capa (o haga clic derecho sobre la capa) para abrir el menú contextual y seleccione "Zoom a los mapas seleccionados". + +2. En la pestaña Leyenda, configure "Etiqueta para mostrar después del símbolo..." en **Wake Forest streets**. + +**Capa de Secundaria** + +1. Muestra el mapa de *escuelas* (schools) de modo que quede encima del mapa de *calles* (streets) en el administrador de capas. + +2. Abra la herramienta de propiedades vectoriales del mapa *escuelas* (schools). En la pestaña Selección, introduzca la siguiente consulta en el cuadro "Dónde": **GLEVEL='H'**. Esto hará que esta capa **solo** muestre las escuelas cuyo grado sea bachillerato. También puede generar una consulta interactiva con el botón del generador de consultas a la derecha del cuadro de entrada. + +3. Haga clic en Aplicar (para mostrar las escuelas seleccionadas, pero no cerrar la herramienta de propiedades vectoriales). Ahora solo debería ver los puntos que representan las escuelas secundarias. + +4. En la pestaña Colores de propiedades del vector, establezca el "Color de relleno del área" en **rojo** (red). + +5. En la pestaña Símbolos de propiedades del vector, establezca el "Símbolo de punto y centroide" en **básico/círculo** (basic/circle) y el "Tamaño del símbolo" en **25**. + +6. En la pestaña Leyenda, configure la "Etiqueta para mostrar después del símbolo..." en **escuelas secundarias**. + +7. Haz clic en Aceptar. Verás las escuelas secundarias representadas con círculos rojos grandes. + +**capa de escuela secundaria** + +1. Muestra nuevamente el mapa de *escuelas* (schools) en una nueva capa encima de la capa de escuelas secundarias en el administrador de capas. + +2. En las propiedades vectoriales de esta nueva capa *escuelas* (schools), ingrese **GLEVEL='M'** (para escuelas intermedias) en el cuadro Selección DONDE, configure el "Color de relleno del área" en **amarillo** (yellow), configure el "Tamaño del símbolo" (size of symbol) en **20** y la etiqueta de leyenda en **escuelas secundarias** (high schools). + +3. Haz clic en Aceptar. Ahora, junto con las escuelas secundarias, verás las escuelas secundarias representadas por círculos amarillos ligeramente más pequeños. + +**Capa de escuela primaria** + +1. Finalmente, muestra *escuelas* (schools) una tercera vez en una nueva capa encima de la capa de escuelas intermedias en el administrador de capas.. + +2. En las propiedades vectoriales de esta capa, ingrese **GLEVEL='E'** (para escuelas primarias) en el cuadro Selección DONDE, configure el "Color de relleno del área" en **azul** (blue), configure el "Tamaño del símbolo" en **15** y la etiqueta de leyenda en **escuelas primaria**(elementary schools). + +3. Haga clic en Aceptar. Ahora, junto con las escuelas secundarias y preparatorias, también verá las escuelas primarias representadas por círculos azules aún más pequeños. + +#### Línea de comando + +```{bash} +d.vect map=streets color=179:179:179:255 width=1 legend_label="Wake Forest streets" + +d.vect map=schools where="GLEVEL='H'" color=0:29:57:255 fill_color=255:0:0:255 width=1 icon=basic/circle size=25 legend_label="high schools" + +d.vect map=schools where="GLEVEL='M'" color=0:29:57:255 fill_color=255:255:0:255 width=1 icon=basic/circle size=20 legend_label="middle schools" + +d.vect map=schools where="GLEVEL='E'" color=0:29:57:255 fill_color=0:0:255:255 width=1 icon=basic/circle size=15 legend_label="elementary schools" +``` + +#### Python + +```{python} +gs.run_command("d.vect", + map="streets", + color="179:179:179", + width=1) + +gs.run_command("d.vect", + map="schools", + where="GLEVEL = 'H'", + color="0:29:57", + fill_color="255:0:0", + width=1, + icon="basic/circle", + size=25, + legend_label="high schools") + +gs.run_command("d.vect", + map="schools", + where="GLEVEL = 'M'", + color="0:29:57", + fill_color="255:255:0", + width=1, + icon="basic/circle", + size=20, + legend_label="middle schools") + +gs.run_command("d.vect", + map="schools", + where="GLEVEL = 'E'", + color="0:29:57", + fill_color="0:0:255", + width=1, + icon="basic/circle", + size=15, + legend_label="elementary schools") + +``` + +::: + +El uso de diferentes tamaños (con símbolos más grandes debajo de símbolos más pequeños), junto con el color, hace que sea más fácil ver dónde están ubicadas conjuntamente las escuelas de diferentes niveles de grado. + +![Mapa de escuelas coloreadas por nivel de grado](img_thematic/school_grade_color.webp) + +### Creando una leyenda + +Una leyenda puede ayudarle a usted y a otros usuarios a interpretar mejor los círculos de colores del mapa. Puede crear una leyenda vectorial con la herramienta de leyenda vectorial, [d.legend.vect](https://grass.osgeo.org/grass-stable/manuals/d.legend.vect.html), a la que puede acceder desde la barra de botones en la parte superior de la ventana del mapa. + +![](img_thematic/addvectorlegend.webp) + +La herramienta de leyenda vectorial crea una leyenda con entradas para todas las capas visibles en la pantalla. Permite definir un título y una fuente, y controlar el fondo. Sin embargo, ofrece menos opciones que la herramienta de leyenda ráster, descrita en la sección siguiente para mapas temáticos ráster. + +::: {.panel-tabset group="language"} + +#### GUI + +1. Abra la herramienta de leyenda vectorial. + +2. En la pestaña Título, configure el "Título de la leyenda" como "Escuelas por grado" y el "Tamaño de fuente del título" como 14. + +3. En la pestaña Fondo, marque la casilla "Mostrar fondo de la leyenda". + +4. En la pestaña Configuración de fuente, configure el "Tamaño de fuente" como 12. + +5. Haga clic en Aceptar para generar la leyenda. + +#### Línea de comando + +```{bash} +d.legend.vect -b at=74.0,30 title="Schools by Grade Level" fontsize=12 title_fontsize=14 + +d.barscale -n at=70,10 length=10 units=kilometers segment=5 width_scale=2 +``` + +#### Python + +```{python} +gs.run_command("d.legend.vect", + at="74.0,30", + title="Schools by Grade Level", + fontsize=12, + title_fontsize=14, + flags="b") + +gs.run_command("d.barscale", + at="70,10", + length=10, + units="kilometers", + segment=5, + width_scale=2, + flags="n") +``` + +::: + +Aquí está el mapa con una leyenda. Se ha añadido una barra de escala con la herramienta de barra de escala, [d.barscale](https://grass.osgeo.org/grass-stable/manuals/d.barscale.html), desde la misma barra de botones que la herramienta de leyenda vectorial. +![](img_thematic/school_grade_color&legend.webp) + +::: {.callout-note title="Tip"} +Si desea regenerar este mapa temático en el futuro, puede hacerlo rápidamente con los comandos de GRASS. + +- Abra la herramienta de propiedades vectoriales para cada capa, haga clic en el botón Copiar y pegue el comando generado en un archivo de texto. + +- Haga lo mismo con las herramientas de leyenda vectorial y de barra de escala. + +- Esto creará un archivo con la siguiente secuencia de comandos (también puede verla haciendo clic en la pestaña "Línea de comandos" de este tutorial): + +``` +d.vect map=streets color=179:179:179 width=1 legend_label="Wake Forest streets" + +d.vect map=schools where="GLEVEL='H'" color=0:29:57 fill_color=255:0:0 width=1 icon=basic/circle size=25 legend_label="high schools" + +d.vect map=schools where="GLEVEL='M'" color=0:29:57 fill_color=255:255:0 width=1 icon=basic/circle size=20 legend_label="middle schools" + +d.vect map=schools where="GLEVEL='E'" color=0:29:57 fill_color=0:0:255 width=1 icon=basic/circle size=15 legend_label="high schools" + +d.legend.vect -b at=74.0,30 title="Schools by Grade Level" fontsize=12 title_fontsize=14 + +d.barscale -n at=70,10 length=10 units=kilometers segment=5 width_scale=2 +``` + +Puede pegar estos comandos en la consola GUI de GRASS uno a la vez, en este orden para recrear este mapa. +::: + +Puedes usar este mismo enfoque para crear mapas de áreas temáticas y mapas vectoriales lineales. Aquí está el mapa *censal* (census) que muestra el tamaño de los hogares en cada sección censal. + +![](img_thematic/census_layers&legend.webp) + +::: {.callout-note title="Commands with settings to generate map"} +d.vect map=census@PERMANENT where=HH_SIZE=0 color=0:29:57:255 fill_color=255:255:102:255 width=1 icon=basic/circle legend_label="no households" + +d.vect map=census@PERMANENT where="HH_SIZE>0 AND HH_SIZE<2" color=0:29:57:255 fill_color=230:234:255:255 width=1 icon=basic/circle legend_label="< 2 people per household" + +d.vect map=census@PERMANENT where="HH_SIZE>=2 AND HH_SIZE <= 4" color=0:29:57:255 fill_color=178:188:255:255 width=1 icon=basic/circle legend_label="2-4 people per household" + +d.vect map=census@PERMANENT type=line,boundary,area,face where="HH_SIZE>4" color=0:0:0:255 fill_color=0:0:255:255 width=1 icon=basic/circle legend_label="> 4 people per household" + +d.legend.vect -b at=75,25 title="Median Household Size" fontsize=12 title_fontsize=14 + +d.barscale -n at=70.5,10 length=4 units=kilometers segment=4 width_scale=2 +::: + +## Mapas temáticos derivados estadísticamente + +### Herramienta de mapeo temático para mapas coropléticos + +Puede ser útil agrupar los valores numéricos continuos de una columna en categorías utilizando diversas medidas estadísticas de variabilidad. La herramienta de mapeo temático, [d.vect.thematic](https://grass.osgeo.org/grass-stable/manuals/d.vect.html), puede lograr esto mediante diversos enfoques estadísticos, además de admitir divisiones personalizadas. Esta herramienta solo crea mapas coropléticos (es decir, utiliza colores en lugar del tamaño de los símbolos para visualizar valores numéricos). + +::::: grid +::: g-col-6 + +- Se puede acceder a la herramienta de mapeo temático desde el ícono de capa vectorial especial en el administrador de capas. + +- Creará una nueva capa vectorial temática. +::: + +::: g-col-6 +![](img_thematic/d.vect.thematic_selection.webp){fig-align="top"} +::: +::::: + +#### Algoritmos de clasificación utilizados en la herramienta de mapeo temático + +| **Code** | \***Statistical grouping algorithm** | +|-:|:-------------------| +| int | Classes are grouped by equal divisions of the column values, the minimum to the maximum value. | +| std | Classes are divided by standard standard deviations below and above the mean. | +| qua | Classes are grouped into quantiles such that each group represents approximately an equal number of cases (rows of a column). | +| equ | Classes have equal probabilities of occurrence in a normal/Gaussian distribution. | +| dis | Classes are divided by natural breaks in the values of a column. The algorithm systematically searches for discontinuities in the slope of the cumulative frequencies curve of column values, by approximating this curve through straight line segments whose vertices define the class breaks. | + +\**Ver el [v.class](https://grass.osgeo.org/grass-stable/manuals/v.class.html) manual para obtener información más detallada.* + +También puede seleccionar la cantidad de clases que se calcularán y especificar puntos de interrupción personalizados para las clases en lugar de utilizar los algoritmos enumerados anteriormente para interrupciones calculadas estadísticamente. + +Podemos utilizar la herramienta de mapeo temático para generar un nuevo mapa del tamaño de los hogares a partir del mapa *censal* (census), donde las categorías están determinadas por unidades de desviación estándar en lugar de las arbitrarias utilizadas anteriormente. + +::: {.panel-tabset group="language"} + +#### GUI + +:::: grid +::: g-col-6 + +1. Abra la herramienta de mapas temáticos para crear una nueva capa de mapa temático. + +2. En la pestaña "Requerido", introduzca *censal* (census) como fuente de información para crear el mapa temático. + +3. Seleccione **HH_SIZE** para la columna que se clasificará en el mapa temático. + +4. Seleccione **4 colores** para visualizar las unidades de desviación estándar. El ejemplo mostrado utiliza el selector de colores interactivo (botón a la derecha del cuadro de entrada "Colores") para seleccionar.: + + - azul claro (RGB 193:202:255:255) para 2-SD por debajo de la media, + - azul oscuro (RGB 0:0:255:255) para 1 DE por debajo de la media, + - rojo oscuro (RGB 251:2:7:255) para 1-DE por encima de la media, y + - rojo claro (RGB 254:201:193:255) para 2 DE por encima de la media. +::: + +::: g-col-6 +![](img_thematic/d.vect.thematic1.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +5. En la pestaña Clases, seleccione **std** para la desviación estándar del "Algoritmo a utilizar para la clasificación" y **4** para el "Número de clases a definir". +::: + +::: g-col-6 +![](img_thematic/d.vect.thematic2.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +6. En la pestaña Leyenda, marque la casilla "Crear información de leyenda y enviar a la salida estándar". Esto enviará las reglas de leyenda a la terminal (no a la consola gráfica) que usaremos más adelante. + +7. Introduzca **Unidades de desviación estándar** (Standard deviation units) en el cuadro "Título del mapa temático". Esto se convertirá en un subtítulo en la leyenda. + +8. Haga clic en Aceptar. +::: + +::: g-col-6 +![](img_thematic/d.vect.thematic3.webp){fig-align="right"} +::: +::::: + +9. Introduzca los valores para crear la leyenda, tal como lo hizo con el mapa temático de hogares anterior, y también introduzca **13** para el tamaño de fuente del subtítulo. + +10. Si lo desea, mantenga la barra de escala como la definió anteriormente. + +#### Línea de comando + +```{bash} +d.vect.thematic -l map=census column=HH_SIZE algorithm=std nclasses=4 colors="193:202:255:255,0:0:255:255,251:2:7:255,254:201:193:255" boundary_color=0:0:0:255 legend_title="Standard Deviation Units" + +d.legend.vect -b at=76,40 title="Median Household Size" fontsize=12 title_fontsize=16 sub_fontsize=13 + +d.barscale -n at=72,21 length=4 units=kilometers segment=4 width_scale=2 +``` + +#### Python + +```{python} +gs.run_command("d.vect.thematic", + map="census", + column="HH_SIZE", + algorithm="std", + nclasses=4, + colors="193:202:255:255,0:0:255:255,251:2:7:255,254:201:193:255", + boundary_color="0:0:0:255", + legend_title="Standard Deviation Units", + flags="l") + +gs.run_command("d.legend.vect", + at="76,40", + title="Median Household Size", + fontsize=12, + title_fontsize=14, + flags="b") + +gs.run_command("d.barscale", + at="72,21", + length=10, + units="kilometers", + segment=5, + width_scale=2, + flags="n") +``` + +::: + +Y aquí está el mapa de los tramos censales clasificados por unidades de desviación estándar del tamaño del hogar. + +![](img_thematic/census_thematicbySD&legend.webp) + +### Personalizando la leyenda + +Si bien este mapa es útil tal como está, la leyenda podría mejorarse un poco. Los elementos de la leyenda podrían mostrarse con los valores por debajo de la media hacia abajo y por encima de la media hacia arriba. Además, sería útil indicar qué valores estaban 1 y 2 DE por encima y por debajo de la media. + +No es posible hacerlo en la herramienta de mapeo temático. Sin embargo, se puede hacer editando las reglas de leyenda que genera automáticamente la herramienta y que utiliza la herramienta de leyenda vectorial. Esta es la información que aparecía en la terminal de GRASS al ejecutar la herramienta de mapeo temático. Debería verse así: + +``` +||||||Standard Deviation Units +0.00 - 0.39|legend/area|5|ps|193:202:255|0:0:0|1|area|803 +0.39 - 1.62|legend/area|5|ps|0:0:255|0:0:0|1|area|185 +1.62 - 2.84|legend/area|5|ps|251:2:7|0:0:0|1|area|1189 +2.84 - 7.00|legend/area|5|ps|254:201:193|0:0:0|1|area|360 +``` + +Se trata de una secuencia de campos de datos separados por una barra vertical **\|**. Cada línea de la leyenda está representada por una línea de campos de reglas de leyenda. + +#### Clave para las reglas de leyenda + +| **position**| **field** | **Explanation** | +|:-:|-:|:--------------------| +| 1 | label | Text that appears next to each color swatch in the legend. | +| 2 | symbol_name | Symbol used for the color swatch in the legend. | +| 3 | size | Size of the color swatch in the legend. | +| 4 | color_type | Order of the next two fields (positions 5 & 6) for the colors used for the color swatch. If the value of this field is **ps** (primary & secondary colors), the first field is for the fill and the second field is for the line/outline. If this field is **lf** (line & fill colors), the first field is the line/outline color and the second field is the fill color. Legends created by the thematic mapping tool use **ps** order, while legends created in other ways (e.g., as with the layer manager map) use **lf** order. Because this legend is created by the thematic mapping tool, these fields are fill color (position 5), followed by line color (position 6). | +| 5/6 | fill_color | Fill color of the color swatch. | +| 5/6 | feature_color | Line/outline color of the color swatch. | +| 7 | line_width | Width of the line/outline of the color swatch. | +| 8 | geometry_type | Vector object type being mapped. | +| 9 | feature_count | Count of cases (rows) in each category. | + +Puedes editar estas reglas para cambiar la apariencia de tu leyenda. Para demostrarlo, modificaremos la leyenda como se propuso anteriormente. + +::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Haga doble clic en la leyenda vectorial para abrir la herramienta de leyenda. + +2. En la pestaña Entrada/Salida, pegue las reglas de leyenda copiadas desde la terminal. +::: + +::: g-col-6 +![](img_thematic/d.legend.vect_IO.webp){fig-align="right"} +::: +::::: + +3. Edite las reglas para que se vean así: + +``` +||||||Unidades de desviación estándar +1SD to 2SD (2.84-7.00)|legend/area|5|ps|254:201:193|0:0:0|1|área|360 +mean to 1SD (1.62-2.84)|legend/area|5|ps|251:2:7|0:0:0|1|área|1189 +-1SD to mean (0.39-1.62)|legend/area|5|ps|0:0:255|0:0:0|1|área|185 +-2SD to -1SD (0.00-0.39)|legend/area|5|ps|193:202:255|0:0:0|1|área|803 +``` + +4. Opcionalmente, puede guardar las reglas de leyenda en un archivo de texto introduciendo la ruta y el nombre en el cuadro "Archivo CSV de salida". De esta forma, podrá cargarlas para usarlas de nuevo seleccionándolas en el cuadro "Archivo de leyenda de entrada". + +5. Haga clic en Aceptar. + +#### línea de comando + +Guarde la salida de texto en la terminal en un archivo de texto (p. ej., llamado census_legend.txt). Edítelo en el archivo de texto y luego cárguelo para usarlo en la leyenda. + +```{bash} +d.legend.vect -b at=76,40 title="Median Household Size" fontsize=12 title_fontsize=16 sub_fontsize=13 input="[your path]/census_legend.txt" +``` + +#### Python + +Guarde la salida de texto en la terminal en un archivo de texto (p. ej., llamado census_legend.txt). Edítelo en el archivo de texto y luego cárguelo para usarlo en la leyenda. + +```{python} +gs.run_command("d.legend.vect", + at="76,40", + title="Median Household Size", + fontsize=12, + title_fontsize=14, + sub_fontsize=13, + input="[your path]/census_legend.txt", + flags="b") + +``` + +::: + +Aquí está el mapa temático con la leyenda personalizada. + +![](img_thematic/census_thematicbySD&legend2.webp) + +La herramienta de mapeo temático también permite crear mapas coropléticos de puntos vectoriales. Por ejemplo, podemos crear un mapa temático coroplético de la capacidad de las escuelas primarias (mapa de puntos vectoriales *escuelas* (schools) agrupado por unidades de desviación estándar, como el tamaño del hogar para los datos del censo. Solo necesitamos modificar algunos ajustes. +::: {.panel-tabset group="language"} + +#### GUI + +1. En la pestaña Obligatorio, cambie el "Nombre del mapa vectorial" a ***escuelas*** (schools) y cambie el "Nombre de la columna de atributos" a **CORECAPCI**. + +2. En la pestaña Selección, ingrese **GLEVEL='E'** en el cuadro "DÓNDE" para seleccionar escuelas primarias. + +3. En la pestaña Símbolos, cambie el "Símbolo de punto y centroide" a **básico/círculo** (basic/circle) y configure el tamaño en **15** puntos. + +4. En la pestaña Leyenda, cambie el "Símbolo de leyenda para áreas" a **básico/círculo** (basic/circle) para que coincida con el símbolo de visualización. + +5. Haga clic en Aceptar. + +6. Agregue una leyenda y una barra de escala como lo hizo para los demás mapas. Puede editar la leyenda como hicimos para el mapa de hogares censados si lo desea. + +#### línea de comando + +```{bash} +d.vect.thematic -l map=schools column=CORECAPACI algorithm=std nclasses=4 colors="193:202:255:255,0:0:255:255,251:2:7:255,254:201:193:255" where=GLEVEL='E' boundary_color=0:0:0:255 icon=basic/circle size=15 icon_area=basic/circle legend_title="Standard Deviation Units" + +d.legend.vect -b at=73,40 title="Elementary School Capacity" fontsize=12 title_fontsize=16 sub_font=14 + +d.barscale -n at=73,10 length=10 units=kilometers segment=5 width_scale=2 +``` + +#### Python + +```{python} +gs.run_command("d.vect.thematic", + map="schools", + column="CORECAPACI", + algorithm="std", + nclasses=4, + colors="193:202:255:255,0:0:255:255,251:2:7:255,254:201:193:255", + where="GLEVEL='E'", + boundary_color="0:0:0:255", + icon="basic/circle", + size=15, + icon_area="basic/circle", + legend_title="Standard Deviation Units", + flags="l") + +gs.run_command("d.legend.vect", + at="73,40", + title="Elementary School Capacity", + fontsize=12, + title_fontsize=14, + flags="b") + +gs.run_command("d.barscale", + at="73,10", + length=10, + units="kilometers", + segment=5, + width_scale=2, + flags="n") +``` + +::: + +Mapa temático coroplético de las capacidades de la escuela primaria + +![](img_thematic/thematic_schools_capacity.webp) + +## Cuadros temáticos + +### Mapa de gráficos temáticos + +Una forma alternativa de visualizar información geoespacial cuantitativa en GRASS es mediante gráficos temáticos para puntos vectoriales. La herramienta de gráficos temáticos... [d.vect.chart](https://grass.osgeo.org/grass-stable/manuals/d.vect.chart.html), Puede mostrar gráficos circulares o de barras en ubicaciones puntuales. + +- Cada segmento circular o barra representa el valor de una columna para ese punto. + +- El tamaño de un gráfico circular también puede representar el valor de una columna. + +- De esta manera, se pueden visualizar y comparar los valores de múltiples columnas a lo largo del espacio geográfico. + +Podemos utilizar gráficos temáticos para mostrar el equipamiento disponible en las estaciones de bomberos utilizando el mapa vectorial *estaciones de bomberos* (firestations). + +- Las estaciones de bomberos pueden tener varios tipos diferentes de equipos, enumerados en diferentes columnas de la tabla de atributos *estaciones de bomberos* (firestations): autobombas (*PUMPERS*), camiones cisterna (*TANKER*), autobombas-cisterna (*PUMPER_TAN*) y minibombas (*MINI_PUMPE*). + +- Podemos utilizar los valores de estas columnas para representar la proporción de cada tipo de equipo contra incendios en un mapa gráfico temático. + +- La **suma** (sum) de estas columnas se puede utilizar para el tamaño de un gráfico circular, que refleja el inventario total de equipos. + +::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Abra la herramienta de gráficos temáticos desde el ícono de capa vectorial especial en el administrador de capas. +::: + +::: g-col-6 +![](img_thematic/d.vect.chart_selection.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +2. En la pestaña Obligatorio, ingrese *estaciones de bomberos* (firestations) para "Nombre del mapa vectorial" (Vector map name) . +::: + +::: g-col-6 +![](img_thematic/d.vect.chart1.webp){fig-align="right"} +::: +::::: +3. Introduzca los nombres de las columnas **PUMPERS,TANKER,PUMPER_TAN,MINI_PUMPE** (separados por comas, sin espacios) en el cuadro de entrada "Columnas de atributos que contienen datos" (Attribute columns containing data). + +::::: grid +::: g-col-6 +4. En la pestaña Propiedades del gráfico, ingreseEn la pestaña Propiedades del gráfico, ingrese **pie** para el "Tipo de gráfico"(Chart type). + +5. Introduzca la ecuación **BOMBAS + CISTERNA + BOMBA_TANQUERA + MINI_BOMBA** para utilizar el número total de camiones de bomberos para el tamaño de los gráficos circulares. + +6. Ingrese **15** en "Escala de tamaño" (Scale for size) para obtener tamaños de puntos de gráfico visualmente agradables (15 X la suma de todos los camiones de bomberos). + +7. Introduzca **blanco** (white) para el "Color del contorno" (255:255:255:255 ​​como RGB y alfa/transparencia). + +8. Introduzca **4 colores** (4 colors) para representar las 4 columnas que se muestran en el gráfico. + + - Puede utilizar el botón selector de color a la derecha del cuadro de entrada. + + - También puede introducirlos manualmente como valores de color RGB o uno de los colores GRASS (*rojo, naranja, amarillo, verde, azul, índigo, violeta, blanco, negro, gris, marrón, magenta, aguamarina, cian, morado*). Los colores deben separarse por comas y sin espacios. + + - Los 4 colores utilizados en este tutorial son: **255:0:0:255,0:0:255:255,204:102:255:255,254:204:102:255**. + +9. Por último, asegúrese de que la casilla “Crear información de leyenda” esté marcada en la pestaña Opcional. + +10. Haga clic en Aceptar. +::: + +::: g-col-6 +![](img_thematic/d.vect.chart2.webp){fig-align="right"} +::: +::::: + +#### línea de comando + +```{bash} +d.vect.chart -c -l map=firestations columns=PUMPERS,TANKER,PUMPER_TAN,MINI_PUMPE size_column=PUMPERS+TANKER+PUMPER_TAN+MINI_PUMPE size=-1 scale=15 outline_color=255:255:255:255 colors=255:0:0:255,0:0:255:255,204:102:255:255,254:204:102:255 +``` + +#### Python + +```{python} +gs.run_command("d.vect.chart", + map="firestations", + columns="PUMPERS,TANKER,PUMPER_TAN,MINI_PUMPE", + size_column="PUMPERS+TANKER+PUMPER_TAN+MINI_PUMPE", + size=-1, + scale=15, + outline_color="255:255:255:255", + colors="255:0:0:255,0:0:255:255,204:102:255:255,254:204:102:255", + flags="cl") +``` + +::: + +Aquí está el mapa temático de las capacidades de las estaciones de bomberos. Está respaldado por un mapa de calles para mostrar las localidades de las estaciones, como hicimos con las escuelas. Es evidente que las estaciones de bomberos más pequeñas suelen tener el mismo tipo de equipo. Las ligeramente más grandes tienen el mismo tipo de equipo diferente. Y las estaciones más grandes tienen la mayor diversidad de equipo. Pero ¿qué tipo de equipo? Necesitamos una leyenda. + +![](img_thematic/thematic_chart1.webp) + +### Creación de una leyenda para un mapa de gráficos temáticos + +La herramienta de gráficos temáticos puede enviar información de leyenda a la terminal (no a la consola gráfica), al igual que la herramienta de mapas temáticos. Sin embargo, no está en el formato correcto para su uso inmediato en leyendas vectoriales. + +Aquí se muestra la información de la leyenda generada por la herramienta de gráficos temáticos para este mapa: + +``` +1|PUMPERS|255:0:0 +2|TANKER|0:0:255 +3|PUMPER_TAN|204:102:255 +4|MINI_PUMPE|254:204:102 +``` + +Podemos usar los procedimientos descritos anteriormente para crear una leyenda de mapa temático personalizado. Estas son las reglas de leyenda que usamos anteriormente: + +``` +||||||Standard deviation units +1SD to 2SD (2.84-7.00)|legend/area|5|ps|254:201:193|0:0:0|1|area|360 +mean to 1SD (1.62-2.84)|legend/area|5|ps|251:2:7|0:0:0|1|area|1189 +-1SD to mean (0.39-1.62)|legend/area|5|ps|0:0:255|0:0:0|1|area|185 +-2SD to -1SD (0.00-0.39)|legend/area|5|ps|193:202:255|0:0:0|1|area|803 +``` + +Podemos editarlos para: + +- cambiar el texto de la leyenda, + +- cambiar el objeto de la leyenda a un círculo para los colores, + +- cambiar los colores de relleno para que coincidan con los generados por la herramienta de gráficos temáticos, + +- referenciar los objetos representados como puntos en lugar de áreas, y + +- eliminar el número de casos. + +Así se ven las nuevas reglas de la leyenda: + +``` +||||||Tipos de camiones de bomberos +pumpers|basic/circle|5|ps|255:0:0|0:0:0|1|area| +tankers|basic/circle|5|ps|0:0:255|0:0:0|1|area| +pumper-tankers|basic/circle|5|ps|204:102:255|0:0:0|1|area| +mini-pumpers|basic/circle|5|ps|254:204:102|0:0:0|1|area| +||||||(Chart sizes proportional to the total number of fire trucks) +streets|legend/area|5|lf|179:179:179:255|0:103:204|1|line| +``` + +Tenga en cuenta que también hemos agregado una línea para las calles. + +::: {.panel-tabset group="language"} + +#### GUI + +1. Como hicimos anteriormente, puede abrir la herramienta de leyenda vectorial, agregar un título principal (Estaciones de bomberos), configurar el tamaño de fuente (16 para el título, 14 para el subtítulo, 12 para la leyenda) y, opcionalmente, activar el fondo. + +2. Pegue las nuevas reglas de leyenda en el cuadro de texto, debajo de la pestaña Entrada/Salida. + +3. Opcionalmente, puede asignar una ruta para guardar estas reglas en un archivo y reutilizarlas en el futuro. + +4. Haga clic en Aplicar o en Aceptar. + +#### línea de comando + +Guarde las reglas de la leyenda en un archivo de texto (por ejemplo, llamado firestations_legend.txt) y luego cárguelo para usarlo en la leyenda. + +```{bash} +d.legend.vect -b at=68,30 title="Fire Stations" border_width=1 fontsize=12 title_fontsize=16 sub_fontsize=13 input="[your path]/firestations_legend.txt" + +d.barscale -n at=70.0,8.0 length=10 units=kilometers segment=5 width_scale=2 +``` + +#### Python + +Save the legend rules to a text file (e.g., named firestations_legend.txt) and then load it to use in the legend. + +```{python} +gs.run_command("d.legend.vect", + at="68,30", + title="Fire Stations", + fontsize=12, + title_fontsize=16, + sub_fontsize=14, + input="[your path]/firestations_legend.txt", + flags="b") + +gs.run_command("d.barscale", + at="70.0,8.0", + length=10, + units="kilometers", + segment=5, + width_scale=2, + flags="n") + +``` + +::: + +El mapa de gráficos temáticos con una leyenda personalizada: + +![](img_thematic/thematic_chart&legend.webp) + +::: {.callout-note title="Más personalización de leyendas"} +¿Cómo podría agregar más líneas a la leyenda personalizada para indicar la relación entre el tamaño del círculo y el inventario de equipos contra incendios? + +Recuerda que escalamos el tamaño del círculo a 15x[equipo total]. Los totales van de 0 a 7. Por lo tanto, puedes crear nuevas líneas de leyenda para los totales de 2, 4 y 6 equipos. Para calcular el tamaño en puntos de cada uno, simplemente multiplica por 15: 2 motores = 30 puntos, 4 motores = 60 puntos y 6 motores = 90 puntos. + +Luego puedes agregar 3 líneas más a tu leyenda personalizada como esta: + +``` +2 motores|basic/circle|30|ps|255:255:255|0:0:0|1|area| +``` + +También podrías comenzar esta nueva sección con un subtítulo.: + +``` +||||||Total number of fire trucks at each station +``` + +::: + +La herramienta de gráficos temáticos puede representar datos como gráficos de barras en lugar de gráficos circulares. Aquí se muestra el mismo mapa de gráficos temáticos en forma de gráfico de barras. El tamaño del gráfico se configuró en **30**, el color del contorno en **negro** (black) y el nombre del símbolo en el archivo de leyenda se restableció a **leyenda/área** (legend/area) para este mapa. + +![](img_thematic/thematic_chart&legend_bar.webp) + +# Mapas temáticos raster + +Los mapas temáticos ráster utilizan el color para representar la variación de la cobertura terrestre, el uso del suelo o las características del terreno en un mapa. Estas pueden ser características como la pendiente, representada en grados y que varía continuamente, o la cobertura terrestre, representada por áreas del mapa codificadas con distintas categorías. + +## Rásteres con variación continua: pendiente del terreno + +La pendiente del terreno es un ejemplo de una característica representada por valores numéricos (en grados) que varían continuamente a lo largo del paisaje. Se puede crear un mapa de pendiente a partir de un mapa de elevación utilizando [r.slope.aspect](https://grass.osgeo.org/grass-stable/manuals/r.slope.aspect.html) tool. + +Esto generará un mapa con pendiente que varía continuamente a lo largo de todo el mapa. Se pueden asignar colores a las celdas ráster según sus valores de pendiente para visualizar áreas con pendiente alta y baja. La pendiente que representa cada color se puede mostrar en una leyenda para facilitar la interpretación del mapa. + +::: {.callout-note title="Modeling terrain in GRASS"} +Para obtener más información sobre cómo modelar y visualizar pendientes y otras características del terreno en GRASS, consulte [Visualización y modelado de terrenos desde DEM en GRASS].(.../terrain_and_DEMs/GRASS_terrain.qmd) tutorial. Para obtener más información sobre los rásteres en GRASS, consulte [Procesamiento de datos raster en GRASS](https://grass.osgeo.org/grass-stable/manuals/rasterintro.html#raster-map-operations). +::: + +Primero, cree un mapa de pendiente a partir del mapa DEM de *elevación* (elevation). + +::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Abra la herramienta r.slope.aspect desde el menú Ráster/Análisis del terreno/Pendiente y orientación. + +2. Configure la capa ráster de elevación como "Nombre del mapa ráster de elevación de entrada" (Name of input elevation raster map). +::: + +::: g-col-6 +![](img_thematic/r.slope1.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +3. Introduzca el nombre *pendiente* (slope) en "Nombre para el mapa ráster de pendiente de salida" (Name for output slope raster map). + +4. Haga clic en Ejecutar. +::: + +::: g-col-6 +![](img_thematic/r.slope2.webp){fig-align="right"} +::: +::::: + +#### línea de comando + +```{bash} +r.slope.aspect elevation=elevation slope=slope +``` + +#### Python + +```{python} +gs.run_command("r.slope.aspect", + elevation="elevation", + slope="slope") +``` + +::::::::: + +Aquí está el mapa de pendiente resultante. + +![mapa ráster de pendiente](img_thematic/slope.webp) + +### Seleccionar una tabla de colores + +Los colores predeterminados del mapa de pendientes que creamos varían del amarillo pálido al violeta a medida que la pendiente cambia de plana a pronunciada. Podemos asignar diferentes *tablas de colores* (color charts) para representar la variación de la pendiente con diferentes colores. + +- Por ejemplo, podríamos cambiar la **intensidad** (intensity) de un color para representar la pendiente: color pálido para pendientes bajas y color intenso para pendientes pronunciadas. + +- Se pueden asignar tablas de colores y definir tablas de colores personalizadas mediante el módulo [r.colors](https://grass.osgeo.org/grass-stable/manuals/r.colors.html). + +- Apliquemos la tabla de colores *rojos* (red) al mapa de pendiente para que la pendiente esté representada por la intensidad del color rojo. + +::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Seleccione la herramienta [r.colors](https://grass.osgeo.org/grass-stable/manuals/r.colors.html) del menú Ráster/Administrar colores. + +2. En la pestaña "Mapa", seleccione el mapa de *pendiente* (slope) en el cuadro de entrada "Nombre del mapa(s) ráster". +::: + +::: g-col-6 +![](img_thematic/r.colors1.webp){fig-align="right"} +::: +::::: + +3. En la pestaña Definir, seleccione *rojos* (red) como tabla de colores. + +::::: grid +::: g-col-6 +![](img_thematic/r.colors2.webp){fig-align="right"} +::: + +::: g-col-6 +![](img_thematic/r.colors2menu.webp){fig-align="left" width="60%"} +::: +::::: + +4. Haga clic en Ejecutar. + +#### línea de comando + +```{bash} +r.colors map=slope color=reds +``` + +#### Python + +```{python} +gs.run_command("r.colors", + map="slope", + color="reds") +``` + +::::::::: + +![pendiente representada por la intensidad del color rojo](img_thematic/slope_reds.webp) + +Prueba otras tablas de colores. El color predeterminado original es la tabla de colores *pendiente* (slope). Prueba la tabla de colores *gyr* (de verde a amarillo a rojo) con la *ecualización de histograma* (histogram equalization) activada. También puedes crear una tabla de colores personalizada, como se describe más adelante en este tutorial. + +### Creando una leyenda + +Una **leyenda** (legend) puede ayudarle a determinar el rango de valores presentes en su mapa y cómo se corresponden los colores con estos valores. La herramienta ráster [d.legend](https://grass.osgeo.org/grass-stable/manuals/d.legend.html) le permite crear fácilmente una leyenda muy informativa para este mapa. + +:::::::::::::::::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 +Se puede acceder a la herramienta ráster *d.legend* desde la barra de herramientas de la ventana de visualización. Esta herramienta ofrece numerosas opciones. Exploraremos varias de ellas. +::: + +::: g-col-6 +![](img_thematic/legend_tool.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 + +1. En la pestaña Entrada, ingrese *pendiente* (slope) como "Nombre del mapa ráster". +::: + +::: g-col-6 +![](img_thematic/d.legend1.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +2. En la pestaña Título, ingrese "Pendiente" como "Título de la leyenda" e ingrese 14 como "Tamaño de fuente del título". +::: + +::: g-col-6 +![](img_thematic/d.legend2.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +3. En la pestaña Avanzada, ingrese el símbolo de grado (°) o la palabra "deg" como "Unidades para mostrar". +::: + +::: g-col-6 +![](img_thematic/d.legend3.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +4. En la pestaña Degradado, marque la casilla "Añadir histograma a la leyenda suavizada". Introduzca también *0,10,20,30* en "Valores específicos para dibujar marcas" para mostrar estos valores uniformemente espaciados como marcas de la leyenda. +::: + +::: g-col-6 +![](img_thematic/d.legend4.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +6. En la pestaña Configuración de fuente, ingrese 12 como "Tamaño de fuente" para la leyenda. +::: + +::: g-col-6 +![](img_thematic/d.legend5.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +6. Por último, en la pestaña Fondo, marca la casilla para mostrar el fondo. + +7. Haga clic en Aceptar para ver la leyenda. Puede reposicionarla y redimensionarla con el ratón o numéricamente en la pestaña Opciones. +::: + +::: g-col-6 +![](img_thematic/d.legend6.webp){fig-align="right"} +::: +::::: + +#### línea de comando + +- Se puede generar una leyenda utilizando el comando [d.legend](https://grass.osgeo.org/grass-stable/manuals/d.legend.html). + +- Se puede generar una barra de escala y una flecha norte usando el comando [d.barscale](https://grass.osgeo.org/grass-stable/manuals/d.barscale.html). + +```{bash} +d.legend -d -b raster=slope title=Slope title_fontsize=14 units=° label_values=0,10,20,30 fontsize=12 border_color=0:0:0:255 + +d.barscale -n length=2 units=kilometers segment=5 bgcolor=none width_scale=2 +``` + +#### Python + +- Se puede generar una leyenda utilizando el comando [d.legend](https://grass.osgeo.org/grass-stable/manuals/d.legend.html). + +- Se puede generar una barra de escala y una flecha norte usando el comando [d.barscale](https://grass.osgeo.org/grass-stable/manuals/d.barscale.html). + +```{python} +gs.run_command("d.legend", + map="slope", + title="Slope", + title_fontsize=14, + units="°", + label_values="0,10,20,30", + fontsize=12, + border_color="0:0:0:255", + flags="db") + +gs.run_command("d.barscale", + length=2, + units="kilometers", + segment=5, + bgcolor="none", + width_scale=2, + flags="n") +``` + +:::::::::::::::::::::::: + +Aquí está el resultado. + +- No solo muestra el rango de valores de pendiente y los colores de los diferentes valores, sino que el histograma también muestra el número de celdas para cada valor de pendiente. + +- También puede agregar una barra de escala y una flecha norte desde el mismo elemento de la barra de menú en la ventana de visualización donde seleccionó la herramienta de leyenda. + +![Mapa de pendientes con leyenda, barra de escala y flecha norte](img_thematic/slope&legend.webp) + +## Categorización de la variación continua + +A veces resulta útil dividir la variación continua en un conjunto de categorías distintas para su análisis o comunicación. Por ejemplo, el mapa de pendientes que creamos anteriormente podría mostrarse como áreas de pendiente baja y pendiente alta, en lugar de un continuo de valores de pendiente. Para los mapas ráster, esto se realiza en GRASS mediante la *reclasificación* (reclassification) de los valores de las celdas. Si bien existen varias maneras de hacerlo, la más sencilla es con la herramienta [r.reclass](https://grass.osgeo.org/grass-stable/manuals/r.reclass.html), disponible en el menú Ráster/Cambiar categoría. A continuación, utilizaremos *r.reclass* para crear un mapa de categorías de pendientes distintas a partir del mapa de pendientes que producimos anteriormente. + +### Estadísticas para categorías + +¿Cómo debemos agrupar la pendiente en categorías? Una forma es usar el análisis estadístico para dividir la pendiente estadísticamente en cuartiles, cada uno de los cuales representa el mismo número de celdas ráster. GRASS cuenta con numerosas herramientas para [análisis estadísticos](https://grass.osgeo.org/grass-stable/manuals/topic_statistics.html) de mapas raster y vectoriales. + +- Esta [r.univar](https://grass.osgeo.org/grass-stable/manuals/r.univar.html) herramienta se puede utilizar para encontrar los valores de corte para los cuartiles 1, 2, 3, y 4. + +- Podríamos definir el primer cuartil (25% de celdas raster con las pendientes más bajas) como 'pendiente baja', el cuarto cuartil (25% de celdas con las pendientes más altas) como 'pendiente alta', y las celdas restantes como 'pendiente intermedia' (segundo y tercer cuartiles, que representan el 50% de celdas con pendientes intermedias). + +::: {.panel-tabset group="language"} + +#### GUI + +1. Abra *r.univar* ("Estadísticas ráster univariadas") desde el menú Ráster/Informes y estadísticas. + +2. Ingrese *pendiente* (slope) como "Nombre del(de los) mapa(s) ráster" (Name of the raster map(s)) en la pestaña Obligatorio. + +3. En la pestaña Extendida, ingrese **25,50,75** para "Percentil a calcular" (Percentile to calculate). + +4. Haga clic en ejecutar. + +#### Línea de comando + +```{bash} +r.univar map=slope percentile=25,50,75 +``` + +#### Python + +```{python} +gs.run_command("r.univar", + map="slope", + percentile="25,50,75") +``` + +::: + +::::: grid +::: g-col-5 +Aquí está el resultado: + +``` +n: 2019304 +Mínimo: 0 +Máximo: 38,6894 +Rango: 38,6894 +Media: 3,86452 +Media de valores absolutos: 3,86452 +Desviación estándar: 3,00791 +Varianza: 9,04755 +Coeficiente de variación: 77,834 +Suma porcentual: 7803645,55388512 +1.er cuartil: 1,85464 +Mediana (número par de celdas): 3,21512 +3.er cuartil: 5,02421 +``` + +::: + +::: g-col-7 +Para dividir la pendiente en cuartiles, necesitamos crear los siguientes grupos de pendientes: + +| slope | quartile | slope category | +|:---------:|:------------:|:------------:| +| 0-1.85464 | 1st quartile | low slope | +| 1.85465-5.02421 | 2nd & 3rd quartiles | intermediate slope | +| 5.02422-38.6894 | 4th quartile | high slope | +::: +::::: + +### Reclasificación + +Ahora podemos utilizar los resultados del análisis estadístico anterior para reclasificar la pendiente en tres categorías. Dos de estas categorías representan cada una el 25% de las celdas con las pendientes más altas y más bajas; la tercera categoría intermedia representa el 50% del total de celdas. + +:::::: {.panel-tabset group="language"} + +## GUI + +La herramienta [r.reclass](https://grass.osgeo.org/grass-stable/manuals/r.reclass.html) se encuentra en el menú de categoría Ráster/Cambiar. + +::::: grid +::: g-col-6 + +1.Introduzca *pendiente* (slope) para el ráster que se va a reclasificar. + +2. Introduzca *slope_quartiles* para el mapa reclasificado de salida. + +3. Introduzca las reglas de reclasificación directamente en el cuadro de texto o desde un archivo de texto guardado. Utilice el símbolo y \* para representar todo lo que no esté cubierto por las reglas de reclasificación específicas. + +4. Haga clic en "Ejecutar". + +``` +0 thru 1.85464 = 1 pendiente baja (low slope) +1.85465 thru 5.02421 = 2 pendiente intermedia (intermediate slope ) +5.02422 thru 38.6894 = 3 pendiente alta (high slope) +``` + +::: + +::: g-col-6 +![](img_thematic/r.reclass.webp){fig-align="right"} +::: +::::: + +## línea de comando + +```{bash} +r.reclass input=slope output=slope_quartiles rules=- << EOF +0 thru 1.85464 = 1 low slope +1.85465 thru 5.02421 = 2 intermediate slope +5.02422 thru 38.6894 = 3 high slope +EOF +``` + +## Python + +```{python} +rules = """\ +0 thru 1.85464 = 1 low slope +1.85465 thru 5.02421 = 2 intermediate slope +5.02422 thru 38.6894 = 3 high slope +""" +gs.write_command("r.reclass", + input="slope", + output="slope_quartiles", + rules="-", + stdin=rules) +``` + +:::::: + +Esto crea un nuevo mapa llamado *slope_quartiles* con la pendiente dividida en tres categorías. + +![](img_thematic/slope_quartiles&legend.webp) + +### Asignación de una tabla de colores personalizada + +Este mapa es útil para mostrar áreas con diferentes categorías de pendiente. Sin embargo, podría ser más fácil de interpretar con un conjunto de colores diferente. Podríamos seleccionar una tabla de colores predefinida diferente con la herramienta *r.colors* mostrada anteriormente. También podemos definir una tabla de colores personalizada con la misma herramienta. + +Crear una tabla de colores personalizada es tan sencillo como especificar un número de categoría seguido de un color. + +- El color puede ser uno de los colores con nombre que reconoce GRASS (*rojo, naranja, amarillo, verde, azul, índigo, violeta, blanco, negro, gris, marrón, magenta, aguamarina, gris, cian, morado*) o + +- El color puede especificarse como valores RGB (0-255 para rojo:verde:azul) o como un número hexadecimal. + +- Por ejemplo, para crear una tabla de colores con aguamarina, amarillo y rojo para las categorías 1-3 en el mapa *slope_quartiles*, simplemente debe listarlos como: + +``` +1 aguamarina +2 amarillos +3 rojos +``` + +- Para especificar los mismos colores que RGB, escribirías las reglas de la siguiente manera: + +``` +1 100:128:255 +2 255:255:0 +3 255:0:0 +``` + +- Como valores de color hexadecimales, escribirías las reglas así: + +``` +1 #6480ff +2 #ffff00 +3 #ff0000 +``` + +Puede guardar esto en un archivo de reglas de texto simple y cargarlo en *r.colors* o puede especificarlo directamente dentro de la herramienta *r.colors*. + +:::::::::::: {.panel-tabset group="language"} + +#### GUI + +::::: grid +::: g-col-6 + +1. Especifique *slope_quartiles* como el mapa al que desea asignar la tabla de colores +::: + +::: g-col-6 +![](img_thematic/r.colors3.webp){fig-align="right"} +::: +::::: + +::::: grid +::: g-col-6 +2. Introduzca las reglas de color en la casilla "Introducir valores directamente". + +3. Pulse Ejecutar. +::: + +::: g-col-6 +![](img_thematic/r.colors4.webp) +::: +::::: + +::::: grid +::: g-col-6 +También puede especificar reglas de color de forma interactiva seleccionando Ráster/Administrar colores/Administrar reglas de color de forma interactiva. +::: + +::: g-col-6 +![](img_thematic/r.colors.interactive.webp){fig-align="right"} +::: +::::: + +#### línea de comando + +```{bash} +r.colors -e map=slope_quartiles rules=- << EOF +1 aqua +2 yellow +3 red +EOF +``` + +#### Python + +```{python} +rules = """\ +1 aqua +2 yellow +3 red +""" +gs.write_command("r.colors", + map="slope_quartiles", + rules="-", + stdin=rules) +``` + +:::::::::::: + +Aquí se muestra el mapa de categorías de cuartiles de pendiente resultante con una tabla de colores personalizada. + +![](img_thematic/slope_quartiles&legend_customcolors.webp) + + +## Rásteres con categorías diferenciadas: cobertura terrestre + +Además de valores continuos, las celdas ráster pueden representar categorías diferenciadas, codificadas con un valor entero y una etiqueta de texto. Cuando a estas categorías se les asignan diferentes colores, este tipo de mapa temático también se denomina mapa *coroplético* (choropleth). + +- El mapa *landuse96_28m* es un ejemplo de este tipo de mapa ráster. Cargue el mapa *landuse96_28m* en el administrador de capas. + +- Dado que los colores varían según la categoría, ya se puede considerar un mapa ráster temático. Solo falta una leyenda interpretativa. + +- Puede crear una leyenda para el mapa *landuse96_28m* de la misma manera que creamos una leyenda para el mapa de pendientes, con algunas pequeñas diferencias. + +::: {.panel-tabset group="language"} + +#### GUI + +1. En la herramienta *d.legend*, seleccione *landuse96_28m* para crear la leyenda del mapa. + +2. Escriba "Uso del suelo" en el título y configure el tamaño de fuente del título en 14. + +3. En la pestaña "Avanzado", marque la casilla "No mostrar el número de categorías" (aunque podría querer mostrar los números de otro mapa). + +4. Configure el tamaño de fuente en 12. + +5. Marque la casilla "Mostrar fondo". + +6. Haga clic en "Aceptar". + +#### línea de comando + +```{bash} +d.legend -c -b raster=landuse title="Land Use" title_fontsize=14 fontsize=12 border_color=0:0:0:255 +``` + +#### Python + +```{python} +gs.run_command("d.legend", + raster="landuse", + title="Land Use", + title_fontsize=14, + fontsize=12, + border_color="0:0:0:255", + flags="cb") +``` + +::: + +Aquí está el mapa temático de uso del suelo. + +![Mapa de uso del suelo con leyenda, barra de escala y flecha norte](img_thematic/landuse96&legend.webp) + +::: {.callout-note title="Tip"} +Si tiene un mapa de categorías con muchas categorías, es posible que no sean legibles o que ni siquiera se muestren como categorías distintas. Si tiene un mapa con demasiadas categorías para crear una leyenda legible, puede combinar algunas categorías o centrarse en un área geográfica más pequeña para crear un mapa temático útil. +::: + +### Agregación de categorías con reclasificación + +Este mapa temático podría ser más informativo si las diversas categorías de uso y cobertura del suelo se pudieran condensar en menos. Al igual que con el mapa de pendientes, esto se puede lograr mediante la reclasificación para asignar nuevos valores y etiquetas a las categorías de uso del suelo existentes. + +Podemos crear un nuevo mapa de reclasificación con categorías agregadas, denominado *cobertura del suelo*. Utilizando [*r.reclass*](https://grass.osgeo.org/grass-stable/manuals/r.reclass.html) Como se describió anteriormente, podemos reducir las 21 categorías originales a 7 combinando toda la tierra desarrollada en una sola categoría, toda la vegetación herbácea, toda la vegetación arbustiva y toda la cobertura arbórea. + +:::::: {.panel-tabset group="language"} + +## GUI + +1. Introduzca *landuse96_28m* para el ráster que se reclasificará. + +2. Introduzca *landcover* para el mapa reclasificado resultante. + +3. Introduzca las reglas de reclasificación directamente en el cuadro de texto o desde un archivo de texto guardado. + +``` +1 2 = 1 desarrollado +3 = 2 agricultura +4 6 = 3 herbáceo +7 a 9 = 4 matorrales +10 a 18 = 5 bosque +20 = 6 agua +21 = 7 sedimentos +``` + +## Command line + +```{bash} +r.reclass input=landuse output=landcover rules=- << EOF +1 2 = 1 developed +3 = 2 agriculture +4 6 = 3 herbaceous +7 thru 9 = 4 shrubland +10 thru 18 = 5 forest +20 = 6 water +21 = 7 sediment +EOF +``` + +## Python + +```{python} +rules = """\ +1 2 = 1 developed +3 = 2 agriculture +4 6 = 3 herbaceous +7 thru 9 = 4 shrubland +10 thru 18 = 5 forest +20 = 6 water +21 = 7 sediment +""" +gs.write_command("r.reclass", + input="landuse", + output="landcover", + rules="-", + stdin=rules) +``` + +:::::: + +Aquí está el resultado con una leyenda. + +![El mapa de *cobertura terrestre* reclasificado](img_thematic/landcover.webp) + +### Colores personalizados para el mapa temático reclasificado + +Finalmente, podríamos cambiar los colores de la tabla de colores predeterminada *viridis* a una que muestre mejor las categorías de cobertura terrestre. Esto se puede hacer usando el [r.colors](https://grass.osgeo.org/grass-stable/manuals/r.colors.html) descrito anteriormente para el mapa de pendientes reclasificadas. + +A continuación, se muestran algunas posibles asignaciones de colores: el terreno urbanizado (1) es naranja, el terreno agrícola (2) es amarillo, la vegetación restante (3-5) se colorea en tonos de verde, el agua (6) es azul y el sedimento (7) es marrón. Asigne estos colores usando *r.colors* como se hizo anteriormente para la pendiente reclasificada. + +:::::::::::: {.panel-tabset group="language"} + +#### GUI + +1. Especifique *cobertura terrestre* como el mapa al que desea asignar la tabla de colores. + +2. Introduzca las reglas de color en el cuadro "Introducir valores directamente". + +``` +1 255:127:0 +2 255:255:0 +3 200:255:0 +4 0:255:0 +5 20:130:70 +6 0:191:191 +7 191:127:63 +``` + +3. Ejecución de prensa + +#### línea de comando + +```{bash} +r.colors map=landcover rules=- << EOF +1 255:127:0 +2 255:255:0 +3 200:255:0 +4 0:255:0 +5 20:130:70 +6 0:191:191 +7 191:127:63 +EOF +``` + +#### Python + +```{python} +rules = """\ +1 255:127:0 +2 255:255:0 +3 200:255:0 +4 0:255:0 +5 20:130:70 +6 0:191:191 +7 191:127:63 +""" +gs.write_command("r.colors", + map="landcover", + rules="-", + stdin=rules) +``` + +:::::::::::: + +Aquí está el mapa de cobertura terrestre resultante reclasificado y recoloreado. + +![Mapa de cobertura terrestre](img_thematic/landcover_reclassed_recolored.webp) + +# Resumen + +Además de los enfoques presentados aquí, existen otras maneras de crear mapas temáticos en GRASS. Para mapas vectoriales, se pueden crear puntos y líneas graduados, con tamaño de punto y ancho de línea proporcional a una variable numérica, en la herramienta de propiedades vectoriales (d.vect). Se pueden asignar tablas de colores a una columna vectorial numérica de la misma manera que se asignan tablas de colores a mapas ráster. En ambos casos, será necesario crear leyendas personalizadas para estos mapas temáticos vectoriales siguiendo los procedimientos descritos anteriormente. Lo importante es que GRASS permite crear mapas temáticos sofisticados y de alta calidad a partir de datos geoespaciales ráster y vectoriales. + + +--- + +:::{.smaller} +*© Michael Barton y Eunice Villaseñor Iribe* +*El desarrollo de este tutorial fue financiado en parte por la Fundación Nacional de Ciencias de EE. UU. (NSF) (https://www.nsf.gov/), premio [2303651] (https://www.nsf.gov/awardsearch/showAward?AWD_ID=2303651)* +:::