geographic ressources analysis support system...

225
Geographic Ressources Analysis Support System (GRASS) Curso de iniciación Fundación Instituto Euromediterráneo del Agua Francisco Alonso Sarría Francisco Gomariz Castillo Jesús Moreno Brotóns Fulgencio Cánovas García

Upload: others

Post on 30-Jan-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Geographic Ressources Analysis Support System (GRASS)Curso de iniciación

FundaciónInstituto Euromediterráneodel Agua

Francisco Alonso SarríaFrancisco Gomariz CastilloJesús Moreno BrotónsFulgencio Cánovas García

Page 2: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D
Page 3: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D
Page 4: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D
Page 5: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Índice

1 Introducción a GRASS 1

1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Filosofía de trabajo en GRASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3 Instalación del programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.3.1 Como compilar GRASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.4 Entrada y salida rápida al programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.5 Los módulos. Herramientas del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.5.1 La SHELL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.5.2 Modo en linea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.5.3 Modo interactivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.6 Interfaces gráficas de usuario para GRASS . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.7 Manuales y ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.8 La base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

1.8.1 El sentido de las LOCATION y los MAPSET . . . . . . . . . . . . . . . . . . . 17

1.8.2 Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.8.3 Listados de capas de información espacial . . . . . . . . . . . . . . . . . . . . . 23

1.9 Visualización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

1.10 Región de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1.11 Un ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2 Visualización y consultas 29

2.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.2 Visualización de Mapas raster y leyendas: d.rast y d.legend) . . . . . . . . . . . . . . . 29

2.3 Cambiando el punto de vista. Zoom, pan, cambio de región y máscaras . . . . . . . . . . 32

2.3.1 Hacer zoom en la región de trabajo: d.zoom . . . . . . . . . . . . . . . . . . . . 33

2.3.2 Máscaras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Page 6: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

ÍNDICE

2.3.3 Manipulación de paletas de color: r.colors . . . . . . . . . . . . . . . . . . . . . 36

2.4 Consultas a capas raster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.4.1 Módulos para obtener información global . . . . . . . . . . . . . . . . . . . . . 40

2.4.2 Módulos para la obtención de estadísticas descriptivas . . . . . . . . . . . . . . 40

2.4.3 Obteniendo información puntual sobre el contenido de los mapas . . . . . . . . 44

2.5 Medición de objetos sobre el monitor gráfico: d.measure . . . . . . . . . . . . . . . . . 45

2.6 Visualizar información vectorial: d.vect . . . . . . . . . . . . . . . . . . . . . . . . . . 46

2.6.1 Parametros básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

2.6.2 Parámetros para la selección de que entidades van a visualizarse . . . . . . . . . 47

2.6.3 Parámetros para la visualización de lineas . . . . . . . . . . . . . . . . . . . . . 48

2.6.4 Parámetros para la visualización de polígonos . . . . . . . . . . . . . . . . . . . 48

2.6.5 Parámetros para la visualización de puntos o centroides . . . . . . . . . . . . . . 48

2.6.6 Parámetros para la visualización de etiquetas . . . . . . . . . . . . . . . . . . . 48

2.7 d.vect.thematic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

2.8 d.vect.chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

2.8.1 Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

2.9 Consulta de mapas vectoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

2.9.1 v.info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

2.9.2 v.report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2.9.3 v.univar.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2.9.4 db.select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2.9.5 d.what.vect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

2.9.6 v.what y v.what.vect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

2.9.7 v.category . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

2.10 Gestión avanzada de monitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.10.1 d.save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.10.2 d.mvmon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.10.3 Crear un fichero gráfico a partir del contenido de un monitor . . . . . . . . . . . 58

3 Gestión de la base de datos 61

3.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.2 Variables de entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.3 Conexión a base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.3.1 Enlace de tablas a ficheros vectoriales . . . . . . . . . . . . . . . . . . . . . . . 65

3.3.2 Drivers disponibles: db.drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Page 7: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

ÍNDICE

3.4 Gestión de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

3.5 Transformaciones entre formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3.5.1 Módulos para transformar datos raster en vectorial . . . . . . . . . . . . . . . . 68

3.5.2 Módulos para transformar datos vectoriales en raster . . . . . . . . . . . . . . . 69

3.6 Gestión de locations y mapsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

3.7 Crear una location desde cero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3.8 Importación y exportación raster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3.8.1 Importación con r.in.gdal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3.8.2 Importación de otros formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

3.8.3 Exportación con r.out.gdal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

3.8.4 Exportación a otros formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

3.9 Importación y exportación vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

3.9.1 Importación con v.in.ogr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

3.9.2 Importación de otros formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

3.9.3 Ficheros vectoriales de versiones anteriores de GRASS (v.convert y v.in.sites) . . 80

3.9.4 Mapas de puntos a partir de tablas (v.in.db) . . . . . . . . . . . . . . . . . . . . 80

3.9.5 Exportación con v.out.ogr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

3.9.6 Exportación de otros formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

3.9.7 Lectura directa de ficheros en otros formatos (v.external) . . . . . . . . . . . . . 82

3.10 Los módulos r.in.wms y v.in.wfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3.10.1 r.in.wms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3.10.2 v.in.wfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

4 Conexión a bases de datos 87

4.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

4.2 Enlaces de capas vectoriales a tablas de atributos:db.connect y v.db.connect . . . . . . . 87

4.3 Gestión de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

4.4 GRASS y SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.4.1 db.select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

4.4.2 db.execute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4.4.3 Ejemplo de sesión de trabajo con PostgreSQL . . . . . . . . . . . . . . . . . . . 94

4.5 Mantenimiento de tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

4.6 Incorporación de información geométrica a una tabla: v.to.db . . . . . . . . . . . . . . . 95

4.7 Integración raster-vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

4.7.1 v.what.rast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Page 8: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

ÍNDICE

4.7.2 v.rast.stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

4.7.3 v.sample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

5 Edición gráfica y alfanumérica 97

5.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

5.2 Digitalización: v.digit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

5.2.1 Barra de herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

5.2.2 Edición geométrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

5.2.3 Categorías y atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

5.2.4 Reconstrucción de topología sobre la marcha . . . . . . . . . . . . . . . . . . . 101

5.3 Identificadores de los objetos: v.category . . . . . . . . . . . . . . . . . . . . . . . . . . 103

5.4 Reconstrucción de topología: v.build . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

5.5 Corrección automática de topología: v.clean y v.centroids . . . . . . . . . . . . . . . . . 106

5.5.1 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

5.6 Crear y descomponer polilíneas: v.build.polylines, v.split . . . . . . . . . . . . . . . . . 110

5.7 Digitalizar un raster (r.digit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

6 Herramientas de geoprocesamiento vectorial 111

6.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

6.2 Selección temática: v.extract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

6.3 Selección espacial: v.select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

6.4 Reclasificación: v.reclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

6.5 Fusión de polígonos: v.dissolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

6.6 Superposición de capas vectoriales: v.overlay . . . . . . . . . . . . . . . . . . . . . . . 117

6.6.1 Intersección (and) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

6.6.2 Unión (or) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

6.6.3 Diferencia simétrica (Or exclusivo, xor) . . . . . . . . . . . . . . . . . . . . . . 119

6.6.4 Diferencia (Not) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

6.7 Area de influencia: v.buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

6.8 Distancias: v.distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

6.9 Obtención de geometrías a partir de capas de puntos . . . . . . . . . . . . . . . . . . . . 124

Page 9: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

ÍNDICE

7 Algebra de mapas 127

7.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.2 Mapcalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.2.1 Ejecución de programas con r.mapcalc . . . . . . . . . . . . . . . . . . . . . . . 128

7.2.2 Operadores y funciones aritméticas en r.mapcalc . . . . . . . . . . . . . . . . . 129

7.2.3 Operadores y funciones lógicas con r.mapcalc . . . . . . . . . . . . . . . . . . . 130

7.2.4 Valores nulos y creación de máscaras con r.mapcalc . . . . . . . . . . . . . . . . 132

7.2.5 Operadores lógicos con varias condiciones . . . . . . . . . . . . . . . . . . . . 133

7.2.6 Variantes de la operación if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

7.2.7 Funciones relacionadas con la posición y geometría de las celdillas . . . . . . . 134

7.2.8 Cálculos intermedios: La función eval . . . . . . . . . . . . . . . . . . . . . . . 135

7.2.9 Interpolación a partir de un gráfico: La función graph . . . . . . . . . . . . . . . 136

7.2.10 Operadores focales con r.mapcalc . . . . . . . . . . . . . . . . . . . . . . . . . 136

7.2.11 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

7.3 Módulos para operadores locales de álgebra de mapas . . . . . . . . . . . . . . . . . . . 138

7.3.1 Reclasificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

7.4 Módulos para operadores de vecindad . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

7.4.1 r.neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

7.4.2 r.mfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

7.4.3 Análisis de terreno: r.slope.aspect . . . . . . . . . . . . . . . . . . . . . . . . . 143

7.5 Operadores de vecindad extendida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

7.5.1 r.clump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

7.5.2 r.drain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

7.6 Operadores de área . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

7.6.1 r.statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

7.6.2 r.areas.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

7.7 Operadores de bloque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

7.8 Operadores globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

7.8.1 r.cost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

7.8.2 r.buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

7.8.3 r.distancias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

8 Generación de mosaicos 151

8.1 Mosaico raster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

8.2 Mosaico vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Page 10: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

ÍNDICE

9 Teledetección 153

9.1 Almacenamiento de imágenes de satélite en GRASS . . . . . . . . . . . . . . . . . . . 153

9.2 Visualización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

9.2.1 Máscaras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

9.2.2 Modificación de las paletas de color . . . . . . . . . . . . . . . . . . . . . . . . 156

9.2.3 Composiciones de color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

9.2.4 Fusión de imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

9.3 Georreferenciación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

9.3.1 Definición de la location de destino: i.group e i.target . . . . . . . . . . . . . . . 159

9.3.2 Búsqueda de puntos de control: i.points . . . . . . . . . . . . . . . . . . . . . . 159

9.3.3 Georreferenciación de la imagen: i.rectify . . . . . . . . . . . . . . . . . . . . . 160

9.4 Filtrados con GRASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

9.4.1 r.neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

9.4.2 r.mfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

9.4.3 r.mapcalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

9.5 Índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

9.6 Análisis de Componentes Principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

9.7 Clasificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

9.7.1 Clasificación no supervisada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

9.7.2 Clasificación supervisada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

9.7.3 Adjudicación de píxeles a clases. Técnicas estadísticas: Clasificación por máx-ima verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

9.7.4 Validación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

10 Interpolación 173

10.1 Interpolación por clasificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

10.2 Interpolación por regresión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

10.2.1 Cálculo de los parámetros de la regresión . . . . . . . . . . . . . . . . . . . . . 175

10.3 Interpolación mediante polígonos de Thiessen . . . . . . . . . . . . . . . . . . . . . . . 175

10.4 Interpolación con inverso de la distancia . . . . . . . . . . . . . . . . . . . . . . . . . . 176

10.5 Krigeado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

10.5.1 Cálculo del semivariograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

10.5.2 krigeado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

10.6 splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

10.7 Interpolación a partir de curvas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . 180

Page 11: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

ÍNDICE

11 Sistemas de Coordenadas 183

11.1 Definición y consulta del sistema de referencia espacial . . . . . . . . . . . . . . . . . . 183

11.2 Conversión entre sistemas de referencia espacial . . . . . . . . . . . . . . . . . . . . . . 185

11.2.1 Material para la práctica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

11.2.2 Series de coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

11.2.3 Cambio de sistema de referencia en capas vectoriales . . . . . . . . . . . . . . . 187

11.2.4 Cambio de sistema de referencia en capas raster . . . . . . . . . . . . . . . . . . 189

11.3 Configuración de PROJ4 y GRASS para utilizar la rejilla del IGN . . . . . . . . . . . . 191

11.3.1 Configuración de PROJ4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

11.3.2 Configurar GRASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

12 Producción de cartografía en papel 193

12.0.3 El driver PNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

12.0.4 GMT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

12.0.5 Crear un mapa en formato PNG . . . . . . . . . . . . . . . . . . . . . . . . . . 195

12.0.6 Crear un mapa en formato postscript . . . . . . . . . . . . . . . . . . . . . . . . 195

12.0.7 Un mapa algo más sofisticado . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

13 Programación 199

13.1 Módulos programados con C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

13.1.1 Librerías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

13.1.2 Inicialización y Compilación. El primer programa de GRASS . . . . . . . . . . 202

13.1.3 Como recopilar información acerca de la location y la región de trabajo . . . . . 202

13.1.4 Estructuras de Información Geográfica . . . . . . . . . . . . . . . . . . . . . . 204

13.1.5 Gestión de la linea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . 205

13.1.6 Manejo de ficheros raster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

13.2 BASH Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

13.2.1 Listas de tareas con GRASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

13.2.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

13.2.3 Variables del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

13.2.4 Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

13.2.5 Scripts de GRASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

Page 12: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

12 ÍNDICE

Page 13: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 1

Introducción a GRASS

GRASS es un Sistema de Información Geográfica (SIG) de código abierto, estructurado modularmente,que proporciona un gran número de módulos para la gestión y análisis de información ráster y vectorial,procesamiento de imágenes multiespectrales, generación de imágenes en pantalla y mapas en papel,geocodificación e integración con bases de datos temáticas para la gestión de tablas de atributos enlazadasa capas vectoriales.

Cada función SIG es administrada por su propio módulo, de esta forma el sistema es claramente es-tructurado y actúa en forma transparente; únicamente son ejecutados los módulos necesarios, lo cualpreserva los recursos del sistema; se facilita el mantenimiento y mejora de los módulos ya que al ejecu-tar una única tarea no alcanzan gran complejidad y se da flexibilidad al usuario para que construya suspropias herramientas integrando módulos en scripts propios.

Si bien tradicionalmente GRASS ha sido un SIG orientado al manejo de información raster, en los últi-mos años se han introducido un gran número de mejoras, especialmente en lo relativo al manejo de infor-mación vectorial. Se han añadido un nuevo motor de topologías para información vectorial en 2D y 3D ysoporte para análisis de redes vectoriales, los atributos son administrados en un sistema de base de datosrelacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D NVIZ ha sido mejo-rada para permitir incorporar información vectorial en 3D y volúmenes mediante vóxeles. Los mensajesse encuentran parcialmente internacionalizados (i18N) con soporte para fuentes Freetype, incluyendocaracteres asiáticos tipo multibyte.

1.1 Objetivos

1. Entender la filosofía de trabajo con GRASS

2. Comprender las diferencias de GRASS respecto a otros programas de SIG

3. Aprender el manejo de los módulos de GRASS incluidos en la tabla 1.1

1

Page 14: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

d.mon Abre un monitor gráficod.rast Visualiza una capas raster

d.legend Visualiza la leyenda de una capa rasterd.redraw Redibuja las capas previamente cargadas en un monitor gráfico

g.list Obtiene un listado de las capas y otros elementos de información espacialg.manual Obtiene un manual de un determinado módulog.region Modifica la región de trabajo

Tabla 1.1: Módulos que van a utilizarse en este capítulo

1.2 Filosofía de trabajo en GRASS

Una de los puntos básicos de la filosofía de trabajo del software libre es libera pronto, libera a menudolo que se traduce en la liberación de varias versiones por año de los programas. Sin embargo no esnecesario cambiar de versión cada vez las versiones apenas modifican la manera de trabajar y, salvograndes saltos como la nueva gestión de información vectorial, apenas afectan a las estructuras de datos.

Aunque la liberación rápida de versiones puede suponer una mayor frecuencia de bugs en los nuevosmódulos, también permite una rápida solución de los mismos de una versión a otra, así como ponerrápidamente a disposición de los usuarios nuevos módulos o la mejora de los anteriores.

Lo recomendable sería tener dos versiones de GRASS, una estable y la última de desarrollo para experi-mentar. Puesto que las estructuras de datos de datos son las mismas, se puede atacar a una misma basede datos desde las dos versiones de manera alternativa o incluso simultanea sin ningún tipo de problema.

Los SIG se caracterizan por la necesidad de integrar una gran variedad de herramientas y tipos de datosmanejados, lo que supone una continua necesidad de ampliar capacidades. En el caso de GRASS, estapolítica se ha sustituido facilitando la integración con otros programas y librerías que ya resuelven deforma óptima una serie de problemas. De este modo no es necesario volver a hacer trabajo ya abordadopor otros proyectos de software libre. Esta filosofía se resume con la frase GRASS forma parte de unjardín ya presente en versiones antiguas de la documentación de GRASS.

En concreto los proyectos más comúnmente utilizados junto a GRASS son:

• PostgreSQL1 para el manejo de bases de datos (también cuenta con interfaces para MySQL, DBFy bases de datos conectadas con ODBC)

• R2 para el análisis estadístico de datos

• Gstat3 (o la librería gstat de R) para geoestadística e interpolación

• GMT4 para maquetación de mapas

• GDAL5 para importación/exportación de datos1http://www.postgresql.org/2http://www.r-project.org/3http://www.gstat.org/4http://gmt.soest.hawaii.edu/5http://www.gdal.org/

2

Page 15: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• PROJ46 para reproyección de datos

• UMN/Mapserver7 para proporcionar servicios web

• QGIS8 como visualizador

• Pueden importarse/exportarse ficheros de otros programas como Matlab, Octave o Povray

GRASS es un SIG modular, cada uno de sus módulos es un programa independiente; en muchos casoshan sido programados por personas sin ningún de relación. Lo que da unidad al programa es que todoslos módulos comparten:

• El tipo de estructuras de datos (formatos de los ficheros) a los que acceden y que utilizan paraalmacenar los resultados

• La interfaz y las comunicaciones con el usuario tienen un diseño común

• Un conjunto de librerías que incluyen funciones SIG en lenguaje C que simplifican la progra-mación y aseguran que los módulos se comporten de forma consistente aunque hayan sido desarro-llados por equipos diferentes.

La mayor parte de los módulos transforman información de entrada (capas raster o vectoriales) en infor-mación de salida (nuevas capas, representaciones gráficas, estadísticas o informes); así la modularidadpermite pensar en el trabajo con GRASS como un auténtico Sistema en el que la información se trans-fiere de unos a otros componentes (módulos) experimentando transformaciones hasta obtener el resultadodeseado. De esta manera es un SIG orientado al proceso de información más que a la producción deuna vista.

Esta orientación al proceso conduce de manera lógica a la programación de herramientas como solu-ción a los problemas que trata de resolver el SIG. GRASS dispone de diversos módulos que ayudan a laprogramación de scripts que se unen a las diversas herramientas que nos proporciona el sistema operativoUnix. Podemos considerar así a los módulos de GRASS como funciones SIG de alto nivel.

Pero además, las ya mencionadas librerías de funciones utilizada para programar los diversos módulosde GRASS son también abiertas y están bastante bien documentadas9. Por tanto podemos utilizarla paraprogramar nuevos módulos en lenguaje C. En cierto modo podemos considerar las funciones de la libreríacomo módulos de SIG de bajo nivel.

Finalmente, GRASS es un SIG multiusuario en el que se asume que varias personas van a trabajar envarios proyectos al mismo tiempo accediendo al mismo tiempo a un ordenador que actúa como servidoralmacenando datos y programas. Los usuarios acceden a él a través de terminales conectadas a unared local o a Internet (figura 1.1). La necesidad de evitar que varios usuarios manipulen a la vez unmismo mapa (con el consiguiente riesgo de pérdida de información), es la razón por la que los datos sealmacenan en una estructura de directorios que puede parecer a primera vista algo compleja (ver sección1.8.1).

6http://trac.osgeo.org/proj/7http://mapserver.org/8www.qgis.org/9http://grass.itc.it/devel/index.php#prog

3

Page 16: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.1: Conexiones remotas multiusuario a un Servidor en que se aloja una LOCATION con variosMAPSET

1.3 Instalación del programa

De un modo resumido, existen tres modos de instalar GRASS:

1. Instalar el paquete o paquetes de GRASS presentes en la distribución de linux que tenemos insta-lada. Es la opción más sencilla ya que el sistema de paquetes resolverá todas las dependencias einstalará todas las librerías y otros programas que hagan falta. El inconveniente es que no siempreserá la última versión del programa.

Por ejemplo con una distribución Debian o Ubuntu la orden sería:

# apt-get install grass

El sistema nos avisará de todas las librerías y programas adicionales que debe instalar para disponerde GRASS y nos preguntará si queremos hacerlo. Si es así basta contestar afirmativamente. Parainstalarlo de este modo necesitarás ser administrador del sistema.

2. Descargar la última versión del programa desde las páginas del proyecto GRASS10. Pueden bajarsediversas versiones del programa. Existe una versión genérica en un fichero comprimido (extensióntar.gz o similar) que se instala mediante un script de instalación (extensión sh).

Pero es preferible utilizar la versión preparada para la distribución de linux que estemos utilizando.GRASS está disponible desde la página del proyecto para debian, ububtu, fedora, mandriva ygentoo.

10http://grass.itc.it/download.html

4

Page 17: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

3. Finalmente cabe la posibilidad de bajar el código fuente y compilarlo directamente en nuestramáquina con la ventaja de que el código estará optimizado para la misma, pero será responsabilidaddel usuario garantizar que todas las librerías y dependencias estén en el sistema y accesibles paralas herramientas de compilación. A continuación se explicará el proceso con algo más de detalle.

La página web de GRASS nos da también la opción de consultar o bajar manuales y documentacióndiversa acerca del programa.

1.3.1 Como compilar GRASS

Una vez que el usuario se siente suficientemente seguro con GRASS puede querer compilarlo el mismo.En general un programa compilado en nuestra propia máquina, y siguiendo nuestras propias opciones,funcionará de manera más eficiente. En el caso de GRASS, la distribución de código fuente incluyeademás el conjunto de herramientas necesarios para compilar módulos independientes programados porel usuario.

Una buena idea sería bajar el fichero de fuentes, por ejemplo grass-6.3.0.tar.gz, del sitio de GRASS yguardarlo en un directorio en el que se tenga permiso de escritura. Una vez descomprimido y desem-paquetado creará un directorio que se llamará algo similar a grass-6.3.0 que contiene la distribución defuentes completa. Entre los ficheros que contiene este directorio se encuentra el programa configure.

Los programas configure y make son las dos herramientas básicas para compilar un programa en Linux.El programa configure se utiliza en las distribuciones de código fuente de Unix y sirve para determinarlas características de la máquina, buscar las librerías necesarias para compilar el programa y precon-figurar, en función de la información recopilada, la compilación. Para ejecutarlo basta con entrar en elsubdirectorio que contiene el código fuente e invocarlo:

# cd grass-6.3.0# ./configure

Permite además la introducción de diversas opciones por parte del usuario, estas se pueden consultarmediante:

# ./configure -help

Si configure determina que puede compilarse el programa de acuerdo con las especificaciones delusuario y las características de la máquina, escribirá un fichero llamado makefile con las instruccionespara hacerlo, dicho fichero será leído posteriormente por el programa make. También mostrará en pan-talla un informe con las especificaciones de compilación que nos informará sobre algunas de las carac-terísticas que tendrá el programa cuando esté finalmente instalado en nuestro sistema (ver figura 1.2).En caso de que configure no encuentre alguna librería o sea imposible instalar alguna opción solicitada,aborta con un mensaje de error.

En el caso de GRASS, el informe final de configure será similar al que aparece en la figura 1.2 e indicaque librerías se utilizarán para hacer la compilación y los directorios donde se encuentran los ficherosfuente (Source directory), donde se guardará el código compilado (Build directory) y aquel en el quefinalmente se instalará el programa (Installation directory), lógicamente debemos tener permiso de es-critura en todos ellos.

5

Page 18: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

GRASS is now configured for i686-pc-linux-gnuSource directory: /usr/local/grass-6.3.0Build directory: /usr/local/grass-6.3.0Installation directory: /usr/local/grass6C compiler: gcc -g -O2FORTRAN compiler: g77NVIZ: yesX11 support: yesDBM support: noJPEG support: yesTIFF support: yesPNG support: yesGD support: yesTcl/Tk support: yesPostgreSQL support: yesOpenGL(R) support: yesODBC support: yesFFTW support: yesBLAS support: yesLAPACK support: yesMotif support: noFreeType support: yesGLw support: noNLS support: noReadline support: no

Figura 1.2: Resultados del comando configure de GRASS

6

Page 19: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

El propósito del programa make es facilitar la compilación de programas complejos. Para ello se apoyaen el fichero makefile creado por configure que describe las relaciones entre los ficheros del códigofuente, las librerías que hay que enlazar y las ordenes necesarias para crear los ejecutables.

Así tras haber ejecutado configure, la orden necesaria para compilar GRASS es simplemente:

# make

y para terminar con la instalación de GRASS:

# make install

que colocará los ejecutables en el directorio de instalación (ver figura 1.2, linea 4).

1.4 Entrada y salida rápida al programa

Dependiendo de la distribución de GRASS que estemos manejando y del modo en que esté instalado, elcomando para ejecutar GRASS puede recibir distintos nombres (grass, grass, grass5, grass63, etc).

Para este curso se va a utilizar la versión 6.3 del programa por lo que seberás teclear:

# grass63

Una vez inicializado GRASS, en la primera pantalla que aparece debe indicarse la base de datos con laque se va a trabajar y los directorios de trabajo dentro de la misma (LOCATION y MAPSET). Desde laversión 6.0 del programa, se dispone de una interfaz gráfica para la entrada en el programa (figura 1.4).

Alternativamente, la ventana de entrada puede desplegarse en modo texto (figura 1.3) si la versión deGRASS es antigua o si se ha especificado de este modo en la configuración del programa.

Figura 1.3: Pantalla de texto de introducción a GRASS (v. 5.3)

Para la realización de este curso, las entradas adecuadas son:

• LOCATION: CursoGRASS

• MAPSET: nombre_usuario

7

Page 20: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.4: Pantalla gráfica de introducción a GRASS (v. 6.4)

• DIRECTORIO DE LA BASE DE DATOS: /disco1/datos

Si todo ha salido bien el único cambio apreciable es la sustitución del promt anterior por uno nuevosimilar a:

GRASS6 (CursoGRASS ):∼>

que indica que se ha entrado en el programa y que en este manual se abrebiará utilizando el símbolo:∼>.

Para salir de GRASS debe teclearse

:∼>exit

8

Page 21: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

1.5 Los módulos. Herramientas del sistema

A pesar del desarrollo de interfaces gráficas, otro de los aspectos básicos de la filosofía de GRASS es sumanejo en linea de comandos. El trabajar con comandos tecleados en lugar de menús o botones puederecordar al viejo MS-DOS, sin embargo Unix incorpora una linea de comandos mucho más potente, asícomo diversas herramientas de sistema, que facilitan el trabajo e incrementan de forma exponencial lapotencia del sistema.

Los nombres de los módulos de GRASS están constituidos por una letra minúscula que hace referencia altipo del comando, un punto y el nombre del comando. Los tipos de comando, y sus letras identificadorasson:

• g.* Módulos de gestión de ficheros

• d.* Módulos de salida gráfica

• r.* Módulos para análisis de capas raster

• r3.* Módulos para análisis de capas raster 3D

• v.* Módulos para análisis de capas vectoriales

• db.* Módulos para el manejo de bases de datos

• i.* Módulos para tratamiento de imágenes de satélite

• m.* y p.* Miscelanea de módulos con propósitos diversos

Esta particular notación evita la confusión de los módulos de GRASS con otros comandos Unix y ademáspermite echar un vistazo rápido a todos los módulos de GRASS, si tecleamos por ejemplo r. y seguida-mente pulsamos la tecla de tabulación, obtendremos un listado de todos los módulos relacionados con eltratamiento de ficheros raster.

En algunos casos aparece una segunda palabra que nos da algo más de información sobre el propósitodel programa, como ejemplos:

• in, son módulos de importación de otros formatos a GRASS

• out, son módulos de exportación de GRASS a otros formatos,

• surf, interpola superficies a partir de mapas de puntos o lineas

• what, permite pinchar en un monitor gráfico y obtener las características de la celdilla, objeto opunto seleccionado

• to, realiza diversas operaciones de paso de formato entre raster, vectorial

• proj, gestión y transformaciones de sistemas de referencia

• bd, gestión de la tabla enlazada a un mapa vectorial

9

Page 22: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Existen diferentes combinaciones de estas palabras con las iniciales antes vistas, por ejemplo r.in, v.in,r.out, v.out, r.out, v.out, d.what.

Que darán lugar a diferentes nombres de módulos, por ejemplo:

• r.in.gdal Importación de mapas raster a traves de gdal

• v.out.ogr Exportación de mapas vectoriales a traves de ogr (gdal)

• r.to.vect Transformación raster -> vectorial

• v.to.db Actualización de la base de datos con información geométrica

• v.surf.idw Interpolación con media ponderada por el inverso de la distancia

• v.db.connect Enlaza una tabla a un mapa vectorial

La mayor parte de los módulos transforman información de entrada (capas raster o vectoriales) en infor-mación de salida (nuevas capas, representaciones gráficas, estadísticas o informes), esta transformaciónviene condicionada por un conjunto de parámetros y opciones que deben ser introducidos por el usuario.Los parámetros pueden ser obligatorios, es decir aquellos sin cuya presencia el módulo no puede fun-cionar, u optativos (los introducimos si queremos y si no queremos no), las opciones (flags en inglés) son,como su propio nombre indica, siempre opcionales y modifican la manera en que se ejecuta el módulo.

La mayor parte de los módulos pueden utilizarse de dos modos diferentes, en linea de comandos y enmodo interactivo.

1.5.1 La SHELL

Podemos considerar a la SHELL como un entorno de trabajo que permite al usuario lanzar programasmediante órdenes que suelen formarse con el nombre de un programa y un conjunto de opciones oparámetros.

Por ejemplo la orden:

ls -l *.tif

Producirá un listado (ls) de todos los ficheros con extensión tiff (parámetro *.tif). La opción -lestablece que será un listado largo, incluyendo diversas características de los ficheros.

Una SHELL incluye, además de la posibilidad de ejecutar programas, una serie de comandos básicospara el manejo de los archivos y directorios del ordenador, así como herramientas diversas para procesarla información presente en los archivos.

La ventaja de trabajar directamente con la SHELL, en un terminal de texto, es la flexibilidad y la posi-bilidad de automatizar tareas mediante scripts, pequeños programas que incluyen varias órdenes y her-ramientas que permiten a aquellas interactuar unas con otras. El precio que hay que pagar es la necesidadde aprender un lenguaje para sacarle partido a la SHELL.

Por ejemplo, ante el problema de convertir 200 ficheros de imagen de formato tiff a formato jpg. ¿Comose haría con un programa basado en iconos y botones? Repitiendo 200 veces una secuencia de movimien-tos y pulsaciones de ratón.

10

Page 23: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

¿Cómo se haría en linea de comandos? Repitiendo 200 veces una orden similar a convert fichero.tiffichero.jpg donde fichero se sustituye cada vez por el nombre de un fichero.

Una posibilidad sería hacer una lista de tareas, es decir escribir en un fichero de texto 200 veces la ordeny editar cada linea para poner los nombres correctos de los ficheros.

convert fichero_1.tif fichero_1.jpgconvert fichero_2.tif fichero_2.jpgconvert fichero_3.tif fichero_3.jpg.. .. ..convert fichero_N.tif fichero_N.jpg

A continuación bastaría con copiar y pegar estas lineas en la terminal de texto. Una posibilidad másinteligente es convertir la lista de tareas en un script. Asumiendo que queremos transformar todos losficheros tiff del directorio de trabajo, el siguiente script realizará el trabajo por nosotros.

for i in $(ls *.tif);doo=$(echo $i|sed ’s/tif/jpg/’);convert $i $o;

done

Además de ahorrarnos tecleo, este script nos ahorrará tener que estar pendientes de que el programa hayaterminado una transformación para iniciar la siguiente.

Aunque no entiendas del todo el anterior script quedate con la idea de que:

• la primera linea inicia un bucle y define todos los ficheros de entrada i a los que se va a aplicar elcontenido del bucle;

• la segunda linea genera el nombre del fichero de salida (o) que corresponde a cada fichero deentrada sustituyendo tif por jpg;

• la tercera linea ejecuta la transformación mediante una llamada al programa convert y

• la cuarta cierra el bucle.

Variables

Un script puede ser una simple lista de ordenes de sistema. Sin embargo para que sean realmente útileslos scripts necesitan tener cierta capacidad de generalización. Para ello es necesario el uso de variables:

x=10echo $x

Como ves, cuando se define una variable no hay que precederla de un $ pero si cuando se utiliza.

El comando echo Mensaje_en_pantalla muestra en la pantalla el mensaje indicado.

echo Mensaje_en_pantalla>fichero Escribe el mensaje en el archivo fichero.

11

Page 24: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

echo Otro_mensaje_en_pantalla»fichero Concatena el mensaje en el archivo fichero.

Otra posibilidad a la hora de definir una variable es asignar a esta el resultado de la ejecución de unaorden, para ello basta con poner la orden entre paréntesis precedida de un $. Puedes verlo en el siguienteejemplo:

x=$(seq 1 10)echo $x

La orden seq simplemente devuelve la secuencia de números solicitada, en este caso se ha almacenadoen la variable x cuyo valor pasa a ser:

1 2 3 4 5 6 7 8 9 10

Tuberias y redirecciones

A veces es útil enviar la salida de un programa directamente a la pantalla (el comportamiento por de-fecto), pero en otros casos será más interesante redirigir esta salida a otro lugar. Cualquier programainformático puede concebirse como un sistema que transforma un archivo de entrada en otro de sal-ida. En Unix este hecho es especialmente evidente ya que el sistema proporciona una gran flexibilidadpara construir sistemas de proceso de datos mediante la integración de comandos. Las tuberías | y lasredirecciones > o >> que son los elementos clave para conseguir esta integración.

ls -l>listado.txt

Crea un fichero de texto llamado listado.txt que contendrá el listado de ficheros producido conls. El inconveniente es que si listado.txt existía previamente lo eliminará. Para evitarlo se puedeutilizar:

ls -l>>listado.txt

que, en caso de que listado.txt existiera previamente, lo mantendrá y escribirá la salida de ls -la continuación del contenido preexistente.

El programa cat proporciona como salida el contenido del archivo de entrada pero este se puede redirigira otro archivo:

cat archivo1 > archivo2

De esta forma, archivo2 será una copia de archivo1. Si archivo2 existía previamente habrásido eliminado. Si en lugar de eleminarlo hubiesemos querido añadir a archivo2 el contenido dearchivo1, la orden hubiese sido:

cat archivo1 >> archivo2

Un tercer tipo de redirección es < que permite que una orden tome sus datos de entrada de un fichero.

Las tuberías | permiten pasar a un programa la salida de otro; por ejemplo:

ls -l|more

Pemitirá ver página por página el listado producido por -l.

ls|awk ’print $8’|grep 4

12

Page 25: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

redirige el listado que se obtiene como salida de ls a grep con el parámetro 4 que seleccionará sóloaquellos ficheros que incluyan el número 4 en su nombre.

La filosofía de Unix se basa en muchas herramientas pequeñas (como cat, more, grep o ls) quehacen una tarea sencilla y su potencia reside en la capacidad de integrar (mediante tuberías redireccionesy otros elementos de programación) varias de estas herramientas para hacer una tarea compleja.

1.5.2 Modo en linea de comandos

El usuario debe teclear, tras el nombre del módulo, todas las opciones y parámetros de ejecución delmismo. Las opciones constan de una sola letra precedida por un guión (por ejemplo -o) pudiendo com-binarse varias letras tras un guión (por ejemplo -opv) y los parámetros tienen un nombre y se pasan alprograma con el nombre del parámetro y su valor unidos por un signo =. En algunos casos, como elque nos ocupa ahora, es válido introducir el nombre de la capa de entrada al módulo sin su nombre, porejemplo:

:∼> d.rast MDE

en lugar de

:∼> d.rast map=MDE

En el siguiente caso:

:∼> d.rast -o map=urbanos

aparece la opción -o y el parámetro map que adopta el valor urbanos. La opción -o indica que aquellasceldillas de la capa raster que tengan valor nulo no se pinten de manera que pueda seguir viéndose unacapa raster que hubiera pintada anteriormente. El parámetro map indica la capa raster que va a pintarse.El siguiente ejemplo, algo más complejo, vectoriza una capa raster con lineas y lo convierte en una capavectorial de lineas. Puesto que los formatos serán diferentes es posible que ambas capas tengan el mismonombre.

:∼> r.to.vect input=hidrografia output=hidrografia\feature=line

En el siguiente capítulo se estudiarán más en detalle estos módulos y el tipo de salida gráfica que pro-ducen.

1.5.3 Modo interactivo

El usuario simplemente teclea el nombre del módulo, aparecerá una interfaz gráfica de módulo en laque podrá introducir las opciones y parámetros que desee. Por ejemplo tecleando como orden el módulor.to.vect para vectorizar información raster, obtendremos la ventana que aparece en la figura 1.5. Cuando

13

Page 26: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.5: Interfaz Gráfica de Usuario del módulo r.to.vect

cumplimentemos los diferentes campos aparecerá al pie la orden tal como podría haber sido ingresadaen la linea de comandos (figura 1.6).

Las ventanas del modo interactivo tienen diversas pestañas. Las más habituales son Options en la queintroduciremos opciones y parámetros y Output en la que GRASS volcará los mensajes de salida o errordel módulo ejecutado.

Este modo de trabajo tiene dos inconvenientes principales:

• Algunos módulos tienen un gran número de parámetros y opciones de los que sólo un pequeñoporcentaje suelen utilizarse. En estos casos es más eficiente escribir una pequeña orden que en-frentarnos a una interfaz gráfica compleja.

• No queda constancia en el sistema de las órdenes ejecutadas. Por el contrario si se utiliza la lineade comandos, la orden history de Unix permite visualizar órdenes anteriores con lo que, anteresultados erróneos, podemos recuperar cual fue exactamente la orden que los generó. Por otrolado la tecla flecha hacia arria, permite recuperar, editar y volver a lanzar órdenes anteriores.

Aunque en principio el modo interactivo parece más sencillo hay que tener en cuenta que, si lo utilizamos,GRASS nos preguntará por todos11 los parámetros (voluntarios y optativos) y opciones. De este modola ejecución de un módulo sencillo como d.rast se hace realmente farragosa. Por tanto será preferibleutilizar la linea de comandos salvo en las escasas ocasiones en las que un módulo solo admita la ejecuciónen modo interactivo. Por otro lado el modo en linea de comando resulta más útil cuando se va a repetiruna misma orden con diversas variaciones o cuando se trabaja con ficheros de guión de Unix.

11y en algunos casos pueden llegar a ser muchos

14

Page 27: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.6: Interfaz Gráfica de Usuario del módulo r.to.vect con el formulario completado

1.6 Interfaces gráficas de usuario para GRASS

Actualmente hay disponibles tres interfaces gráficas de usuario de manera adicional a la tradicionalconsola de comandos. La GUI por defecto es el Administrador GIS (Gis Manager) que se activa demanera automática al iniciar GRASS.

Un proyecto externo, el visor de datos geográficos amigable con el usuario QGIS, proporciona soportedirecto para GRASS. Desde la versión 0.7 de QGIS en adelante esta incluida una extensiva interfaz deGRASS con un digitalizador en pantalla y funcionalidades de SIG (figura 1.8).

El piloto raster de gvSIG permite acceder a capas raster de GRASS situadas en el mapset PERMANENT(figura 1.9).

Existe una herramienta multiplataforma y multisesión, JAVAGRASS (JGRASS), que prepara a GRASSpara ser usado en entornos de producción, de forma opuesta a los entornos de investigación. La ar-quitectura de JGRASS sigue internamente un modelo cliente-servidor, separando la Interfaz Gráfica deUsuario del motor de procesamiento espacial. Esta separación permite el fácil desarrollo de mecanismosde acceso remoto.

Finalmente se está desarrollando una IGU propia de GRASS programada en python utilizando la libraríagráfica wxWidgets.

1.7 Manuales y ayuda

Cada módulo de GRASS es casi un programa independiente y como tal cuenta con un manual propio.El módulo con el que podemos pedir al programa que nos muestre el manual de cualquier módulo es

15

Page 28: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.7: Interfaz Gráfica de Usuario

g.manual. Puede invocarse seguido del nombre del módulo del que queremos ayuda:

:∼> g.manual d.rast

con lo que se obtiene directamente en el navegador el manual del módulo d.rast, tal como aparece en lafigura 1.10.

Podemos elegir cualquier navegador utilizando la variable de entorno GRASS_TEXT_BROWSER,dándole como valor el nombre de cualquier navegador.

:∼> export GRASS_TEXT_BROWSER=navegador

Otra variable de interés relacioanada con esta es GRASS_DOC_BASE que indica a GRASS el directoriodonde debe buscar las páginas de manual.

Puede también obtenerse una breve ayuda de un módulo utilizando el parámetro help del módulo corre-spondiente:

:∼> d.rast --help

De este modo el módulo nos presentará un resumen del modo en que debemos invocarlo. En realidadesta información aparecerá cada vez que llamemos al módulo de forma errónea, junto con el mensaje deerror correspondiente (figura 1.11).

Por tanto, cada vez que ejecutes una orden de GRASS y el programa te conteste con un mensaje deayuda, no lo dudes: TE HAS EQUIVOCADO EN ALGO. Busca al principio del mensaje de ayuda y

16

Page 29: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.8: Interfaz Gráfica de Usuario: QGIS

verás el error.

En el ejemplo de la figura 1.11 se ha introducido una orden errónea, la segunda linea nos dice que -k no esuna opción válida y a continuación nos da la ayuda explicándonos cuales son las opciones y parámetrosválidos.

Las figuras 1.10 y 1.11. muestran como las páginas de manual y los mensajes de ayuda tienen una estruc-tura similar, tras una breve descripción se explica el uso del módulo indicando las posibles opciones (flagsen inglés) y los parámetros (parameters) obligatorios u opcionales (los que aparecen entre corchetes).

Las páginas de manual, al contrario que los mensajes de ayuda, incluyen detalles sobre su uso y sobre eltipo de algoritmos que utiliza el módulo.

1.8 La base de datos

1.8.1 El sentido de las LOCATION y los MAPSET

La primera dificultad con que se encuentra alguien que comienza a experimentar con GRASS es elsentido de estos conceptos. En realidad se trata de decirle al programa algo tan sencillo como en quedirectorios están los datos con los que queremos trabajar.

La información de GRASS se encuentra almacenada en un directorio de base de datos conocido comoDATABASE o GISDBASE que, en principio, contiene todas las bases de datos de todos los proyectosgestionados por GRASS. Este directorio tiene que ser creado con mkdir o un administrador de archivosantes de comenzar a trabajar con GRASS. Dentro de esta base de datos, los proyectos se organizan poráreas de trabajo en subdirectorios llamados localizaciones (LOCATION en inglés). Una LOCATION

17

Page 30: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.9: Interfaz Gráfica de Usuario: gvSIG

está definida por su sistema de coordenadas y su proyección cartográfica. En principio, todas los capasque contiene son, más o menos, de la misma zona.

Puesto que cada LOCATION corresponde a un proyecto en el que trabajan varios usuarios, cada uno deellos tiene un directorio propio llamado MAPSET (conjunto o carpeta de mapas en inglés), que contienetodos los mapas que ese usuario ha hecho y sobre los que, por tanto, tiene permiso de lectura y escritura.

Cuando se crea una nueva LOCATION con GRASS, debe crearse un MAPSET especial llamado PER-MANENT que contendrá todas aquellas capas que se consideran acabadas, que no van a sufrir posteri-ores modificaciones y que, por tanto, ningún usuario podrá modificar aunque todos pueden consultarlos,analizarlos o copiarlos a su propio MAPSET. Los datos en el MAPSET PERMANENT sólo pueden serañadidos, modificados o borrados por el propietario del mismo que actúa así como administrador de laLOCATION.

El MAPSET PERMANENT es útil para proporcionar información general (ejemplo, un modelo de el-evación digital), accesible pero protegida contra escritura de todos los usuarios que se encuentran tra-bajando en la misma localización del propietario de la base de datos. Para manipular o agregar datos alPERMANENT, el propietario debe iniciar GRASS y seleccionar dicho MAPSET.

Este MAPSET también contiene el archivo DEFAULT_WIND, el cual almacena los parámetros que de-finen la región por defecto (ver la sección 1.10 para una descripción de las regiones) para la LOCATION(los cuales todos los usuarios heredarán cuando inicien la base de datos).

Al crear un MAPSET, se crea un archivo WIND para almacenar los parámetros que definen la región detrabajo en dicho MAPSET. Los usuarios tienen la opción de modificar esta región o regresar a la regiónpor defecto en cualquier momento.

En realidad los MAPSET no tienen porque corresponder con usuarios, también pueden existir MAPSETpor áreas temáticas (geología, hidrología, etc.) o por tareas (interpolación, modelos, etc.), siempre conlas siguientes limitaciones:

• Cada MAPSET tiene un único propietario

18

Page 31: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.10: Página de manual de d.rast

• Cada usuario del sistema sólo puede acceder a GRASS mediante un MAPSET del que sea propi-etario

• No puede haber más de dos sesiones abiertas con el mismo MAPSET (pero si por el mismo usuarioen distintos MAPSET)

1.8.2 Tipos de datos

Aunque tradicionalmente GRASS ha sido, y aún se le sigue considerando, un SIG orientado fundamen-talmente al manejo de datos raster, las últimas versiones (desde la 5.7 en adelante) han incorporado ungran número de capacidades para el manejo de información vectorial, hasta el punto de poderse compararcon otros SIG punteros en este aspecto.

Tanto la información raster como la vectorial se almacenan en varios ficheros por capa situados en dis-tintos directorios, por tanto cualquier tarea de gestión de la base de datos (copia, borrado, etc. de capas)debe hacerse con las herramientas específicas de GRASS y no con las del sistema operativo.

19

Page 32: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 1.11: Mensaje de error del módulo d.rast

Capas raster

La estructura de datos raster en GRASS es independiente de la arquitectura de la máquina y válida tantopara máquinas de 32 como de 64 bits. Por tanto la base de datos será accesible a traves de NFS (NetworkFile System) en una red heterogénea sin problemas de compatibilidad.

Dependiendo del tipo de variable almacenada, existen tres tipos de capas raster:

• CELL, números enteros

• FCELL, números reales

• DCELL, números reales en doble precisión

GRASS utiliza un sistema de compresión por linea de forma que, al acceder a una celdilla concreta, puedeaccederse de forma aleatoria a la linea y de forma secuencial a la columna. Constituye una solución decompromiso entre una capa raster sin compresión (acceso más rápido pero ficheros muy grandes) ycomprimida (ficheros pequeños pero acceso muy lento).

En GRASS se utilizan varios ficheros para almacenar una sola capa raster. Tienen todos el mismo nombrey, en lugar de distinguirse por la extensión, se distinguen por el directorio en el que se almacenan dentrode un determinado MAPSET (figura 1.12).

• Si los datos son de tipo CELL, la matriz de datos, es decir los números que contienen las diferentesceldillas, se almacenan en un fichero contenido en el directorio /cell (formato binario). Si los datosson de tipo FCELL o DCELL este fichero existe pero esta vacio (0 bytes).

• La información necesaria para leer y ubicar espacialmente los datos contenidos en el fichero ante-rior se almacenan en un fichero en el directorio /cellhd (formato ASCII).

• En el directorio /cats se guardan las etiquetas de texto en caso de que la variable sea cualitativa(formato ASCII).

20

Page 33: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• El fichero que cuelga del directorio /colr guarda información acerca de la paleta de colores que seva a utilizar para representar el mapa (formato ASCII) Es muy parecido al de IDRISI, pero ahoralos valores de intensidad oscilan entre 0 y 255.

• El directorio /cell_misc contiene estadísticos básicos de la imagen y la localización de las celdillascon valor nulo.

• Finalmente el directorio /fcell contiene las matrices de datos de las capas que contienen valores noenteros (datos de tipo FCELL o DCELL).

Figura 1.12: Esquema de ficheros y directorios para almacenar información raster

Capas vectoriales

En GRASS 6 se distinguen los siguientes tipos de objetos vectoriales:

• point, puntos.

• line, lineas.

• boundary, arcos que forman el perímetro de los polígono.

• centroid, puntos ubicado en el interior de los polígono y que define estos.

• area, polígonos, su existencia es puramente topológica,requieren la existencia de un conjunto dearcos cerrados y un centroide en su interior.

Puntos, lineas, arcos y centroides pueden tener o no tener identificador, este identificador permitirá elenlace del objeto con una fila de la tabla de atributos enlazada.

En el caso de los datos vectoriales la organización de ficheros y directorios es algo diferente (figura1.13. Cada mapset incluye sendos directorios /vector y /dbf que se generan de forma automática alcrear el mapset. El primero contendrá un subdirectorio por capa vectorial (llamado igual que la capa quecontiene) con los siguientes ficheros:

21

Page 34: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• head, fichero ASCII con información de cabecera de la capa.

• coor es un fichero binario que tiene la información geométrica (coordenadas) de los diferentesobjetos en la capa.

• topo es un fichero binario que contiene la topología de la capa. En GRASS esta se reconstruyeexplícitamente al crear la capa y cada vez que se la modifica.

• dbln es un fichero ASCII que contiene, para cada layer presente en el fichero vectorial la tabla quecontiene su información temática, así como la base de datos en que se encuentra, la columna queactúa como clave y el tipo de base de datos.

• cidx es un fichero binario con un índice que enlaza los identificadores de los objetos en el ficherocoor con las filas en la tabla enlazada.

• hist, histórico de la capa en formato ASCII.

Si el sistema está configurado para almacenar las tablas enlazadas a los mapas vectoriales en formatodbf, estas se sitúan en el directorio /dbf con el mismo nombre que las capas a las que se refieren. Otraopción es utilizar postgreSQL para almacenar las tablas, en ese caso deberá existir una base de datos eneste sistema en la que el usuario pueda crear y consultar tablas (ver capítulo 4).

Figura 1.13: Esquema de ficheros y directorios para almacenar información vectorial

Otros tipos de datos

A pesar de que las capas raster y vectoriales son los componentes fundamentales de la informaciónespacial almacenada en un SIG, en una base de datos de GRASS pueden existir otros elementos:

• rast3d (capas raster 3D)

22

Page 35: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• oldvect (capas vectoriales en formato antiguo)

• asciivect (ficheros vectoriales en formato ASCII, suelen utilizarse como paso intermedio en al-gunos procesos de importación-exportación de información vectorial)

• icon (ficheros con iconos)

• labels (ficheros con etiquetas de texto)

• sites (capas vectoriales de puntos en formato antiguo)

• region (ficheros con regiones de trabajo)

• region3d (ficheros con regiones de trabajo 3D)

• group (ficheros de grupos de imagen de satélite)

• 3dview (ficheros con parámetros de visualización 3D)

Cada uno de estos tipos de datos cuenta con su subdirectorio específico en el MAPSET del usuario.

1.8.3 Listados de capas de información espacial

El comando g.list presenta un listado de cualquiera de los elementos de información antes mencionados.Para ello hay que ejecutar el módulo seguido de un solo parámetro, el nombre del tipo de elemento del quequieres obtener un listado (los nombres presentes en el listado anterior más rast y vect respectivamentepara la información raster y vectorial.

Por ejemplo la salida de la orden:

:∼>g.list rast

será similar al que aparece en la figura 1.8.3

———————————————-raster files available in mapset PERMANENT:MDE mapa200 municipios suelos usos

———————————————-

Figura 1.14: Salida de la orden g.list rast

En una Location con varios Mapset y muchas capas de información puede ser interesante limitar elnúmero de mapsets de los que obtenemos el listado de mapas. Para ello basta añadir el correspondienteparámetro a g.list:

:∼>g.list rast mapset=PERMANENT

23

Page 36: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

En todo caso g.list solamente accede a los mapsets seleccionados por el usuario como accesibles. Parahabilitar y deshabilitar mapsets puede utilizarse el módulo g.mapsets que presenta al usuario la ventanaque aparece en la figura 1.15.

Figura 1.15: Ventana para habilitar mapsets (g.mapsets)

Por defecto siempre estará habilitado el MAPSET de trabajo; los demás sólo podrán habilitarse, siempreque su propietario no ha alterado los permisos de lectura-escritura del directorio, mediante el módulog.mapsets.

El usuario puede hacer referencia a las capas de información espacial simplemente con su nombre. Encaso de que haya varias capas con el mismo nombre en diferentes MAPSET, el sistema nos advertiráe indicará cual es la capa finalmente seleccionada. El usuario puede especificar de que MAPSET debetomarse la capa uniendo el nombre de este con el del MAPSET con una arroba, por ejemplo:

:∼>d.rast MDE@PERMANENT

El módulo g.list permite obtener listados de todos los tipos de datos presentados en el apartado anterior.

1.9 Visualización

Uno de los aspectos que más se suelen criticar de GRASS es la simplicidad de sus modos de visua-lización. Desde el comienzo, los desarrolladores del programa optaron por crear un sistema sencillo yrobusto para garantizar la portabilidad y debido a que el objetivo del programa era más la gestión, análisisy modelización que la visualización.

Hoy en día se están desarrollando diversas Interfaces Gráficas de Usuario que incluyen sistemas de visu-alización más sofisticados. Sin embargo es conveniente entender el funcionamiento del sistema originalde GRASS ya que, por su sencillez, permite velocidades de refresco elevadas.

24

Page 37: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Una cuestión importante a recordar es que la mayor parte de los módulos crean una capa de informa-ción a partir de información contenida en otras capas, sin embargo el hecho de crear una nueva capano supone la visualización automática de la misma. Este es uno de los aspectos que suelen resul-tar confusos a los nuevos usuarios de GRASS. Para la visualización de capas con GRASS debemos“abrir” monitores que pueden utilizarse para visualizar capas utilizando módulos específicos para ello.Los módulos de consulta sobre el mapa o zoom también requieren interactuar con el mapa mostrado enel monitor.

En GRASS existe un número limitado de monitores gráficos (en realidad podría haber muchísimos perono merece la pena) y el usuario debe especificar con cual de ellos quiere trabajar. Los monitores gráficosse nombran con un x seguida de un número (x0, x1, x2, x3, x4, x5, x6, . . . ). La orden de GRASS paragestionar monitores gráficos es d.mon, sus parámetros básicos son start, select y stop. De momentobaste con saber que para abrir un monitor gráfico para comenzar a ver mapas hay que ejecutar:

:∼> d.mon start=x1

o abreviando:

:∼> d.mon x1

Si sólo tenemos un monitor activo este será automáticamente seleccionado. Para comprobarlo puedesejecutar la orden:

:∼> d.rast MDE

Sin embargo cuando haya más de un monitor abierto será necesario que el usuario le comunique alsistema a cual de ellos debe mandar el resultado de los subsiguientes comandos gráficos.

Por ejemplo, podemos abrir otro monitor gráfico para visualizar la leyenda del mapa de elevaciones:

:∼> d.mon x2 :∼> d.legend MDE

Puesto que el último monitor abierto es x2 todas las órdenes de GRASS que tengan que ver con visual-ización se ejecutarán sobre este, para seleccionar un monitor distinto es necesario ejecutar d.mon con elparámetro select.

:∼> d.mon select=x1

Finalmente cuando el usuario quiera cerrar un monitor gráfico bastará con utilizar el parámetro stop:

:∼> d.mon stop=x1

25

Page 38: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

1.10 Región de trabajo

GRASS difiere de otros programas de SIG raster en el modo en que gestiona la extensión y resoluciónde la región de trabajo siendo este es un concepto fundamental en GRASS.

GRASS nos permite trabajar con capas raster de extensión y resolución diferente, por tanto las carac-terísticas de la región de trabajo son independientes de las capas y deben poder fijarse de algún modo porparte del usuario.

El usuario puede modificar en todo momento la región de trabajo (aunque estas modificaciones han dehacerse con precaución puesto que van a modificar cualquier tipo de análisis o visualización posteriorbasados en datos raster).

La configuración de la región actual se almacena en el MAPSET de trabajo en el fichero WIND,mientras que existe una región por defecto para cada LOCATION que se almacena en el fichero DE-FAULT_WIND del MAPSET PERMANENT.

El comando g.region dispone de múltiples opciones y parámetros. Pueden distinguirse entre aquellosparámetros que modifican directamente las propiedades básicas de la región:

e= modifica la coordenada X del límite este de la región

w= modifica la coordenada X del límite oeste de la región

n= modifica la coordenada Y del límite norte de la región

s= modifica la coordenada Y del límite sur de la región

nsres= modifica la resolución vertical o tamaño del pixel en la dirección Norte-Sur

ewres= modifica la resolución horizontal o tamaño del pixel en la dirección Este-Oeste

res= modifica la resolución o tamaño del pixel en ambas direcciones

y aquellos parámetros que toman como parámetros de la región de trabajo los equivalentes de una capaespacial

rast= actualiza la región con los parámetros de una capa raster

vect= actualiza la región con los parámetros de una capa vectorial

Hay que tener cuidado con la actualización de la región con los parámetros de una capa vectorial ya quepuede modificar la resolución.

Puede también guardarse la región activa con un nombre (parámetro save), cargarse una región previa-mente guardada (parámetro region) o cargar la región por defecto (aquella cuya configuración se guardaen el fichero DEFAULT_WIND del MAPSET PERMANENT) con la opción -d.

Puede obtenerse un listado de las regiones previamente guardadas con el módulo g.list:

:∼> g.list region

26

Page 39: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

projection: 1 (UTM) n=4928010zone: 13 s=4913700datum: nad27 w=589980ellipsoid: clark66 e=609000north: 4928010 nsres=30south: 4913700 ewres=30west: 589980east: 609000nsres: 30ewres: 30rows: 477cols: 634

Figura 1.16: Salida de g.region -p (izquierda) y g.region -g (derecha)

Finalmente las opciones -p y -g devuelven, en el terminal de texto las características de la región activacon dos formatos diferentes (figura 1.16).

Algunos módulos como d.zoom no sólo modifican los parámetros de visualización del monitor gráficosino que también modifican la región de trabajo. Por el contrario, g.region modifica la región de tra-bajo pero no modifica de manera inmediata el contenido de ninguno de los monitores gráficos. Paraconseguirlo debe ejecutarse el módulo d.redraw, que se utiliza sin parámetros ni opciones y que simple-mente redibuja las capas de información presentes en el monitor gráfico activo.

1.11 Un ejemplo

En el siguiente ejemplo se adopta como región las características geométricas de la capa de elevaciones yse abre un monitor en el que se dibuja dicha capa. Posteriormente se modifica el límite norte de la región,se guarda esta con el nombre miregion y finalmente se redibuja el monitor gráfico.

g.region rast=MDEd.mon x1d.rast MDEg.region n=4200000g.region save=miregiond.redraw

La orden d.redraw vuelve a mostrar en el monitor gráfico los mapas previamente invocados, pero ahoraajustándolos a la nueva región.

27

Page 40: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

28

Page 41: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 2

Visualización y consultas

2.1 Objetivos

1. Utilizar diferentes monitores gráficos

2. Manejar leyendas

3. Entender y manejar paletas de color

4. Modificar el área de trabajo

5. Presentar el manejo de los módulos de GRASS incluidos en la tabla 2.1

2.2 Visualización de Mapas raster y leyendas: d.rast y d.legend)

En primer lugar vamos a abrir un monitor gráfico:

:∼> d.mon x1

y a visualizar en él la capa de elevaciones:

:∼> d.rast MDE

Añade ahora la capa de núcleos urbanos con la orden que aparece a continuación:

:∼> d.rast -o urbanos

El resultado de estas ordenes aparece en la figura 2.1

Resulta interesante comparar estos dos mapas pues, a pesar de estar ambos en formato raster, son denaturaleza distinta. El primero representa una superficie (una variable cuantitativa autocorrelacionada)

29

Page 42: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

d.erase Borra un monitor gráficod.legend Obtiene una leyenda de un mapa en un monitor gráfico

d.measure Permite medir objetos sobre el monitor gráficod.vect Pinta un vectorial

d.what.rast Muestra los valores de uno o varios mapas raster en el punto pinchado en pantallad.what.vect Muestra las coordenadas de un punto pinchado en pantalla

d.where Muestra las coordenadas de un punto pinchado en pantallad.zoom Permite definir una ventana para hacer zoomd.save Almacenar las órdenes necesarias para generar la visualización que aparece en pantalla

d.mvmon Gestión avanzada de monitores gráficosd.out.file Genera un fichero gráfico con la visualización que aparece en pantallar.colors Asigna una paleta completa a un mapar.covar Obtiene una matriz de covarianzas o correlaciones de un conjunto de capasr.digit Permite crear capas raster sencillas digitalizando sobre un monitor gráfico

r.mapcalc Se utiliza en este Capítulopara crear máscarasr.report Obtiene una tabla resumen de los datos de un fichero raster a partir del

resultado de r.statsr.stats Contabiliza las celdillas que pertenecen a cada categoría

r.univar Obtiene estadísticos sencillos de la variable representada en la capar.what Obtiene un valor de una capa raster a partir de un par de coordenadasv.info Obtención de información básica de una capa rasterv.what Obtiene un valor de una capa vectorial a partir de un par de coordenadas

v.what.vect Muestra los valores de una o varios capas vectoriales en el puntopinchado en pantalla

v.univar Estadística univariante de las columnas de la tabla enlazada a una capa vectorialv.info Obtención de información básica de una capa vectorial

Tabla 2.1: Módulos que van a utilizarse en este capítulo

mientras que el segundo es una representación raster de un mapa de objetos (los núcleos urbanos). Portanto el espacio entre los nucleos no tiene, en este último mapa ningún valor; en GRASS se dice quetiene valor nulo (NULL).

Cuando encontremos valores nulos en una capa raster de objetos, significa que o no existe en esas celdil-las ningún objeto del tipo descrito en la capa raster. Cuando aparezcan en una capa representando unasuperficie significa falta de datos. En cualquier caso el valor nulo es, evidentemente, distinto de valorcero.

En GRASS las celdillas con valor nulo se pintan por convención de blanco, salvo que apliquemos laopción -o de d.rast. En este caso las celdillas con valor nulo no se pintaran y, si hubiese un mapa pintadoanteriormente, lo seguiremos viendo.

De este modo las sucesivas capas de información que se dibujan con la opción -o de d.rast se superpon-drán como si se tratara de una superposición de transparencias, en la que las celdillas con valor nulo setornan transparentes.

Vamos ahora a visualizar el mapa de usos del suelo:

30

Page 43: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 2.1: Ejemplo de superposición de capas raster. MDE y núcleos urbanos

:∼> d.rast usos Para visualizar su leyenda debemos abrir un nuevo monitor gráfico

:∼> d.mon start=x2

:∼> d.legend -c usos

la opción -c evita que en la leyenda se muestren los identificadores numéricos que se almacenan en lacapa raster y que codifican los distintos usos del suelo.

Uno de los problemas que ocasiona la visualización de leyendas es que el número de categorías puedeser muy elevado o muy pequeño para el tamaño de la pantalla. Para solventar este problema se puedellamar a d.legend con la opción lines=n donde n es el número de categorías que deberían entrar en lapantalla. Si el número de categorías reales es mayor que n, entonces sólo n categorías serán mostradas. Sies inferior, se situarán en la parte alta de la ventana gráfica dejando espacio para el resto de las n teóricascategorías.

Otro parámetro interesante para el módulo d.legend es at que permite definir en que posición, dentrodel monitor gráfico activo, se visualizará la leyenda. Este parámetro toma cuatro valores separados porcomas que indican la localización del extremo inferior, superior, izquierdo y derecho de la leyenda dentrodel monitor. Las unidades de estas posiciones se expresan en tantos por ciento de la altura y anchura totaldel monitor. Así la siguiente orden colocará la leyenda en la esquina superior izquierda del monitorocupando la mitad superior y un cuarto de la anchura de la pantalla.

31

Page 44: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 2.2: Visualización de la capa de usos del suelo y su leyenda

:∼> d.legend usos at=50,100,0,25

No hay que olvidar que GRASS es un sistema de Información Geográfica no un programa de cartografíaautomática por lo que en las salidas gráficas se prima la sencillez sacrificando la estética. La producciónde mapas para presentaciones o para su impresión en papel se deja a otros módulos específicos o a otrosprogramas como GMT.

Para borrar el monitor gráfico podemos utilizar la orden d.erase seguida de uno de los colores estándardde GRASS (black, white, blue, red, green, yellow, cyan, magenta, grey) o bien de una combinación RGBde la forma (R:G:B) con valores entre 0 y 255. La opción por defecto es white.

Al utilizar el módulo d.rast, pueden seleccionarse los rangos de valores que van a visualizarse medi-ante los parámetros catlist y vallist aplicables a capas raster que contienen numeros enteros y realesrespectivamente, tal como aparece en los siguientes ejemplos:

:∼> d.rast MDE vallist=100-200,400-500

:∼> d.rast usos catlist=1-3,5-6

2.3 Cambiando el punto de vista. Zoom, pan, cambio de región y más-caras

En el anterior capítulo, ya se vio como modificar la región de trabajo con el módulo g.region, ahora severá como hacerlo con otras herramientas como d.zoom, cuyo propósito debería ser evidente, o mediantela creación de máscaras.

32

Page 45: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

2.3.1 Hacer zoom en la región de trabajo: d.zoom

El módulo d.zoom permite manejar, mediante un menú de ratón relativamente sofisticado una her-ramienta de zoom con cinco posibilidades básicas:

1. Agrandar el zoom

2. Reducir el zoom

3. Hacer zoom sobre un rectángulo definido por el usuario en el monitor gráfico

4. Desplazar la región de trabajo centrándola en un nuevo punto

5. Volver al zoom anterior

Este módulo utiliza un menú de ratón, se trata de un tipo de menú muy característico de GRASS en elque las opciones se manejan en grupos de tres pinchando con uno de los tres botones del ratón sobre elmonitor gráfico1. Por desgracia, el uso de d.zoom y sus menús de ratón varían mucho de unas versionesa otras de GRASS, es posible que en tu versión sea diferente de cómo se utiliza aquí, en todo caso serábastante intuitivo.

Modo zoom (d.zoom)

Al ejecutar el programa sin opciones, el menú de ratón que aparece es:

Buttons:Left: 1. cornerMiddle: UnzoomRight: Quit

Si pulsamos el botón derecho el programa interpreta que se trata de la primera esquina de una ventana,nos indica las coordenadas del punto pinchado y pide una segunda esquina o bien que definamos denuevo la primera esquina y vuelve al menú inicial:

4199280(N) 635375(E)

Buttons:Left: 1. corner (reset)Middle: 2. cornerRight: Quit

Si en el menú inicial se pulsa el botón central (haremos un zoom hacia afuera).

La opción -p de d.zoom da acceso al modo pan que desplaza la región de trabajo centrándola en un puntoseleccionado por el usuario. Al ejecutar este módulo nos aparece un menú de ratón con las siguientesopciones:

1En Unix el botón central del ratón si se utiliza como tal, aunque en algunos casos se sitúa en el lateral izquierdo del ratón.En caso de que tu ratón sólo tenga dos botones existe l posibilidad de emular el central con una pulsación simultanea de losbotones derecho e izquierdo (esta posibilidad se activa en la configuración del sistema gráfico de linux)

33

Page 46: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Buttons:Left: PanRight: Quit

Si pulsamos el botón izquierdo situamos el centro de la región de trabajo y salimos con el botón derecho.

Para deshacer el último zoom realizado basta con ejecutar el módulo con la opción -r

:∼> d.zoom -r

La ejecución de d.zoom no sólo modifica los parámetros de visualización del monitor gráfico sino quetambién modifica la región de trabajo.

2.3.2 Máscaras

Es necesario distinguir entre región de trabajo (rectangular y definida por unos límites y una resolución)y área de trabajo2 como entidad geográfica en la que se lleva a cabo nuestro estudio y con límites irreg-ulares (un municipio, una provincia, una cuenca hidrográfica, etc.). La utilización de d.zoom y g.regionmodifican la región de trabajo pero podemos determinar con exactitud cual es nuestra área de trabajogenerando una máscara.

Una cuestión importante a recordar acerca de las máscaras es que no afectan a las capas vectoriales.

Una máscara se define en GRASS mediante una capa raster especial llamada MASK que contiene val-ores 1 en las celdillas que deben visualizarse/analizarse y valores nulos en las que no. El resto de losmódulos de GRASS saben que si existe una capa raster con ese nombre, deben centrarse en las celdillasespecificadas en ella. Pues bien, la capa MASK puede generarse en linea de comandos con el módulor.mapcalc. A continuación se presentan algunos ejemplos del uso de r.mapcalc para generar máscaras apartir del mapa de usos del suelo.

Lógicamente para definir una máscara a partir de valores almacenados en una capa raster necesitaremoshacer referencia a los códigos numéricos no a las etiquetas de texto asociadas. Para saber cual es lacorrespondencia entre ambos puede visualizarse la leyenda del mapa de usos:

:∼> d.legend usos

A la vista (figura 2.3) de dicha leyenda, si quisiésemos hacer una máscara para visualizar sólo las celdillasde vid la orden correcta sería:

:∼> r.mapcalc ’MASK=if(usos==7,1,null())’

Se utiliza la función if de r.mapcalc que toma tres argumentos separados por comas:

2Denominar área y región de trabajo al territorio de estudio y al rectángulo que lo enmarca respectivamente resulta enrealidad bastante arbitrario y quizás incorrecto. Sin embargo se ha adoptado este criterio por similitud con el uso del términoregion en GRASS

34

Page 47: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 2.3: Leyenda del mapa de usos del suelo

• Una condición que se evaluará para cada celdilla; en GRASS, al igual que en muchos otros progra-mas y lenguajes de programación, se distingue entre el igual de asignación (=) y el de comparación(==).

• El valor que tomará la correspondiente celdilla en la capa de salida si se cumple la condición, eneste caso 1.

• El valor que tomará la correspondiente celdilla en la capa de salida si no se cumple la condición,en este caso un valor nulo null().

Puedes probar a continuación a visualizar la capa de elevaciones, verás como sólo se representarán lasceldillas que contengan vid. Para eliminar la máscara basta con utilizar el módulo para eliminar capas deinformación (g.remove).

:∼> g.remove MASK

Hay que tener en cuenta que si se crea una nueva máscara sin eliminar la anterior ambas se superpondrány sólo quedarán activas las celdillas que cumplan con las condiciones definidas en ambas máscaras, asíla secuencia de órdenes:

r.mapcalc ’MASK=if(usos==7,1,null())’r.mapcalc ’MASK=if(usos==9,1,null())’d.rast MDE

35

Page 48: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

producirá una imagen en blanco ya que ninguna celdilla puede cumplir a la vez ambas condiciones.

Las condiciones definidas con la función if de r.mapcalc pueden ser todo lo complejas que se quiera,permitiendo así máxima flexibilidad en la creación de máscaras. Si se quiere definir una condición sobreun rango de valores se puede utilizar el operador y lógico (&&), por ejemplo para hacer una máscaraque incluya todas las zonas de bosque:

:∼> r.mapcalc ’MASK=if(usos>=11 && usos<=13,1,null())’

Si se quisiese introducir varios rangos de valores, habría que utilizar el operador o lógico (||). Por ejemplopara añadir las zonas de bosque-matorral a los bosques, la orden anterior debería modificarse así:

:∼>r.mapcalc ’MASK=if(usos>=11 && usos<=13 || usos==15,1,null())’

es decir usos debe estar entre 11 y 13 o ser igual a 15.

A la hora de introducir condiciones complejas con operadores && y || puede ser necesario introducirparéntesis, para ello se asimila && al producto y || a la suma y se sitúan los paréntesis igual que se haríaal escribir una ecuación.

Nada impide combinar condiciones sobre varias capas raster, así la siguiente orden creará una máscaracon las celdillas de bosque situadas en el municipio de Murcia:

:∼> r.mapcalc ’MASK=if(usos>=11 && usos<=13 && municipios==31,1,null())’

En la sección 7 se verá con más profundidad el módulo r.mapcalc.

Finalmente es necesario tener en cuenta que el uso de máscaras afecta sólo al trabajo (visualización,consulta, generación de nuevas capas con álgebra de mapas) con capas raster y no a las capas vectoriales.

2.3.3 Manipulación de paletas de color: r.colors

La visualización de una capa raster en una pantalla de ordenador requiere la conversión de los valores dela variable almacenada en la matriz de datos en colores. Para ello se requiere una descripción cuantitativadel color. La mayor parte de los sistemas de vídeo codifican los colores mediante el sistema RGB (Rojo,Verde, Azul); a cada uno de estos tres colores básicos se le asigna una intensidad que va de 0 a 255,de manera que el número de colores representables es de 2563 = 16777216 colores diferentes (los 16millones de colores que prometen los folletos de las tarjetas gráficas que en realidad son bastantes másde los que pueden apreciarse con la vista). Estos valores se almacenan en un fichero especial de colores

Las paletas de color se almacenan en el directorio colr del MAPSET correspondiente. Esto significa apriori que el usuario sólo puede cambiar los colores de los mapas situados en su MAPSET (ya que sólo setienen permisos de escritura en estos directorios). Sin embargo los colores de la presentación de una caparaster son algo bastante personal y, en todo caso, no es información fundamental que deba permanecersiempre constante.

Para permitir a los usuarios modificar la paleta de colores de mapas no presentes en su MAPSET se ideoel directorio colr2. Este se sitúa en el MAPSET del usuario, para que este pueda modificar su contenido,

36

Page 49: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

y contiene referencias a capas raster situadas en otros MAPSETS junto con la paleta de color que elusuario desea para ellos.

Por tanto para visualizar una capa raster debe establecerse una correspondencia entre valores e intensi-dades en estos tres colores. Esta correspondencia puede manipularse con los módulos d.colors y r.colors

Puede cambiarse globalmente una paleta con el comando r.colors que permite asignar a un mapa una delas siguientes opciones:

• aspect: paleta de niveles de gris optimizada para representar orientaciones

• aspectcolr: paleta de colores del arcoiris optimizada para representar orientaciones

• bcyr: de azul a rojo pasando por cian y amarillo

• bgyr: de azul a rojo pasando por verde y amarillo

• byg: de azul a verde pasando por amarillo

• byr: de azul a rojo pasando por amarillo

• celsius: de azul a rojo para temperatura en grados celsius

• curvature: para curvatura del terreno

• differences: paleta apropiada para diferencias

• elevation: maps relative ranges of raster values to elevation color ramp

• etopo2: paleta para batimetría/topografía ETOPO2

• evi: paleta para índice de vegetación mejorado

• grey: niveles de gris

• grey.eq: niveles de gris con histograma ecualizado

• grey.log: niveles de gris con transformación logaritmica del histograma

• grey1.0: niveles de gris en el intervalo 0.0-1.0

• grey255: niveles de gris en el intervalo 0-255

• gyr: verde - amarillo - rojo

• ndvi: Indice normalizado de vegetación

• population: paleta para valores de población

• precipitation: paleta para valores de precipitación (0 - 2000mm)

• rainbow: paleta basada en la secuencia de colores del arcoíris

• ramp: paleta basada en rampas de color

37

Page 50: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• ryb: de rojo a azul pasando por amarillo

• ryg: de rojo a verde pasando por amarillo

• random: paleta aleatoria, útil para variables cualitativas con pocos niveles)

• slope: paleta para valores de pendiente entre 0 y 90

• srtm: paleta de color para la misión topográfica del radar Shuttle

• terrain: paleta para valores globales de elevación -11000 a +8850m

• wave: repite los mismos colores varias veces, útil para variables cuantitativas con un rango muyamplio

• rules: crear los colores interactivamente o mediante un fichero de texto.)

Se trata de una serie de paletas predefinidas excepto la última opción que nos permite definir una paleta.Por ejemplo, si simplemente tecleamos:

:∼> r.colors map=mapa_raster color=paleta

sustituyendo paleta por alguna de las lista anteriormente y mapa_raster por una capa raster disponible,habremos cambiado la paleta de color. Para ver el resultado será necesario dar la orden para visualizar lacapa modificada:

:∼> d.rast mapa_raster

La última de las paletas anteriormente listadas (rules) permite introducir a mano la definición de la paletade colores, sin posibilidad de corregir si nos equivocamos y teniendo que empezar de cero si queremosprobar otra combinación de colores. Por ello es preferible crear un fichero de texto con las reglas (congedit por ejemplo) y redirigir este fichero al comando r.colors. Por ejemplo:

:∼>gedit MDE.color &3

:∼> r.colors map=MDE color=rules<MDE.color

Hay diferentes maneras de escribir un fichero de reglas de asignación de colores. El caso más simple esel que aparece en la tabla 9.2.2. Sería una paleta para una variable cualitativa, cada linea define el colorpara uno de los valores.

Se trata básicamente de 4 columnas, la primera hace referencia a los valores de la variable contenida enla capa raster, la segunda a la intensidad del rojo (0-255), la tercera a la intensidad del verde (0-255) y lacuarta a la intensidad del azul (0-255).

3este signo permite que, al ejecutar un programa, no se bloquee el terminal de texto y puedan seguir introduciéndose órdenes

38

Page 51: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

1 0 0 02 0 0 03 100 100 1004 255 200 2005 255 255 06 0 255 2557 255 0 2558 255 0 09 155 255 15510 255 155 011 0 100 012 0 255 013 0 175 014 150 20 2015 200 150 2016 200 200 20017 0 155 25518 0 0 255

Tabla 2.2: Paleta de color de la capa de usos del suelo

0 255 0 0500 255 0 01000 200 50 01500 150 100 02000 100 150 02500 50 200 0

Tabla 2.3: Paleta de color para representar la capa de elevaciones

Si la capa raster que se quiere visualizar representa una variable cuantitativa, pueden asignarse coloresa algunos valores y el programa interpolará los valores intermedios. La tabla 2.3 muestra un ejemplo parala capa de elevaciones.

Si se quiera hacer una representación por coropletas habría que repetir el mismo color para los valoresmínimo y máximo de cada intervalo. Por ejemplo la tabla 2.4 muestra un ejemplo de paleta creada pararepresentar la capa de elevaciones mediante coropletas.

2.4 Consultas a capas raster

Además del almacenamiento y visualización de información espacial, uno de los objetivos fundamentalesde un SIG es la consulta de los valores presentes en las capas de información manejadas, así como laextracción de informes y estadísticas relativas a las mismas. Los módulos encargados de estas tareaspueden clasificarse por un lado en función del tipo de información (raster, o vectorial) que contiene la

39

Page 52: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

0 255 0 0500 255 0 0501 200 50 01000 200 50 01001 150 100 01500 150 100 01501 100 150 02000 100 150 02001 50 200 02500 50 200 0

Tabla 2.4: Paleta de color para representar con coropletas la capa de elevaciones

capa consultada y por otro en función del nivel de detalle de la información que proporcionan:

• Módulos que proporcionan información global acerca del mapa, de sus propiedades geométricas(filas, columnas, coordenadas de los bordes y resolución) y de sus valores (r.info);

• Módulos que proporcionan estadísticas sobre la variable representada en una capa (r.stats, r.report,r.univar, r.covar);

• Módulos que permiten, pinchando sobre el mapa, conocer el valor de una o varias variables enposiciones concretas del espacio o la etiqueta asociada a determinados elementos en un mapavectorial (d.what.rast, r.what, );

2.4.1 Módulos para obtener información global

El módulo r.info proporciona información general sobre capas raster, se trata de un nivel muy básico demetainformación:

:∼>r.info MDE

La figura 2.4 muestra un ejemplo de la salida de este programa.

2.4.2 Módulos para la obtención de estadísticas descriptivas

El contenido de una capa raster puede ser:

• Un conjunto de objetos (por ejemplo núcleos urbanos)

• Una variable cualitativa (por ejemplo usos del suelo)

• Una variable cuantitativa, una superficie (por ejemplo elevaciones)

40

Page 53: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

+----------------------------------------------------------------------------+| Layer: MDE Date: Thu Mar 22 09:13:05 2007 || Mapset: PERMANENT Login of Creator: alonso || Location: CursoGRASS || DataBase: /data2 || Title: ( MDE ) || Timestamp: none ||----------------------------------------------------------------------------|| || Type of Map: cell Number of Categories: 2045 || Data Type: FCELL || Rows: 7696 || Columns: 7504 || Total Cells: 57750784 || Projection: UTM (zone 30) || N: 4291340 S: 4137420 Res: 20 || E: 707700 W: 557620 Res: 20 || Range of data: min = 0.000000 max = 2044.913940 || || Data Description: || generated by r.mapcalc || || Comments: || if(MDE_sub >= 0, MDE_sub, null()) || |+----------------------------------------------------------------------------+

Figura 2.4: Salida del módulo r.info

41

Page 54: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

En los dos primeros casos, la obtención de estadísticos básicos puede limitarse al área ocupada por cadaobjeto o cada valor de la variable cualitativa. En el último caso podemos aplicar los estadísticos clásicosde la estadística multivariante (media, desviación típica, etc.)

El comando básico de cálculo de estadísticos es r.stats, extrae la frecuencia en celdillas de cada uno delos valores de la variable representada por una capa raster. Sin embargo sus resultados se presentan deforma bastante espartana por lo que su no suele utilizarse directamente y si utilizando otros módulosintermedios que extraen la información de r.stats y la presentan de forma más adecuada. De este modoel uso de r.stats suele reservarse para la programación de scripts.

Uno de estos módulos que producen una salida más agradable es r.report. Permite obtener el área ocu-pada por las diferentes categorías en un mapa o por diferentes combinaciones de categorías; puedenseleccionarse diferentes unidades para medir las áreas.

:∼> r.report usos units=k

Nos dará las áreas ocupadas por diferentes usos del suelo en kilómetros cuadrados. Las unidades disponiblesson: millas cuadradas (mi), metros (m), kilometros (k), acres (a), hectáreas (h), celdillas (c) y porcentaje(p). En la figura 2.5 aparece la salida de esta orden en el monitor de texto.

Para incluir varios mapas en un informe, la sintaxis es:

:∼> r.report map=mapa_raster1,mapa_raster2,...,mapa_rastern units=unidades

Hay que tener en cuenta que sólo se contabilizarán aquellas celdillas que estén incluidas en la región detrabajo y en la máscara activa.

El comando r.univar realiza un cálculo de estadísticos básicos sobre la variable cuantitativa almacenadaen una capa raster. Los estadísticos calculados son:

• Number of cells, número total de celdillas (N )

• Minimum, valor mínimo

• Maximum, valor máximo

• Range, rango de valores= máximo - mínimo

• Arithmetic Mean, media aritmética (m)

• Variance, varianza (s2)

• Standard deviation, desviación típica (s =√s2)

• Variation coefficient, coeficiente de variación (V = 100xs/m)

Un ejemplo típico de la salida de r.univar podría ser:

42

Page 55: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

+-----------------------------------------------------------------------------+| RASTER MAP CATEGORY REPORT ||LOCATION: CursoGRASS Sat Jun 20 23:48:23 2009||-----------------------------------------------------------------------------|| north: 4318040 east: 710000 ||REGION south: 4123620 west: 520000 || res: 24.99935708 res: 25 ||-----------------------------------------------------------------------------||MASK:none ||-----------------------------------------------------------------------------||MAP: Reclass of usos_corine in PERMANENT (usos in PERMANENT) ||-----------------------------------------------------------------------------|| Category Information | square || #|description |kilometers||-----------------------------------------------------------------------------|| 1|Urbano e industrial. . . . . . . . . . . . . . . . . . . . . . | 256.334|| 2|Infraestructuras de comunicaciones . . . . . . . . . . . . . . | 49.171|| 3|Suelos alterados . . . . . . . . . . . . . . . . . . . . . . . | 55.245|| 4|Equipamientos. . . . . . . . . . . . . . . . . . . . . . . . . | 5.187|| 5|Secano . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1178.946|| 6|Regadio. . . . . . . . . . . . . . . . . . . . . . . . . . . . | 998.064|| 7|Vid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 374.448|| 8|Frutales . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1628.564|| 9|Olivar . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 49.518||10|Cultivos complejos y dispersos . . . . . . . . . . . . . . . . | 2199.560||11|Bosque caducifolio . . . . . . . . . . . . . . . . . . . . . . | 22.473||12|Bosque de coniferas. . . . . . . . . . . . . . . . . . . . . . | 1088.754||13|Bosque mixto . . . . . . . . . . . . . . . . . . . . . . . . . | 47.068||14|Matorral . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1715.291||15|Bosque-matorral. . . . . . . . . . . . . . . . . . . . . . . . | 732.019||16|Suelos desnudos. . . . . . . . . . . . . . . . . . . . . . . . | 867.611||17|Humedales. . . . . . . . . . . . . . . . . . . . . . . . . . . | 14.583||18|Rios y embalses. . . . . . . . . . . . . . . . . . . . . . . . | 654.191|| *|no data. . . . . . . . . . . . . . . . . . . . . . . . . . . . |25,002.775||-----------------------------------------------------------------------------||TOTAL |36,939.800|+-----------------------------------------------------------------------------+

Figura 2.5: Salida del módulo r.report

43

Page 56: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Number of cells: 1405744Minimum: 10Maximum: 255Range: 245Arithmetic Mean: 94.0227Variance: 527.623Standarddeviation: 22.97Variation coefficient: 24.4303 %

La opción -e de r.univar permite incluir percentiles en esta salida. Los percentiles en concreto que sevan a incluir se pasan con el parámetro percentile.

Finalmente el módulo r.covar permite obtener la matriz de varianzas-covarianzas o de correlacionescorrespondiente a un conjunto de mapas raster:

:∼> r.covar mapa1,mapa2,...

devolverá la matriz de varianzas covarianzas y

:∼> r.covar -r mapa1,mapa2,...

la matriz de correlaciones.

Hay que tener en cuenta que la presencia de una máscara afecta al resultado de todos estos módulos yaque sólo intervendrán en los cálculos aquellas celdillas que estén incluidas en la máscara.

2.4.3 Obteniendo información puntual sobre el contenido de los mapas

Una vez visualizados los mapas con d.rast sobre un monitor gráfico abierto con d.mon, resulta in-teresante saber algo sobre el tipo de información que contienen. Para ello vamos a utilizar diferentescomandos.

El más simple es d.where que nos indica las coordenadas de los diferentes puntos donde pinchemosdentro del monitor gráfico. Al ejecutar el comando aparece un menú de ratón que nos indica las diferentesopciones.

:∼>d.where

Buttons:Left: where am iMiddle: draw to/from hereRight: quit this

EAST: NORTH:

44

Page 57: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

a partir de aquí cada vez que pinchemos en un punto del monitor gráfico con el botón izquierdo nosdevolverá las coordenadas X e Y en las columnas EAST y NORTH respectivamente.

Sin embargo esta orden no nos da información sobre el contenido de los mapas. Para obtener esta infor-mación tenemos el comando d.what.rast:

:∼>d.what.rast map=mapa_raster

ButtonsLeft: what’s hereRight: quit

Pinchando con el botón derecho del ratón nos dará, además de las coordenadas del punto pinchado elvalor de la variable contenida en mapa_raster

Si este módulo se utiliza sin argumentos devolverá los datos del mapa representado en el monitor gráfico;se le puede añadir map=seguido de varios mapas y obtendremos información de todos ellos.

El módulo r.what permite consultar una o varias capas raster en puntos concretos que se pasan como unpar de coordenadas.

:∼> r.what MDE east_north=644422,4262939,637240,4243141,658143,4230986,656853,4258519

Una buena forma de obtener un muestreo aleatorio rápido sobre una capa raster sería la siguiente orden:

:∼> d.where|r.what MDE>muestreo.txt

El módulo d.where permitirá pinchar en una serie de puntos al azar (o no) del mapa, al pulsar el botónderecho del ratón los pares de coordenadas pasan a r.what que obtiene los valores de elevación en estospuntos. La tabla resultante se escribe en el fichero muestreo.txt.

2.5 Medición de objetos sobre el monitor gráfico: d.measure

El comando d.measure permite medir longitudes y áreas de objetos digitalizados en el monitor gráfico.Cuando se ejecuta, aparece el siguiente menú de ratón:

Buttons:Left: where am iMiddle: set FIRST vertexRight: quit this

El botón izquierdo nos dirá las coordenadas del punto en que pinchamos, con el derecho salimos delprograma, y el central determina el primer vértice y entra en un nuevo menú:

45

Page 58: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Left: where am iMiddle: set NEXT vertexRight: FINISH

Pinchando con el botón central iremos definiendo una linea y un polígono interior a la misma. Cadanuevo vértice significa la adición de un nuevo tramo y el aumento de la longitud de la linea, tal como vamostrando el programa

LEN: 26.45 metersLEN: 56.97 metersLEN: 93.97 metersLEN: 127.69 metersLEN: 162.43 metersLEN: 186.48 metersLEN: 199.90 meters

Cuando finalmente pinchemos con el botón derecho (no es necesario cerrar explícitamente el polígono, elprograma asume la existencia de una linea de cierre desde el punto final al inicial) aparecerán la longitudy el área del polígono en diferentes unidades junto a la posibilidad de volver a definir otro polígono osalir del programa.

Buttons:Left: DO ANOTHERMiddle:Right: quit this

LEN: 199.90 metersAREA: 0.36 hectares0.0014 square miles3644.32 square meters

2.6 Visualizar información vectorial: d.vect

La gran potencia que se le ha dado a la información vectorial en GRASS 6 ha obligado ha modificar elmódulo d.vect al que se le han añadido gran cantidad de parámetros para permitirle visualizar objetoscon toda la flexibilidad que se requiere. En consecuencia se ha convertido en uno de los módulos deGRASS con mayor flexibilidad lo que se traduce en un mayor número de opciones y parámetros.

Al mismo tiempo se han añadido módulos para hacer otro tipo de representaciones vectoriales comod.vect thematic o d.vect chart.

Las opciones por defecto de d.vect son bastante pobres, para comprobarlo basta con representar losmapas municipios, carreteras y vertices50 para ver sus efectos sobre mapas de polígonos, lineas y puntos.

:∼>d.vect municipios

:∼>d.vect carreteras

46

Page 59: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼>d.vect vertices50

A continuación se presentan algunos de ellos, puedes descubrir más utlizando el módulo g.manual o laopción −−help aplicados a d.vect.

2.6.1 Parametros básicos

• type=texto[,texto,...]Elemento geométrico que va a representarseOpciones:

– point, puntos

– line, lineas

– boundary, perímetro de los polígonos

– centroid, centroide de los polígonos

– area, interior de los polígonos

Por defecto se representan todos.

• display=texto[,texto,...]Propiedad que va a representarseOpciones:

– shape, la geometría

– cat, los identificadores de los objetos

– topo, topología

– dir, dirección de la linea

– attr, valores de una de las columnas almacenadas en la tabla enlazada, la columna se es-pecifica con el parámetro attrcol

– zcoor, coordenada z de los objetos (si la tienen)

La Opción por defecto es shape

2.6.2 Parámetros para la selección de que entidades van a visualizarse

• cats=rangoSelecciona los objetos que se visualizarán por su identificadorEjemplo: 1,3,7-9,13

• where=consulta_sqlSelecciona los elementos que se visualizarán a partir de una consulta SQLEjemplo: secano < 1000 and poblacion >= 10000

47

Page 60: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

2.6.3 Parámetros para la visualización de lineas

• width=enteroAnchura de las lineasOpción por defecto: 0

• wcolumn=textoColumna que contiene las anchuras para representar las lineas

• wscale=realFactor de escala de wcolumnOpción por defecto: 1

• color=textoColor de la lineaOpción por defecto: black

2.6.4 Parámetros para la visualización de polígonos

• fcolor=textoColor del polígonoOpción por defecto: 200:200:200

2.6.5 Parámetros para la visualización de puntos o centroides

• icon=textoSímbolo para puntos y centroides.Opciones: basic/arrow1, basic/cross2, basic/x, basic/diamond, basic/box, basic/point, basic/arrow2,basic/pushpin, basic/marker, basic/star, basic/cross1, basic/circle, basic/triangle, basic/octagon, demo/smrk,demo/muchomurka, extra/half-circle, extra/airport, extra/n_arrow1, extra/4pt_star, extra/offbox_ne,extra/target, extra/offbox_nw, extra/pentagon, extra/offbox_se, extra/adcp, extra/bridge, extra/dive_flag,extra/alpha_flag, extra/compass, extra/fancy_compass, extra/offbox_sw.

La opción por defecto es basic/x

Estas opciones corresponden a ficheros en los que se definen los iconos, el usuario puede añadirmás.

• size=enteroTamaño del iconoOpción por defecto: 5

2.6.6 Parámetros para la visualización de etiquetas

• lcolor=textoColor de las etiquetas.Opción por defecto: red

48

Page 61: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• lsize=enteroTamaño de las etiquetas (pixels).Opción por defecto: 8

• font=textoNombre de la fuente para la visualización de etiquetas.

Ejemplos

Podemos utilizar el parámetro type para evitar que aparezcan los centroides de los límites municipales ylos parámetros color y fcolor para determinar, respectivamente, el color de las lineas y el relleno de lospolígonos.

:∼> d.vect municipios type=area color=blue fcolor=255:155:0

Con el parámetro where podemos introducir sentencias SQL para determinar que polígonos van a repre-sentarse:

:∼> d.vect municipios type=area color=blue fcolor=255:0:0where=’cod_comarc=1’

también podemos determinar que polígonos se incluyen o no a partir de sus categorías con el parámetrocats

:∼> d.vect municipios type=area color=blue fcolor=255:0:255cats=1-5,11-15

En el caso de un mapa de lineas podemos establecer tanto el color como la anchura, por ejmplo:

:∼> d.vect carreteras color=blue width=2 where="tipo=’AUTOPISTA’\or tipo=’AUTOPISTA_AUTONOMICA_TUNEL’ ortipo=’AUTOVIA_AUTONOMICA’"

En un mapa de puntos podremos modificar tanto el icono utilizado como el tamaño del mismo y el colordel trazo y el relleno:

:∼> d.vect vertices50 icon=extra/n_arrow1 size=10 color=black\fcolor=green

Para dibujar etiquetas sobre el mapa es necesario podemos utilizar las categorías de los objetos (dis-play=cat) o alguna columna de la tabla enlazada (display=attr, el nombre de la columna se le pasa al

49

Page 62: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

parámetro attrcol). Las características de las etiquetas pintadas se manejan con los parámetros lcolor,bgcolor, bcolor, lsize, font, xref e yref.

:∼> d.vect vertices50 display=cat lsize=10 lcolor=black

:∼> d.vect municipios type=centroid display=attr attrcol=nombre \lsize=10 lcolor=black font=times

2.7 d.vect.thematic

Este módulo permite la creación de mapas temáticos a partir cualquier tipo de capa vectorial utilizandolos valores almacenados en la tabla de atributos enlazada para diseñar una paleta de colores, establecerlos tamaños de los iconos o los anchos de linea.

Se dispone de varios criterios para establecer que objetos se incluirán en cada uno de los rangos de coloro tamaño creados:

• Intervalos regulares

• Intervalos de desviación típica

• Cuartiles

• Intervalos definidos por el usuario

El usuario puede seleccionar el esquema de colores utilizado a partir de una serie de modelos o definirloa partir de un color inicial y un color final.

La leyenda del mapa puede enviarse a otro monitor gráfico utilizando la opción -l y el parámetromonitor para especificar el monitor gráfico al que se envía.

Este módulo permite crear un fichero que contendrá las instrucciones para que el módulo ps.map genereel mapa temático en formato postscript. El parámetros psmap permite introducir el nombre del fichero.Si se ha incluido la opción -l se creará también un fichero para la leyenda. Este fichero de leyenda puedemodificarse fácilmente para sustituir los textos por defecto, en inglés, por los textos que deseemos.

El módulo ps.map asume que el fichero de instrucciones tiene codificación latin1, si tu sistema estáconfigurado en utf-8 deberás modificar la codificación del fichero con programas como iconv o recode.

:∼> d.vect.thematic -l municipios type=area column=poblacion \themecalc=quartiles startcolor=255:255:0 endcolor=0:255:255 \colorscheme=custom_gradient monitor=x2 psmap=pob

:∼> iconv pob_legend.psmap -f utf8 -t latin1>pob_legend2.psmap

50

Page 63: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> ps.map pob_legend2.psmap output=pob_legend.ps

A su vez este fichero postscript puede convertirse a cualquier formato gráfico con el programa convert

convert pob_legend.ps pob_legend.jpg

Parametros básicos

• map=texto Mapa de entrada

• type=texto Elemento geométrico que va a representarse Opciones: point,line,boundary,centroid,area,faceOpción por defecto: point,line,boundary,centroid,area,face

• column=texto Columna con la variable que se va a visualizar (debe ser numérica)

• themetype=texto Tipo de dato Opciones: graduated_colors,graduated_points,graduated_lines Op-ción por defecto: graduated_colors

• themecalc=texto Método de creación de intervalos Opciones: interval,std_deviation,quartiles,custom_breaksOpción por defecto: interval

• breakpoints=texto Puntos de corte para la opción custom_breaks del parámetro anterior. Losvalores se introducen separados por espacios y, el conjunto, entrecomillado (breakpoints=”0 10 2030 ...”)

• layer=integer Layer que se visualizará (-1 significa que se visualizarán todas las layer)

Opción por defecto: 1

• icon=texto Iconos para los datos puntuales Opciones: basic/box,basic/circle,basic/cross2,basic/diamond,basic/star,basic/cross1,basic/xOpción por defecto: basic/circle

• size=float Tamaño del icono para los datos puntuales Opción por defecto: 5

• maxsize=float Tamaño máximo de icono para los datos puntuales Opción por defecto: 20

• nint=integer Número de clases Opción por defecto: 4

• colorscheme=texto

Esquema de colores que generará diversos colores graduados para representar los polígonos. Si lacapa contiene puntos o lineas debe utilizarse ’single_color’

Opciones: blue-red,red-blue,green-red,red-green,blue-green,green-blue,cyan-yellow,yellow-cyan,custom_gradient,single_color

La opción por defecto: blue-red

• pointcolor=texto Color para dibujar puntos de una capa de puntos, pueden ser colores estándarde GRASS o colores codificados como R:G:B. El parámetro colorscheme debe tener el valor’single_color’.

La opción por defecto es 255:0:0

51

Page 64: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• linecolor=texto Color para dibujar puntos de una capa de puntos, pueden ser colores estándarde GRASS o colores codificados como R:G:B. El parámetro colorscheme debe tener el valor’single_color’.

La opción por defecto es 0:0:0

• startcolor=texto Primer color para crear un gradiente. Debe expresarse como R:G:B

La opción por defecto: 255:0:0

• endcolor=texto Último color para crear un gradiente. Debe expresarse como R:G:B

La opción por defecto: 0:0:255

• monitor=texto Selecionar el monitor donde se pintará la leyenda

Opciones: x0,x1,x2,x3,x4,x5,x6,none

La opción por defecto: x1

• where=texto Selecciona los elementos que se visualizarán a partir de una consulta SQL

• psmap=texto Nombre del fichero que contendrá las instrucciones para que el módulo ps.mappueda generar ficheros postscript del mapa temático y su leyenda.

2.8 d.vect.chart

Este módulo genera histogramas o gráficos de tarta que se sitúan sobre el monitor gráfico en puntosdefinidos en una capa vectorial según los siguientes criterios:

• Si la capa vectorial es de puntos, en la posición de cada punto,

• Si la capa vectorial es de lineas, en el centro de cada linea,

• Si la capa vectorial es de polígonos, sobre los centroides de estos.

2.8.1 Parámetros

• map=name Mapa de entrada

• type=texto[,texto,...] Elemento geométrico que va a representarse

Opciones: point,line,boundary,centroid,area,face

La opción por defecto es : point,line,boundary,centroid,area,face

• layer=entero Número de layer (-1 significa que se mostrarán todas las layer).

Opción por defecto: 1

• ctype=texto, tipo de gráficoOpciones: pie,barOpción por defecto: pie

52

Page 65: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• columns=texto[,texto,...] Columnas de la tabla de atributos que contienen los datos que van arepresentarse

• sizecol=texto Columna para los tamaños de los gráficos de tarta

• size=integer Tamaño del gráfico (diámetro para las tartas y anchura total para los gráficos debarras)

La opción por defecto es 40

• scale=float Escala para el tamaño

La opción por defecto es 1

• ocolor=texto

Opción por defecto: black

• colors=texto[,texto,...] Colores para rellenar los gráficos

• max_ref=float[,float,...] Valor máximo utilizado como referencia de los gráficos de barras

2.9 Consulta de mapas vectoriales

Al igual que en el caso de las capas raster, puede obtenerse información global sobre una capa vectorialcon el módulo v.info; información acerca de los distintos valores de la tabla de atributos con db.select queactúa como cliente de bases de datos enviando consultas SQL al servidor de bases de datos; informacióngeométrica (área, perímetros coordenadas) de los objetos de una capa con v.report y finalmente podemospinchar sobre un objeto en el monitor gráfico y ver los valores asociados en la tabla de atributos cond.what.vect.

Otros módulos de obtención de información acerca de una capa vectorial que se verán son v.what,v.what.vect y v.category.

2.9.1 v.info

Si se ejecuta sin opciones:

:∼> v.info municipios

devolverá información básica sobre el bounding box de la capa, la topología y la ubicación de la capa enla estructura de directorios. Esta información se presenta formateada.

Sin embargo se le pueden añadir opciones para obtener diferentes tipos de datos sobre la capa y que estosse presenten en forma más compacta:

• v.info -g municipios, devuelve la bounding box de la capa,

• v.info -c municipios, devuelve los nombres y tipo de las columnas en la tabla de atributosenlazada,

53

Page 66: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• v.info -t municipios, devuelve el tipo de objetos y su número que aparecen en la capa.

• v.info -h municipios, devuelve un histórico de la capa.

La cantidad de información accesible mediante opciones es mayor que la que proporciona v.info en suversión formateada.

2.9.2 v.report

Este módulo devuelve el área, perímetro o coordenadas de los objetos. El tipo de dato que se requiere sele indica con el parámetro option cuyas opciones son area, length y coor.

La unidad de medida se selecciona con el parámetro units que admite los mismos valores que r.report

Además de la información geométrica, v.report devuelve todos los datos temáticos.

Por ejemplo:

:∼> v.report municipios option=area, units=k

devolverá el área de los municipios en kilómetros cuadrados

2.9.3 v.univar.sh

Calcula estadísticos (mínimo, máximo, rango, media, desviación típica, varianza, coeficiente de variación,cuartiles, mediana y percentil 90) para una columna de una tabla de atributos.

:∼> v.univar.sh -e column=poblacion table=municipios3

2.9.4 db.select

Lanza una consulta SQL al servidor de bases de datos y muestra los resultados. La forma más sencillade utilizarlo es:

:∼> db.select sql="select * from municipios"

Si la sentencia sql está en un fichero entonces la orden sería:

:∼> db.select input=sentencia.sql

54

Page 67: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

2.9.5 d.what.vect

Permite consultar un mapa vectorial de forma interactiva pinchando con el ratón en cualquier posiciónen el monitor gráfico activo.

La ejecución de este módulo activa el ratón y espera que el usuario pulse el botón izquierdo del ratónsobre el punto que va a ser consultado dentro del monitor gráfico activo.

Los resultados se muestran por defecto en una ventana gráfica salvo que se indique lo contrario con laopción -x en cuyo caso la salida se envía al terminal de texto.

Las opciones básicas son:

• -1 Sólo obtiene información de primer punto pinchado y después sale del módulo

• -t La salida se obtiene en el terminal de texto en lugar de en una ventana

• -d Mostrar información topológica (útil en depuración).

• -f El objeto seleccionado se resalta momentáneamente en otro color (lento).

• -e Modo edición, permite modificar directamente los valores de la tabla de atributos.

El único parámetro de este módulo es la capa o capas vectoriales que se consultarán, el valor por defectoes la capa (o capas) vectorial que haya pintada en el monitor gráfico.

La figura 2.6 muestra los resultados de d.what.vect sin y con la opción -e.

Ejemplo:

A continuación se muestra un ejemplo de sesión con d.what.vect. No es necesario que el usuario visual-ize un mapa vectorial para consultarlo pero facilita la orientación.

:∼> d.vect carreteras

:∼> d.what.vect map=carreteras,municipios

Tras dar esta orden, el usuario debe mover el ratón al punto deseado en la capa de carreteras y pulsarel botón izquierdo del ratón para consultar los valores de los objetos seleccionados en las tablas decategorías enlazadas a los mapas carreteras y municipios.

La consulta puede repetirse las veces que sea necesario utilizando el botón izquierdo. Con el botón centralpuede modificarse el color utilizado para resaltar el objeto con la opción -f. El botón de la derecha seutiliza para salir del programa.

55

Page 68: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 2.6: Resultados de d.what.vect

56

Page 69: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

2.9.6 v.what y v.what.vect

Si se quiere muestrear sobre una capa vectorial en coordenadas concretas puede utilizarse v.what:

:∼> v.what municipios coordinates=675000,4183359

Para pasar varias coordenadas es preferible guardarlas en un fichero de texto y pasarlo a v.what medianteuna tubería:

:∼> cat coordenadas.txt|v.what municipios

La salida de texto de v.what resulta incómoda de procesar, especialmente si se intentan muestrear muchospuntos, en estos casos es preferible utilizar v.what.vect que permite rellenar una columna de la tabla deatributos de un vectorial de puntos con los valores de otra columna situada en la tabla de atributos de unacapa vectorial diferente (normalmente de polígonos).

En el siguiente ejemplo partimos de un mapa de puntos mis_puntos al que queremos añadir unacolumna con la población del municipio donde se encuentra el punto:

:∼> v.db.addcol mis_puntos column="poblacion int"

:∼> v.what.vect mis_puntos column=poblacion qvector=municipios qcolumn=poblacion

La primera orden añade a la tabla de atributos de mis_puntos una columna llamada poblacion quecontendrá valores enteros.

Los parámetros qvector y qcolumn hacen referencia a la capa vectorial muestreada y los parámetrosvector y column a la capa muestreadora.

2.9.7 v.category

Finalmente el módulo v.category con la opción report permite obtener un resumen de los identifi-cadores utilizados en cada tipo de objeto de una capa:

v.category municipios option=report

Proporciona el siguiente resultado:

Layer / table: 1 / public.municipios3type count min maxpoint 0 0 0line 0 0 0boundary 56 46 98

57

Page 70: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

centroid 54 1 99area 0 0 0all 110 1 99

2.10 Gestión avanzada de monitores

2.10.1 d.save

El módulo d.save permite obtener un listado de todas las órdenes necesarias para obtener la repre-sentación que aparece en el monitor gráfico activo. Puede guardarse en un fichero sin más que utilizaruna redirección:

:∼>d.save>mi_vista.sh

Posteriormente podemos recuperar esta vista ejecutando el fichero creado:

:∼>sh mi_vista.sh

2.10.2 d.mvmon

El módulo d.mvmon permite copiar o mover toda la vista presente en un monitor gráfico a otro. Pordefecto se asume que el monitor de origen es el monitor gráfico activo. La siguiente orden copia la vistaque aparece en x1 a x2.

:∼>d.mvmon from=x1 to=x2

Este módulo permite utilizar las siguiente opciones:

• -c Borrar el monitor tras copiar el contenido

• -s Mantener el monitor de origen como monitor activo (por defecto el monitor de destino pasaa ser el activo)

• -k Cierra el monitor de origen

2.10.3 Crear un fichero gráfico a partir del contenido de un monitor

Uno de los problemas que tiene la visualización de información espacial en la pantalla de un ordenadores que, normalmente, las capas visualizadas tienen mayor nivel de detalle del que la pantalla nos permitemanejar. Para visualizar una capa, o combinación de capas, completa y a su máxima resolución seránecesario generar un fichero gráfico. Dicho fichero gráfico podrá también utilizarse para obtener unasalida impresa.

58

Page 71: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

El módulo d.out.file nos permite realizar esta operación seleccionando el formato del fichero de salida(png, ppm, tif, jpg, bmp, ps, eps, svg o pdf) utilizando el parámetro format.

El parámetro size nos permite seleccionar el ancho y alto del fichero que se creará. Podemos automa-tizar la utilización del número de filas y columnas de la región como alto y ancho con el siguiente par deórdenes:

:∼> eval ‘g.region -g‘

:∼> d.out.save output=mi_mapa format=PNG size=cols,rows

la primera orden ejecuta la salida de g.region con lo que se da valor a las variables cols y rows.

Si la salida se hace a un fichero postscript es necesario determinar el tamaño del papel (parámetro papersiendo las opciones a4, a3, a2, a1, a0, us-letter, us-legal o us-tabloid. La opción por defecto es a4.

Otros parámetros de interés son los parámetros son compression que determina el grado de compresióndel fichero PNG que oscilará entre 0 (sin compresión) y 9 (máxima), la opción por defecto es 9; y qualityque es la compresión del formato jpg que oscila entre 10 (mínima) y 100 (máxima) siendo 75 la opciónpor defecto.

En realidad d.out.file utiliza un fichero PNG intermedio (para crear ficheros de dibujo raster) o Postscript(para los de dibujo vectorial) utilizando posteriormente herramientas de conversión.

59

Page 72: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

60

Page 73: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 3

Gestión de la base de datos

En este capítulo se verán algunos módulos de GRASS destinados al manejo (copiar, renombrar, borrar)de capas de información espacial, la importación-exportación de datos y la transformación de formatovectorial a raster y viceversa.

La importación y exportación de información espacial con GRASS es uno de los aspectos que más se habeneficiado de la incorporación de desarrollos externos al programa, en este caso de las librerías GDAL(para información raster) y OGR (para información vectorial). Esto ha supuesto el abandono de diversaslineas de desarrollo de importación-exportación de formatos específicos.

3.1 Objetivos

1. Estudiar las variables de entorno de GRASS

2. Analizar el modo en que se realiza el enlace entre capas vectoriales y tablas de atributos

3. Estudiar los módulos que permiten borrar, copiar o mover capas entre MAPSETS así como MAPSETScompletos

4. Estudiar los módulos que permiten transformar información espacial de formato raster a vectorialy viceversa

5. Enumerar los formatos desde los que puede importarse/exportarse información espacial

6. Repasar los diversos módulos de importación y exportación de capas raster y vectoriales

7. Aprender el manejo de los módulos incluidos en la tabla 3.1

3.2 Variables de entorno

Al ejecutar el script de inicio de GRASS, se dan valor a una serie de variables de entorno a las que sepuede acceder con el módulo g.gisenv. Si se ejecuta sin más nos mostrará los siguiente valores:

61

Page 74: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

g.remove Borra mapasg.rename Renombra mapasg.copy Copiar mapasg.mlist Listar capas con expresiones regularesg.mremove Eliminar capas con expresiones regularesdb.connect Parámetros de conexión a una base de datosv.db.connect Parámetros de conexión a una base de datos

específicos para una capa vectorialr.contour Transforma capas raster de superficies a isolineasr.thin Filtra lineas en formato raster de modo que sólo tengan una celdilla de anchurar.to.vect Transforma capas raster de objetos a capas vectorialesv.to.rast Transforma capas vectoriales en raster independientemente del tipo de objetos que contenganr.in.gdal Importación de capas rasterr.out.gdal Exportación de capas rasterr.in.wms Importación de una capa raster a través de un servicio WMSv.in.ogr Importación de capas vectorialesv.in.dxf Importación de capas vectoriales en formato DXFv.in.ascii Importación de un fichero ASCIIv.in.wfs Importación de capas vectoriales a través de un servicio WFSv.in.db Crear una capa vectorial de puntos a partir de una tablav.out.ogr Exportación de capas vectorialesv.out.dxf Exportación de capas vectoriales en formato DXFv.out.ascci Exportación de capas vectoriales a un fichero ASCII

Tabla 3.1: Módulos que van a utilizarse en esta sección

62

Page 75: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

GISDBASE=/data2LOCATION_NAME=CursoGRASSMAPSET=PERMANENTGRASS_DB_ENCODING=utf-8GRASS_GUI=tcltk

Las más relevantes son las tres primeras que especifican cuales son los directorio de trabajo.

3.3 Conexión a base de datos

La gestión de los atributos asociados a objetos representados en formato vectorial ha sido completamentemodificada en GRASS 6.0 para permitir la utilización de múltiples atributos y la utilización de bases dedatos externas para almacenar la información.

Hasta la versión 5.4, los mapas vectoriales de GRASS no incluían bases de datos, como mucho disponíande un fichero en el directorio dig_cats que contenía dos columnas, en la primera aparecían los iden-tificadores numéricos (los mismos que aparecían en el fichero del directorio dig_att) y una etiqueta(numérica o de texto).

En GRASS 6, el antiguo fichero de categorías (directorio dig_cats/) desaparece y toda la información deatributos se guarda en una base de datos externa. Los módulos del tipo db.* permiten gestionar las basesde datos desde GRASS, así como establecer los enlaces entre mapas vectoriales y las tablas incluidas enlas bases de datos.

Se dispone de una serie de módulos que son utilidades para la consulta de las bases de datos: db.tables,db.columns, db.describe, db.copy, db.select y db.execute y que se examinarán en un capítulo posterior.

Puesto que se pueden manejar varias bases de datos y varios SGBD al mismo tiempo, es necesarioespecificar, en muchos de los comandos, cual es el driver (gestor de bases de datos) y el nombre de labase de datos a la que queremos acceder. Estas opciones pueden establecerse por defecto con el módulodb.connect y pasan a ser los valores por defectos del resto de los módulos db.* y v.db.*. Los valores sealmacenan en un fichero de usuario.

La definición del enlace entre una capa vectorial y una tabla de atributos requiere cuatro parámetros:

• driver: tipo de base de datos

• database: nombre de la base de datos

• table: nombre de la tabla

• key: nombre de la columna que actúa como campo clave conteniendo los mismos valores que losidentificadores de los objetos en la capa vectorial

Los parámetros driver y database se establecen con el módulo db.connect. El driver por defecto esdriver=dbf (ficheros dbf) utilizando como base de datos el subdirectorio dbf del MAPSET activo.Dependiendo de como se haya instalado el programa se podrá utilizar PostgreSQL (driver=pg) uotros gestores de bases de datos.

63

Page 76: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

En definitiva, el sistema por defecto utiliza tablas dbf para el almacenamiento de los atributos. Sin em-bargo, este sistema no permite la utilización de consultas SQL con las tablas y es preferible utilizar otrodriver. Por ejemplo pg que accede a una base de datos en formato PostgreSQL. Lógicamente esto re-quiere disponer de un servidor de bases de datos PostgreSQL instalado en el ordenador en que estamostrabajando o en otro servidor al que se tenga acceso.

La orden db.connect -p devuelve los parámetros de conexión por defecto actuales.

Los parámetros de db.connect son:

• driver (formato)

• database (base de datos)

• schema

• group

El parámetro schema permite hacer referencia a un esquema de una base de datos PostgreSQL, se tratade un concepto bastante similar al de MAPSET y permite que cada usuario de una base de datos guardesus tablas en un espacio propio. Resulta por tanto útil vincular MAPSETS y esquemas.

El parámetro group actúa de forma similar en bases de datos de ORACLE.

Ejemplos:

• DBF:

:∼> db.connect driver=dbf database=’/datos/dbf/’

• Acceder a una base de datos con PostgreSQL es algo más complejo ya que, entre otras cosas,podemos acceder a bases de datos situadas en otros servidores. El servidor y otros parámetros dela conexión a bases de datos se pueden especificar con el parámetro database de db.connect, porejemplo:

:∼> db.connect driver=pg database="host=deimos.inf.um.es \dbname=CursoGRASS schema=usuario1"

En este caso se utiliza también el parámetro schema para especificar en que esquema de la base de datosse encuentra la tabla. Los esquemas en las bases de datos permiten, entre otras cosas separar las tablascreadas por diferentes usuarios.

64

Page 77: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

3.3.1 Enlace de tablas a ficheros vectoriales

El enlace de una capa vectorial a una tabla de atributos (excepto para mapas enlazados de forma virtual)se define internamente en un fichero ASCII llamado dbln que se guarda en el directorio del mapavectorial). Por ejemplo el siguiente fichero dbln corresponde a la capa vectorial municipios:

1 municipios3 cat CursoGRASS pg

e indica que la capa 1 del fichero vectorial (recuerda que en GRASS 6.0 los vectoriales son multicapa)se enlaza a la tabla “municipios3”, que la columna clave para el enlace es “cat” y que la base de datos es“CursoGRASS” gestionada por PostgreSQL (driver pg).

Este fichero es creado al importar o convertir el mapa al formato de GRASS y puede modificarse conv.db.connect que permite establecer el enlace entre una capa vectorial y una tabla utilizando el driver ybase de datos por defecto establecidos previamente con db.connect o especificando unos propios.

También puede utilizarse este módulo (con la opción -p) para consultar las características del enlace deun mapa vectorial a una tabla en particular.

Suponiendo que los parámetros de conexión son los establecidos por defecto, la siguiente orden:

:∼> v.db.connect municipios table=poblacion key=cat

establece una conexión a otra tabla que puede comprobarse con la orden:

:∼> v.db.connect -p municipios

que responderá:

Vector map <municipios> is connected by:layer <1> table <poblacion> in database <CursoGRASS> \through driver <pg> with key <cat>

Puesto que la conexión se establece de forma abierta y sencilla, podemos manipular la tabla con cualquierotro programa y, mientras se respete el campo clave, cat en el caso anterior, el enlace seguirá funcionandosin problemas.

Hay que tener en cuenta que ni db.connect ni v.db.connect comprueban si la conexión es válida (esdecir si la base de datos es accesible y la tabla o el campo clave existen), así que no producirán erroresen ningún caso. Estos aparecerán, si hay problemas, posteriormente.

3.3.2 Drivers disponibles: db.drivers

Las conexiones a bases de datos se gestionan mediante los drivers integrados en la librería DBMI(Database Management Interface). Los siguientes drivers están disponibles:

• Ficheros DBF (es la opción por defecto)

65

Page 78: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• Bases de Datos PostgreSQL

• Bases de datos mySQL

• ODBC conectado con un sistema de bases de datos relacional (e.g. Oracle, mySQL, PostgreSQL,etc)

En todo caso, los drivers disponibles en una instalación concreta de GRASS dependerá de las opcionesque se hayan pasado al compilar el programa. Puede conseguirse un listado de los drivers disponibles (esdecir de los SGBD con los que GRASS puede enlazar los mapas vectoriales) con la orden:

:∼>db.drivers -p

3.4 Gestión de ficheros

Toda aplicación informática necesita, además, unas funcionalidades básicas de gestión de ficheros (copiar,borrar, renombrar, etc.). En GRASS cada capa, raster o vectorial, está compuesta por diversos ficherossituados en diferentes directorios, por tanto cada una de estas operaciones sobre una capa requiere hacerlo propio con todos los ficheros involucrados. No es prudente por tanto tratar de copiar, renombrar oborrar cada uno de los ficheros directamente con las herramientas del sistema operativo. Para facilitar latarea existen tres comandos (g.copy, g.rename y g.remove).

Son similares en cuanto a su utilización y se usan para copiar, renombrar y borrar mapas. El fun-cionamiento es bastante similar en cualquiera de los tres casos. Con diversos ejemplos resultará mássencillo entenderlo.

:∼>g.copy rast=acuiferos,misacuiferos :∼>g.remove vect=red_drenaje

:∼>g.rename rast=MDE,MDE2

En el primer caso se crea una capa raster llamada misacuiferos igual a la capa acuiferos preex-istente, en el segundo se borra la capa vectorial red_drenaje y en el tercero se renombra un mapa de sitesMDE como MDE 2.

En algunos casos se necesitará especificar en que MAPSET se encuentra la capa con la que queremostrabajar (en caso de que diferentes MAPSETS tengan capas con el mismo nombre). En estos casos seespecifica el MAPSETS añadiéndoselo al nombre de la capa utilizando un signo ’@’ para separarlos.

:∼>g.copy rast=hidrogeologia@PERMANENT,acuiferos

Con estos tres módulos podemos manipular no sólo mapas sino también todos los tipos de datos vistosen la sección 1.8.2.

66

Page 79: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• rast Ficheros que componen un mapa raster

• vect Ficheros que componen un mapa vectorial

• icon Fichero con definición de iconos

• labels Fichero con definición de etiquetas

• region Fichero que define una región

• group Fichero que define un grupo (en el análisis de imágenes de satélite)

• 3dview Fichero que contiene los parámetros para una visualización 3D

En las últimas versiones de GRASS han aparecido nuevos módulos de gestión que utilizan expresionesregulares para seleccionar un conjunto de capas.

El módulo g.mlist hará un listado de todas las capas cuyo nombre coincida con una determinada expre-sión regular:

:∼> g.mlist vect pattern="mun*"

listará todas capas vectoriales cuyo nombre empiece por mun.

El módulo g.remove utiliza la misma aproximación para determinar que capas deben borrarse. Debeutilizarse en dos pasos.

:∼> g.mremove vect="mun*"

:∼> g.mremove -f vect="mun*"

La primera orden devuelve las capas que van a borrarse y la segunda las borra realmente. Como es lógicosólo se podrán borrar capas que estén en el MAPSET de trabajo.

3.5 Transformaciones entre formatos

Todo programa para gestionar información espacial debe tener una serie de utilidades para convertir estainformación de unos formatos a otros. Éstos módulos son de manejo muy sencillo, sus dos parámetrosbásicos son el mapa de entrada y el de salida que, puesto que tendrán formatos distintos y se almace-narán en directorios diferentes, pueden tener el mismo nombre. En algunos casos aparecen parámetroscomplementarios en función del propósito del módulo.

67

Page 80: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 3.1: Módulos para la transformación de datos de raster a vectorial y viceversa, adaptado de Mi-tasova y Neteler (2007)

3.5.1 Módulos para transformar datos raster en vectorial

Variables cuantitativas: r.contour

Este módulo genera un mapa vectorial de isolineas a partir de un raster que contiene una superficie:

:∼> r.contour input=MDE output=MDE levels=20000,40000,60000,80000,100000,120000

el parámetro levels indica los valores de las isolineas que se van a crear. Una forma alternativa a lautilización del parámetro levels son los parámetros minlevel, maxlevel y step que definen el valor de lacurva de nivel mínima y máxima y la equidistancia1 de curvas de nivel.

Variables cualitativas y objetos: r.to.vect y r.thin

Este módulo transforma una capa raster con polígonos o con una variable cualitativa en su equivalenteen formato vectorial.

:∼> r.to.vect input=usos output=usos feature=area

El parámetro feature especifica el tipo de objeto (point, line o area).

1diferencia de valor entre cada par de isolineas

68

Page 81: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

En el caso de las lineas, es necesario utilizar previamente el módulo r.thin para reducir la anchura de lasmismas a un sólo pixel:

:∼> r.thin linea_gruesa output=linea_fina

3.5.2 Módulos para transformar datos vectoriales en raster

Se aplica a cualquier mapa vectorial, en función de cuales sean los datos de entrada (lineas, polígonos opuntos) se generará su correspondiente versión en formato raster.

:∼> v.to.rast input= urbanos output=urbanos

Además de input y output, otros parámetros utilizados son:

• type, para especificar si los objetos que se van a trasformar son point, line o area.

• use, determina el valor que recibirán las celdillas en la capa raster creada, las posibilidades son:

– attr, los valores de una columna de la tabla enlazada especificada por el parámetro column– cat, los valores de categoría de los objetos

– val, el valor especificado por el parámetro value– z, el valor de Z (sólo válido para puntos e isolineas)

– dir, dirección de flujo (sólo para lineas)

La opción por defecto es attr

• column columna de la que tomaran sus valores las celdillas (debe ser numérica)

• layer, capa seleccionada, por defecto la 1

• value, por defecto 1

3.6 Gestión de locations y mapsets

La manera más eficiente de copiar una LOCATION o un MAPSET enteros para trasladarlos a otramáquina o para hacer una copia de seguridad es empaquetar y comprimir toda la estructura de direc-torios. En la sección 3.2 se han presentado algunas de las variables de sistema que reciben un valor alentrar en GRASS. En este caso se utilizará la variable $GISDBASE.

Si los atributos de las capas vectoriales están en dbf, se incluirán en el empaquetado, pero si están en unabase de datos externa, como en este ejemplo, habrá que hacer un volcado de la misma.

cd $GISDBASEtar -cvzf mi_location.tar.gz mi_location/pg_dump -t tabla_1 -t tabla_2 ... -t tabla_n base_de_datos > base_de_datos.sql

69

Page 82: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Tenemos así dos ficheros (mi_location.tar.gz y base_de_datos.sql) que pueden guardarsecomo copia de seguridad o integrarse en otra máquina mediante las órdenes:

cd $GISDBASEtar -xvzf mi_location.tar.gzpgsql -f base_de_datos.sql

3.7 Crear una location desde cero

Salvo que se sea un usuario experimentado de GRASS, no es recomendable acceder, o modificar, directa-mente a los ficheros o directorios de LOCATION y MAPSET con las herramientas del sistema operativo,sino con las que proporciona GRASS.

Antes de entrar más de lleno en la importación /exportación vamos a tratar brevemente de como crearen GRASS una LOCATION desde cero o a partir de un fichero de datos espaciales. Para ello debemosentrar en GRASS y seleccionar el directorio que utilizaremos como GISDBASE, hecho esto (figura 3.2)deberemos elegir, para crear la LOCATION, entre:

1. utilizar un fichero georreferenciado,

2. pasar directamente un código EPSG o

3. entrar directamente todos los valores necesarios.

Si decidimos utilizar un fichero georreferenciado (botón Georreferenced file ), el programa nos mostrarála ventana que aparece en la figura 3.3, desde la que podremos dar nombre a la LOCATION y el GISD-BASE y buscar el fichero georreferenciado del que la nueva LOCATION copiará el sistema de referenciaespacial.

Otra opción es entrar directamente el código EPSG del sistema de referencia que vamos a utilizar (botónEPSG codes ) en la ventana que aparece en la figura 3.4. Estos códigos pueden buscarse directamente

en el fichero que nos indica GRASS pero es preferible teclearlo directamente si lo sabemos. Una vezseleccionado el sistema de referencia, GRASS nos pedirá (figura 3.5) los 7 parámetros para la conversiónde este sistema de referencia a wgs84 utilizando la transformación de Bursa-Wolf.

Al crear la LOCATION, GRASS creará de forma automática el MAPSET PERMANENT, si queremoscrear más MAPSETs bastara con introducir su nombre en la casilla correspondiente del formulario ypulsar el botón Create new mapset (figura 3.6).

La última opción para crear una LOCATION sería introducir en pantallas de texto todos los parámetros,para ello basta con pulsar el botón Projection values .

3.8 Importación y exportación raster

3.8.1 Importación con r.in.gdal

Los módulos de importación-exportación de capas raster y vectoriales (r.in.gdal, r.out.gdal, v.in.ogr yv.out.ogr) dependen de la librería GDAL que puede instalarse de forma automática o compilarse a partirde fuentes descargadas.

70

Page 83: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 3.2: Pantalla de entrada a GRASS antes de crear una LOCATION

En este último caso, puede también compilarse GDAL para leer ficheros ECW y MrSid enlazando laslibrerías suministradas por las empresas responsables de estos formatos. En el caso de MrSid, esta opciónsólo funciona en máquinas de 32 bits y con determinadas versiones del compilador de C de GNU.

El módulo r.in.gdal permite importar más de 40 formatos de fichero (siempre en función de como se hayacompilado la librería gdal). En la tabla 3.2 aparecen los más relevantes, puede obtenerse más informaciónen http://www.gdal.org/formats_list.html. En todo caso para conocer que formatos pueden ser importadosen una instalación en concreto de GRASS puede utilizarse la orden:

:∼> r.in.gdal -f

El modo de funcionamiento de la orden para importar un fichero raster es:

:∼> r.in.gdal input=MDE.tif output=MDE

Hay una serie de recomendaciones a la hora de nombrar nuevas capas de información. Hay que evitarincluir espacios, caracteres especiales, signos aritméticos o puntos. Pueden utilizarse números pero elprimer carácter debe ser una letra.

71

Page 84: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Formato Código Creación Georref. Tamaño máximoArc/Info ASCII Grid AAIGrid Sí Sí Sin límiteArc/Info Binary Grid (.adf) AIG No Sí –AIRSAR Polarimetric AIRSAR No No –Microsoft Device Independent Bitmap BMP Sí Sí 4GiBBSB Nautical Chart Format (.kap) BSB No Sí –VTP Binary Terrain Format (.bt) BT Sí Sí –CEOS (Spot for instance) CEOS No No –First Generation USGS DOQ (.doq) DOQ1 No Sí –New Labelled USGS DOQ (.doq) DOQ2 No Sí –Military Elevation Data (.dt0, .dt1) DTED No Sí –ERMapper Compressed Wavelets (.ecw) ECW Sí SíESRI .hdr Labelled EHdr No Sí –ENVI .hdr Labelled Raster ENVI Sí Sí Sin límiteEnvisat Image Product (.n1) Envisat No No –EOSAT FAST Format FAST No Sí –FITS (.fits) FITS Sí NoGraphics Interchange Format (.gif) GIF Sí No 2GBArc/Info Binary Grid (.adf) GIO Sí SíGRASS Rasters GRASS No Sí –TIFF / GeoTIFF (.tif) GTiff Sí Sí 4GiBHierarchical Data Format Release 4 (HDF4) HDF4 Sí Sí 2GiBErdas Imagine (.img) HFA Sí Sí Sin límiteAtlantis MFF2e HKV Sí Sí Sin límiteImage Display and Analysis (WinDisp) IDA Sí Sí 2GBILWIS Raster Map (.mpr,.mpl) ILWIS Sí Sí –Japanese DEM (.mem) JDEM No Sí –JPEG JFIF (.jpg) JPEG Sí Sí 4GB (65500x65500)JPEG2000 (.jp2, .j2k) JPEG2000 Sí Sí 2GiBJPEG2000 (.jp2, .j2k) JP2KAK Sí Sí Sin límiteNOAA Polar Orbiter Level 1b Data Set (AVHRR) L1B No Sí –Erdas 7.x .LAN and .GIS LAN No Sí 2GBIn Memory Raster MEM Sí Sí 2GiBAtlantis MFF MFF Sí Sí Sin límiteMulti-resolution Seamless Image Database MrSID No Sí –NDF NLAPS Data Format No Sí Sin límiteNITF NITF Sí SíNetCDF netCDF Sí Sí 2GBOGDI Bridge OGDI No Sí –PCI .aux Labelled PAux Sí No Sin límitePCI Geomatics Database File PCIDSK Sí Sí Sin límitePortable Network Graphics (.png) PNG Sí NoPCRaster (.map) PCRaster Sí NoNetpbm (.ppm,.pgm) PNM Sí No Sin límiteRadarSat2 XML RS2 No Sí 4GBUSGS SDTS DEM (*CATD.DDF) SDTS No Sí –SAR CEOS SAR_CEOS No Sí –USGS ASCII DEM (.dem) USGSDEM No Sí –X11 Pixmap (.xpm) XPM Sí No

Tabla 3.2: Formatos admitidos por r.in.gdal y r.out.gdal

72

Page 85: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 3.3: Ventana para la creación de una LOCATION a partir de un fichero georreferenciado

Figura 3.4: Formulario para introducir el código EPSG de la nueva LOCATION

Si los datos de origen contienen información acerca de su sistema de referencia, r.in.gdal la compararácon la información relativa al sistema de referencia de la location en la que se quiere importar. Si nocoinciden o si, como es frecuente, el fichero no incluye esta información; dará un mensaje de error dandodos alternativas:

• Utilizar la opción -o para saltar la comprobación, esta opción es sólo adecuada si estamos segurosde que el sistema de referencia es el correcto pero no está incluido de forma explícita en el fichero.

• Crear una nueva LOCATION, cuyo nombre se pasa con el parámetro location, con el sistema dereferencia espacial del fichero para a continuación importarlo a dicha LOCATION. Esta opciónes equivalente a crear una nueva LOCATION desde un fichero georreferenciado en la ventana deinicio de GRASS.

En caso de que la imagen contenga puntos de control, estos se escriben en un fichero POINTS dentrode un grupo de imagen (ver tema 9) de manera que pueden ser directamente utilizados por el móduloi.rectify.

En caso de que el fichero de entrada contenga varias bandas, r.in.gdal creará una capa raster por banda.Los nombres de estas se forman con el nombre dado por el usuario al mapa de salida más el nombre dela capa, separados por un punto. Para obtener una composición puedes utilizar r.composite.

73

Page 86: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 3.5: Formulario para introducir los parámetros de transformación de la nueva LOCATION

3.8.2 Importación de otros formatos

Los siguientes módulos de importación de datos raster cubren otras posibilidades no disponibles con lalibrería gdal y algunas redundantes.

• r.in.arc Ficheros raster ASCII de ARC/INFO (GRID)

• r.in.bin Capas raster en formato binario genérico

• r.in.gridatb Fichero GRIDATB.FOR generado por TOPMODEL

• r.in.poly Ficheros vectoriales ASCII de GRASS

• r.in.ascii Ficheros raster ASCII de GRASS

• r.in.mat Ficheros MAT-File(v4) de Octave o Matlab

• r.in.xyz Series de coordenadas X,Y,Z en formato ASCII

3.8.3 Exportación con r.out.gdal

El módulo r.out.gdal permite exportar a aquellos formatos presentados en la tabla 3.2 que admitencreación por parte de la librería gdal. Además de algunos parámetros smilares a los de r.in.gdal, estemódulo incorpora el parámetro type que permite determinar el tipo de datos que contendran las capas

74

Page 87: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 3.6: Pantalla de entrada a GRASS antes de crear un nuevo MAPSET

raster de salida. Las opciones son Byte, Int16, UInt16, UInt32, Int32, Float32, Float64, CInt16, CInt32,CFloat32, CFloat64. Las equivalencias más aconsejables entre tipos de datos raster en GRASS y tiposde exportación son:

La orden para conocer a que formatos puede exportarse una capa raster en una instalación concreta deGRASS es:

:∼> r.out.gdal -l

• CELL ==> Int32

• FCELL ==> Float32

• DCELL ==> Float64

Ejemplos

:∼> r.out.gdal MDE format=GTiff type=Float32 output=MDE.tif

75

Page 88: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

3.8.4 Exportación a otros formatos

• r.out.arc Ficheros raster ASCII de ARC/INFO (GRID)

• r.out.gridatb Fichero GRIDATB.FOR generado por TOPMODEL

• r.out.ascii Ficheros raster ASCII de GRASS

• r.out.mat Ficheros MAT-File(v4) de Octave o Matlab

• r.out.mpeg Combina varios ficheros raster en una animación

• r.out.ppm Ficheros PPM (formato gráfico)

• r.out.vrml Ficheros en Virtual Reality Modeling Language (VRML)

• r.out.png Ficheros PPM (formato gráfico)

• r.out.ppm3 Ficheros PPM (formato gráfico) combinado 3 capas que se convierten en capas rojo,verde y azul

• r.out.vtk Ficheros VTK (Visualization ToolKit) para utilizar con programas como VTK Toolkit,Paraview o MayaVi

• r.out.bin Capas raster en formato binario genérico

• r.out.pov Genera un fichero de alturas para POVRAY

• r.out.tiff Ficheros TIFF o GeoTIFF

En unix existen diversas herramientas en linea de comandos que pueden modificar formatos de ficherosgráficos, por ejemplo:

:∼>convert usos.png usos.jpg

3.9 Importación y exportación vectorial

Al importar una capa vectorial, los atributos se guardan en una tabla llamada igual que el mapa de salidaen la base de datos establecida por defecto (o por el usuario con db.connect) con el formato (driver)establecido por defecto o por el usuario.

3.9.1 Importación con v.in.ogr

El módulo v.in.ogr importa ficheros vectoriales y crea capas en formato GRASS, se basa para ello enla librería OGR (Simple Features Library) que se incluye en la librería GDAL que, por tanto, debe serinstalada antes que GRASS para utilizar el módulo v.in.ogr.

76

Page 89: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Este módulo incluye un parámetro dsn para especificar la base de datos de donde se extraen las capas. Encaso de shapefiles será simplemente el directorio donde se ubican estos, en el caso de una base de datosPOSTGIS contendrá los parámetros necesarios para establecer la conexión. La capa que debe importarsese pasa con el parámetro layer mientras que output incluye el nombre de la capa creada en formatoGRASS, por ejemplo:

Si no se especifica una capa, se muestran las capas disponibles en la base de datos o directorio especifi-cados y el módulo termina.

El parámetro spatial define un rectángulo que actúa como máscara espacial para restringir los objetosimportados a una región. Todos los objetos incluidos total o parcialmente serán importados.

La limpieza y reconstrucción de la topología se hace de manera automática pero puede fallar en casosconcretos. Una opción en estos casos es utilizar el parámetro snap que establece una distancia umbral demanera que los nodos situados a una distancia inferior se unirán.

Si aun así no se consigue una limpieza topológica puede utilizarse v.clean a posteriori, que incluyediversas herramientas de limpieza topológica, o incluso v.digit para editar manualmente la geometría ytopología.

Los formatos compatibles con OGR son en principio los que aparecen en la tabla 3.3, aunque dependende cada implementación concreta, para consultarlo ejecuta:

:∼>ogrinfo --formats

El módulo v.in.ogr trata de conservar la información acerca de la proyección cuando importa una capade una base de datos en la que se incluye esta información y si el driver OGR admite esta opción. Si laproyección de la base de datos de partida no coincide con la proyección de la LOCATION de destino,v.in.ogr genera un mensaje de error (Projection of dataset does not appear to match current location) yla información de los parámetros de proyección del fichero. Si el usuario decide ignorar esta diferenciadebe utilizar la opción -o para desactivar la comprobación de las proyecciones.

Si por el contrario el usuario decide importar los datos con la proyección original incluyendo toda lainformación, v.in.ogr puede crear una nueva location basada en la proyección y extensión contenida enel fichero. Esto se hace pasandole el nombre que va a tener la nueva location con el parámetro location,esta se creara con un sólo mapset (PERMANENT).

Ejemplos:

• SHAPE files

:∼> v.in.ogr dsn=/home/user/shape_data layer=test_shape output=grass_map

• Ficheros de MapInfo

:∼> v.in.ogr dsn=./ layer=mapinfo_test output=grass_map

77

Page 90: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Formato Genera GeorreferenciaArc/Info Binary Coverage No SíComma Separated Value (.csv) Sí NoDODS/OPeNDAP No SíESRI Shapefile Sí SíFMEObjects Gateway No SíGML Sí NoIHO S-57 (ENC) No SíMapinfo File Sí SíMicrostation DGN No NoMySQL No NoOGDI Vectors No SíODBC No SíOracle Spatial Sí SíPostgreSQL Sí SíSDTS No SíSQLite Sí NoUK .NTF No SíU.S. Census TIGER/Line No SíVRT - Virtual Datasource No Sí

Tabla 3.3: Formatos compatibles con OGR

• Coberturas de ArcInfo, hay que especificar cual es el tipo de dato que se va a importar. En esteejemplo se importan arcos y etiquetas, el módulo se ocupa de construir la topología

:∼> v.in.ogr dsn=gemeinden layer=LAB,ARC\type=centroid,boundary output=mymap

• Mapas en formato PostGIS

:∼> v.in.ogr dsn="PG:host=localhost dbname=postgis\user=postgres" layer=polymap output=polygons type=boundary,centroid

3.9.2 Importación de otros formatos

• v.in.ascii Formato ASCII de GRASS para información vectorial

• v.in.dxf Ficheros de intercambio de AutoCAD (no funciona con ficheros 3D, la mejor opción eneste caso sería utilizar gvSIG para pasar de DXF a shapefile y despues utilizar v.in.ogr.

Como ejemplo va a crearse un rectángulo a partir del formato vectorial ASCII de GRASS:

78

Page 91: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

echo "B 5 0592500 4227847592500 4162994677820 4162994677820 4227847592500 4227847C 1 1620000 42000001 1"|v.in.ascii -n fs=" " output=marco format=standard

Los datos podrían haberse pasado también mediante un fichero:

v.in.ascii -n fs=" " input=marco.txt output=marco format=standard

donde el contenido de marco.txt es:

B 5 0592500 4227847592500 4162994677820 4162994677820 4227847592500 4227847C 1 1620000 42000001 1

Cada objeto se codifica mediante una primera linea con un código de objeto:

• B: perímetro,

• L: linea,

• C: centroide,

• P: punto.

el número de pares de coordenadas que forman el objeto y el número de identificadores del mismo. Acontinuación viene el conjunto de pares de coordenadas y para terminar el layer en que se almacena elobjeto y su identificador.

En el caso de un fichero en formato DXF en 2D la orden sería:

:∼> v.in.dxf input=fichero_dxf output=capa_grass

79

Page 92: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

3.9.3 Ficheros vectoriales de versiones anteriores de GRASS (v.convert y v.in.sites)

Antes de la versión 5.7 del programa, la información vectorial se almacenaba en un formato más sencillosin conexión a tablas. La conversión de estos antiguos vectoriales se hace con el módulo v.convert, existetambién un v.convert.all para convertir todos los vectoriales de un mapset.

:∼> v.convert input=mapa_G5.4 output=mapa_G6.0

Pueden coexistir en un mismo MAPSET dos versiones diferentes del mismo mapa con el mismo nombreya que los nuevos vectoriales se almacenan en el directorio /vector que cuelga del MAPSET de usuario.Este hecho facilita la migración de G5.4 a G6.0 ya que pueden ejecutarse ambas versiones de GRASS ala vez sobre el mismo MAPSET y acceder a la información en uno u otro formato.

Una de las características de GRASS antes de la versión 5.7 es que los mapas de puntos no se almacena-ban en formato vectorial sino como sites en una tabla en formato ASCII en la que coexistían coordenadascon valores temáticos.

Los antiguos ficheros de sites deben convertirse por tanto a formato vectorial. Los módulos para elloson v.in.sites para convertir un único fichero, y v.in.sites.all para convertir todos los ficheros presentesen un mapset. Estos módulos convierten ficheros de sites tanto de 2 como de 3 dimensiones en capasvectoriales con el nuevo formato que contienen sólo capas de puntos.

Los atributos de los sites se incluyen como categorías asociadas a los puntos que se almacenan en unatabla que genera v.in.sites y almacena en la base de datos y formato establecidos por defecto con elmódulo db.connect (ver capítulo ??). La capa de sites debe tener un formato correcto, por ejemplo:

name|testdesc|Imported from points shapefile test.shp.time|3 Feb 2003 15:09:11 +00003571629.904|5943214.399|#13571323.64|5944517.464|#2

Por ejemplo, la orden:

:∼> v.in.sites in=fichero_sites out=mapa_vectorial

convierte el fichero de sites fichero_sites en un mapa vectorial en formato G6.0 llamado mapa_vectorial.

3.9.4 Mapas de puntos a partir de tablas (v.in.db)

El módulo v.in.db crea un nuevo mapa vectorial de puntos a partir de una tabla de la base de datos quecontiene coordenadas.

1. Crear un mapa a partir de una tabla PostgreSQL:

:∼> v.in.db driver=pg database="host=servidor.um.es,dbname=bd" \

table=puntos x=east y=north key=cat output=puntos

80

Page 93: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

2. Crear un mapa desde PostGIS: Para extraer las coordenadas desde PostGIS es necesario utilizarfunciones específicas:

:∼> v.in.db driver=pg database="host=servidor.um.es,dbname=bd" \

table=puntos x="x(geom)" y="y(geom)" key=cat out=puntos

3. Crear un mapa de puntos (x, y, z) desde una tabla DBF.

:∼> v.in.db driver=dbf \database=directorio_con_la_base_datos \table=observatorios x=este y=norte key=cat\output=observatorios

Este módulo crea el mapa vectorial en formato nativo y guardará la tabla de atributos en una archivoDBF o en una tabla de postgreSQL dependiendo de como este configurado GRASS. Para comprobarloejecutar db.connect -p, la forma de modificar esta configuración puede consultarse en el tema 4.

3.9.5 Exportación con v.out.ogr

El módulo v.out.ogr convierte una capa vectorial en formato GRASS a un formato compatible con OGR.OGR (Simple Features Library) es parte de la librería GDAL, por tanto debe ser instalada para utilizarv.out.ogr.

Para obtener un listado de los formatos compatibles con OGR ver la tabla 3.3.

Para exportar polígonos con agujeros a, por ejemplo, formato shape, manteniendo los agujeros comotales, debe utilizarse la opción -c.

Ejemplos

• Exportar lineas desde mapas vectoriales en formato GRASS a formato SHAPE (genera /tmp/testogr.shpy ficheros relacionados):

:∼> v.out.ogr input=hidrologia type=line dsn=. layer=hidrologia

• Exportar polígonos:

:∼> v.out.ogr input=hidrogeologia type=area dsn=. layer=hidrogeologia

• Exportar lineas desde mapas vectoriales en formato GRASS a formato GML (genera /tmp/testogr.gml):

:∼> v.out.ogr input=hidrologia type=line dsn=grass.gml\

layer=hidrolocia format=GML

81

Page 94: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• Exportar polígonos desde mapas vectoriales en formato GRASS a PostGIS:

:∼> v.out.ogr input=polygons type=area dsn="PG:host=localhost\

dbname=postgis user=postgres" layer=polymap format=PostgreSQL

3.9.6 Exportación de otros formatos

Al margen de los formatos compatibles con OGR, GRASS dispone de diversos módulos para la ex-portación de otros formatos vectoriales:

• v.out.ascii Formato ASCII de GRASS para información vectorial

• v.out.dxf Ficheros de intercambio de AutoCAD

• v.out.pov Ficheros para POVRAY

• v.out.svg Formato Scalable Vector Graphic

• v.out.vtk Ficheros VTK (Visualization ToolKit) para utilizar con programas como VTK Toolkit,Paraview o MayaVi

3.9.7 Lectura directa de ficheros en otros formatos (v.external)

También puede hacerse un enlace virtual a un mapa vectorial almacenado en un formato compatible conOGR para acceder a él en forma de sólo lectura sin necesidad de importación. Los formatos que admiteneste tipo de conexión son los mismos que aparecen en la tabla 3.3

Ejemplos

• Ficheros shape:

:∼> v.external dsn=/home/user/shape_data layer=municipios_shape \output=grass_map

• Ficheros de MapInfo:

:∼> v.external dsn=./ layer=mapinfo_test output=grass_map

:∼> v.external dsn=CITXCATD.DDF output=cities

82

Page 95: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• Mapas PostGIS (areas):

:∼> v.external dsn="PG:host=localhost user=postgres dbname=postgis"\layer=municipios_pg output=municipios2

El modelo de datos de objetos simples (simple feature data model) utilizado por OGR es muy diferenteal formato topológico de GRASS. En lugar de autentica topología, un enlace con v.external crea una’pseudo topología’. La consecuencia es que algunos módulos que funcionan correctamente con datos enformato nativo de GRASS pueden generar problemas cuando se utilizan con una capa vectorial enlazadade este modo.

Este tipo de conexión suele dar problemas para importar la topología desde PostGIS. Estos problemasno han sido todavía demasiado bien explicados ni solucionados.

3.10 Los módulos r.in.wms y v.in.wfs

En los últimos años, debido al progresivo avance tecnológico en todo lo relacionado con los Sistemas deInformación Geográfica en cuanto a difusión de datos y características de las herramientas, se ha hechonecesario implantar protocolos de comunicación. Este es el caso de los WMS (Web Map Service) y WFS(Web Feature Service).

Este hecho ha propiciado el desarrollo de herramientas para conexión con los datos geográficos medianteestos protocolos, en caso GRASS a partir de los módulos r.in.wms y v.in.wfs, módulos que aparecen apartir de la versión 5 a modo de scripts. De esta forma, GRASS se hace totalmente compatible con losServicios Web conforme a los estándares OGC para conexión con servidores externos a nuestro entornode trabajo.

No obstante, se debe remarcar que el concepto de acceso a datos de GRASS difiere del utilizado en lamayoría de SIG existentes en la actualidad con la capacidad de conexión a Servicios:

La conexión se basa en la importación de los datos solicitados al servidor a la LOCATION y MAPSETde trabajo, no es una visualización “al vuelo” de dichos datos. Este hecho sugiere un aspecto buenoy otro malo respecto al uso cotidiano de trabajo: Por un lado imposibilita el trabajo add hoc de losdatos o manipulación de los mismos en el servidor (aspecto negativo) Es capaz de importar dichos datos(aspecto muy interesante, sobre todo en el caso del WMS, donde es capaz incluso de descargarse losdatos de servidores de ortofotografía por poner algún ejemplo).

3.10.1 r.in.wms

Este módulo descarga e importa datos raster desde servidores con capacidades WMS y como mínimonecesita conocer el servicio web al que conectar mediante la región configurada en nuestro MAPSET, lacapa o capas a descargar y el nombre del raster de destino.

En módulo lo que hace es capturar la información en formato raster del servidor y descargarla en un di-rectorio de trabajo (por defecto $GISDBASE/wms_download, aunque se puede cambiar con el parámetro

83

Page 96: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

folder=<directorio>). En caso de descargar gran cantidad de información (que es función del área de tra-bajo y resolución del dato solicitado), se dividirá la imagen en trozos (tiles), reproyecta la información yvuelve a unirla en GRASS.

Opciones de interés:

• -l: Lista las capas

• -o: No importa las transparencias

• -c : Limpia el directorio de descarga

• -p: No reproyecta los datos

• -k: Importa las imágenes utilizando el nombre de las bandas de dichas imágenes en caso de que elnivel de colores así lo exija.

• –overwrite: Sobreescribe el raster si existe

Parámetros de configuración más importantes:

• output=string: (nombre del raster de salida)

• mapserver=string : (Ruta completa del servicio)

• layers=string[,string,...] : (Nombre de las capas a descargar)

• styles=string[,string,...]: (Estilos de visualización de las capas)

• srs=string: (Proyección del servidor, por defecto la EPSG:4326)

• format=string: (Formato de la imagen de descarga: geotiff –por defecto-, tiff, jpeg, gif, png

• wmsquery=string : (Versión del servidor WMS, en función del cual se podrá disponer de lasdiferentes opciones de consulta; por defecto selecciona version=1.1.1)

• maxcols=integer: (No máximo de columnas del raster solicitado para una sola petición, 1024 pordefecto)

• maxrows=integer: (No máximo de filas del raster solicitado para una sola petición, 1024 pordefecto)

• region=string: (Nombre de la región a utilizar)

• folder=string : (Directorio temporal para la descarga de imágenes) Folder to save downloadeddata to

• method=string: (Método de reproyección a utilizar: nearest –por defecto-, bilinear, cubic, cubic-spline

84

Page 97: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Ejemplos:

Obtener un listado de capas y la imagen del IGN de 1999 disponible en los servidores del INUAMA:

:∼> r.in.wms mapserver=http://inuama_wms.inf.um.es/cgi-bin/mapserv?\

map=/var/www/SIG/imagen2.map -l

:∼> r.in.wms -o -c -k output=SIG mapserver=http://inuama_wms.inf.um.es/cgi-bin/mapserv?\

map=/var/www/SIG/imagen2.map layers=IGN99 srs=EPSG:23030 \

format=png folder=/home/gomariz/CursoGRASS/WMS -overwrite

Cómo obtener un listado de las capas para importar los datos referentes a Sistemas en el Suelo delservidor de SITMURCIA:

:∼> r.in.wms mapserver=http://massotti.carm.es/wmsconnector/com.esri.wms.Esrimap/wms?

\

-l

:∼> r.in.wms -o -c -k output=WMS2 \

mapserver=http://massotti.carm.es/wmsconnector/com.esri.wms.Esrimap/wms?\

layers=30,31,32 srs=EPSG:4326 format=png wmsquery=version=1.1.1\

maxcols=1024 maxrows=1024 folder=/home/gomariz/CursoGRASS/WMS

Obtención de la ortoimagen de 2007 del servidor de CARTOMUR:

\prompt r.in.wms mapserver=http://cartomur.acotelsa.com/SgdWms/SgdWms.dll/WMS? -l

\prompt r.in.wms -o -c -k output=ORTO2007mapserver=http://cartomur.acotelsa.com/SgdWms/SgdWms.dll/WMS?layers=Ortofoto_2007 srs=EPSG:25830 format=png wmsquery=version=1.1.1maxcols=1024 maxrows=1024 folder=/home/gomariz/CursoGRASS/WMS

3.10.2 v.in.wfs

Módulo de importación de datos vectoriales desde servicios WFS.

Ejemplos:

Ejemplo oficial que se debe ejecutar en una location configurada para Latitud-Longitud:

:∼> v.in.wfs wfs="http://mapserver.gdf-hannover.de/cgi-bin/grassuserwfs?\

REQUEST=GetFeature&SERVICE=WFS&VERSION=1.0.0" out=grass_users

85

Page 98: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Ejemplo para consulta de datos en nuestros servidores, seleccionando como vectorial a descargar “mo-jones” (vectorial de puntos):

:∼> v.in.wfs wfs=”http://155.54.179/cgi-bin/mapserv.exe?\

map=C:/ms4w/Apache/htdocs/servicios/wfs.map&LAYER=mojones& output=mojones

Como se puede ver, el uso de este módulo es muy sencillo, tan solo hay que configurar la conexión y eldato de salida.

Al igual que ocurre con el módulo anterior, dentro de la conexión se pueden especificar los diferentesparámetros que se pasan al servidor para acceder y seleccionar los datos (LAYER, VERSION, etc. . . ),aunque r.in.wms lleva parte de estas opciones como parámetro opcional a configurar (como ocurre en elcaso del LAYER o versión del servidor).

86

Page 99: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 4

Conexión a bases de datos

GRASS puede utilizar un sistema de bases de datos externo para la gestión de las tablas de atributosenlazadas a capas vectoriales. Diversos módulos se convierten así en clientes de bases de datos que soncapaces de lanzar consultas de seleción o actualización al servidor de bases de datos. En este curso seutiliza PostgreSQL como servidor de bases de datos.

4.1 Objetivos

1. Analizar los diferentes módulos que permiten consultar y modificar tablas de atributos

2. Aprender el manejo de los módulos incluidos en la tabla 7.1

4.2 Enlaces de capas vectoriales a tablas de atributos:db.connect y v.db.connect

El módulo db.connect permite establecer cual será la conexión por defecto entre capas vectoriales ytablas almacenadas en bases de datos. La conexión actual puede comprobarse con la orden:

:∼>db.connect -p

Lo normal sería que todos los usuarios tuviesen esta conexión configurada para trabajar con la base dedatos CursoGRASS gestionada por PostgreSQL. Cada usuario dispone de un esquema en dicha base dedatos para almacenar sus tablas. Si por ejemplo se quisiese modificar para utilizar el directorio dbf delMAPSET actual la orden sería (para el usuario 1):

:∼> db.conect driver=dbf database=/disco1/datos/CursoGRASS/usuario1/dbf

El módulo v.db.connect enlaza un mapa vectorial a una tabla incluida en una base de datos. Si se acti-varon los parámetros de conexión con db.connect (driver, base de datos y en su caso esquema), no esnecesario volver a especificarlos.

87

Page 100: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

db.connect Establece la conexión por defecto entre capas vectoriales y tablas de atributosv.db.connect Establece el enlace entre una capa vectorial y una tabla de atributosdb.tables Obtiene un listado de tablasdb.columns Obtiene un listado de las columnas de una tabladb.describe Descripción completa de las columnas de una tabladb.copy Copia una tabla de una base de datos a otradb.login Permite pasar al servidor de bases de datos el nombre y contraseña del usuariodb.test Comprueba la conexión a una base de datosdb.select Lanza una consulta de selección a la tabla enlazada a una capa vectorialdb.execute Lanza una consulta de actualizaciónv.db.column Permite poblar la tabla enlazada a una capa vectorial con atributos

geométricos de los objetosv.what.rast Permite poblar la tabla enlazada a una capa vectorial (puntos) con atributos

muestreados de una capa rasterv.rast.stats Permite poblar la tabla enlazada a una capa vectorial (lineas o polígonos)

con atributos muestreados de una capa rasterv.sample Muy similar a v.what.rast

Tabla 4.1: Módulos que van a utilizarse en este capítulo

Ejemplos:

• Ver las características del enlace del mapa con su base de datos:

:∼> v.db.connect -p hidrologia

• Ver los nombres y tipos de las columnas de la tabla enlazada:

:∼> v.db.connect -c municipios

• Enlazar una mapa con una base de datos con las opciones por defecto establecidas con db.connect:

:∼> v.db.connect municipios table=poblacion key=cat

• Enlazar una capa vectorial con una tabla en formato dbf situada en una base de datos (directorio)distinta:

:∼> v.db.connect map=vectormap table=table key=cat database=/datos/dbf

88

Page 101: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> v.db.connect map=vectormap table=table layer=1 key=cat driver=dbfdatabase=/datos/dbf

• Enlazar una mapa con una tabla en formato PostgreSQL ubicada en un servidor diferente:

:∼> v.db.connect map=vectormap table=table layer=1 key=oid \driver=pg database="host=myserver.itc.it,dbname=mydb,user=name" \table=mytable key=id

4.3 Gestión de la base de datos

Existen módulos para consultar las tablas y columnas disponibles en una determinada base de datos.

db.tables

Hace un listado de las tablas de una base de datos. Si los valores por defecto de los parámetros driver ydatabase se activaron con db.connect no es necesario volver a especificarlos.

:∼> db.tables -p

Si se quieren utilizar otros valores diferentes a los disponibles por defecto estos deben especificarse alescribir la orden:

:∼> db.tables driver=dbf database=un_directorio_dbf

db.columns

Hace un listado de las columnas de una tabla. Si se activaron los parámetros de conexión con db.connect,no es necesario volver a especificarlos.

:∼> db.columns tabla

Si se quieren utilizar otros valores diferentes a los disponibles por defecto estos deben especificarse alescribir la orden:

:∼> db.columns tabla driver=dbf database=un_directorio_dbf

89

Page 102: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

db.describe

Hace una descripción más completa de las columnas disponibles en una tabla

:∼> db.describe tabla

Si se quieren utilizar otros valores diferentes a los disponibles por defecto estos deben especificarse alescribir la orden:

:∼> db.describe tabla driver=dbf database=un_directorio_dbf

db.copy

Copia una tabla de una base de datos a otra pudiendo gestionarse ambas con drivers distintos.

Parámetros:

• from_driver=nombre (nombre del driver de la tabla de entrada, no es necesario si se especificó condb.connect)

• from_database=nombre (nombre de la base de datos de la tabla de entrada, no es necesario si seespecificó con db.connect)

• from_table=nombre (tabla de entrada)

• to_driver=nombre (nombre del driver de la tabla de entrada, es necesario especificarlo)

• to_database=nombre (nombre de la base de datos de la tabla de salida, es necesario especificarlo)

• to_table=nombre (tabla de salida)

• where=nombre (condición que se impone a las filas para ser copiadas)

• select=nombre (orden SELECT de SQL completa, sólo se copiaran las filas que cumplen la condi-ción especificada). Si se incluye el parámetro select no deben incluirse ni from_table ni where yaque irán incluidos en la propia sentencia SQL.

En el siguiente ejemplo se va a hacer una copia de la tabla poblacion a otra base de datos postgreSQL:

:∼> db.copy from_driver=pg from_database=CursoGRASS from_table=poblacionto_driver=pg to_database=curso2 to_table=poblacion

El siguiente ejemplo exporta una base de datos en formato DBF a formato PostgreSQL:

:∼> db.copy from_driver=dbf from_database=./ \from_table=observatoriosto_driver=pg\

90

Page 103: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

to_database="host=deimos.inf.um.es,dbname=clima" \to_table=observatorios

4.4 GRASS y SQL

Puesto que la gestión de bases de datos pasa a ser un elemento fundamental en el manejo de GRASS,es necesario utilizar lenguaje el SQL. Sin embargo desde GRASS sólo se admite SQL con PostgreSQL.Concretamente las funciones y operadores de SQL que pueden utilizarse son:

• Funciones:

– ALTER TABLE tabla ADD [COLUMN] columndef

– CREATE TABLE tabla ( columndefs )

– DROP TABLE tabla

– SELECT columnas FROM tabla

– SELECT columnas FROM tabla WHERE condición

– DELETE FROM tabla

– DELETE FROM tabla WHERE condición

– INSERT INTO tabla valores

– INSERT INTO tabla ( columns ) valores

– UPDATE tabla SET asignaciones

– UPDATE tabla SET asignaciones WHERE condición

• Operadores

– "=" : igual a

– "<" : menor que

– "<=" : menor o igual que

– ">" : mayor que

– ">=" : mayor o igual que

– "<>" : no igual

– " " : Substring matching

SQL no admite ’.’ (puntos) en los nombres de tablas. Sólo se admiten números y letras y el primercarácter debe ser una letra.

91

Page 104: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

4.4.1 db.select

Devuelve el resultado de una consulta SQL, esta puede introducirse en linea de comandos o desde unfichero. Si se activaron los parámetros de conexión con db.connect, no es necesario volver a especificar-los.

:∼> echo "select * from carreteras" | db.select

:∼> cat file.sql | db.select

:∼> db.select sql=file.sql

EjemplosPara seleccionar todos los registros de la tabla roads:

:∼> db.select -c driver=odbc database=g51test table=roads sql=file.sql> result.csv

Para seleccionar solo algunos registros en función de los valores de sus atributos:

:∼> echo "SELECT * FROM archsites WHERE str1 <> ’No Name’" | db.select

Seleccionar sólo registros con valor nulo en un atributo:

:∼> echo "SELECT * FROM archsites WHERE str1 IS NULL" | db.select

Seleccionar pares de coordenadas de una tabla alamacenada en formato PostGIS:

:∼> echo "SELECT x(geom),y(geom) FROM observatorios" | db.select

en este caso geom es el nombre de la columna que contiene datos espaciales

Se requieren paréntesis para evitar ambigüedades al procesar consultas con operadores aritméticos ológicos, por ejemplo:

:∼> echo "select * from tabla where (3*(campo - otro_campo) > 5)"|db.select

Las cadenas de caracteres deben situarse entre comillas simples.

92

Page 105: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

4.4.2 db.execute

Este módulo ejecuta una orden SQL (distinta a SELECT).

Ejemplos:

• Crear una nueva tabla pasando la orden directamente en linea de comandos:

:∼> echo ’CREATE TABLE suelos ("cat" int, "tiposuelo" varchar(30))’| db.execute

• Insertar valores

:∼> echo "INSERT INTO suelos (cat,tiposuelo) VALUES(1,’bueno’)"|db.execute

:∼> echo "INSERT INTO suelos (cat,tiposuelo) VALUES(2,’malo’)"|db.execute

• Actualizar los valores de la tabla con nuevos valores basados en reglas SQL:

:∼> echo "UPDATE suelos SET tiposuelo=’regular’ WHERE cat=1" | db.execute

• Añadir una nueva columna:

:∼> echo "ALTER TABLE suelos ADD COLUMN pendiente double" | db.execute

• Eliminar una tabla (no todos los drivers lo permiten):

:∼> echo "DROP TABLE suelos" | db.execute

• Crear una nueva tabla utilizando un fichero con la consulta SQL:

:∼> db.execute consulta.sql

El contenido de consulta.sql podría ser por ejemplo:

93

Page 106: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

CREATE TABLE suelosb (cat int, tiposue varchar(30));INSERT INTO suelosb (cat,tiposue) VALUES(1,’bueno’);INSERT INTO suelosb (cat,tiposue) VALUES(2,’malo’);UPDATE suelosb SET tiposue=’regular’ WHERE cat=1;ALTER TABLE suelosb ADD COLUMN pendiente double;

4.4.3 Ejemplo de sesión de trabajo con PostgreSQL

:∼> db.connect driver=pg database="host=deimos.bio.um.es,dbname=cursoGRASS"

La siguiente orden establece cual es el nombre y la contraseña del usuario:

:∼> db.login user=usuario1 pass=secret

A continuación podemos obtener un listado con las tablas disponibles:

:∼> db.tables -p

Finalemente podemos hacer una consulta sobre los atributos utilizando sentencias SQL:

:∼> echo "SELECT * FROM municipios WHERE cod_comarca=1" | db.select

4.5 Mantenimiento de tablas

La modificación de tablas enlazadas a capas espaciales puede hacerse desde GRASS o directamentedesde un cliente de bases de datos como psql.

GRASS incorpora una serie de módulos para gestión directa:

• Para añadir una columna v.db.addcolumn

• Para eliminar una columna v.db.dropcol

• Para renombrar una columna v.db.renamecol

• Para crear una nueva tabla y enlazarla directamente a una capa vectorial v.db.droptable

• Para actualizar una tabla v.db.update

Para ejecutar estos módulos el usuario debe tener permiso tanto de consulta como de modificación sobrela tabla.

94

Page 107: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

4.6 Incorporación de información geométrica a una tabla: v.to.db

El módulo v.to.db carga una base de datos con información geométrica extraida de los objetos presentesen un mapa vectorial (superficies y perímetros de los polígonos, longitudes de lineas, posiciones de lospuntos, etc.). Permite por tanto incorporar a la tabla asociada a un mapa vectorial información espacialextraida de este.

Al cargar propiedades geométricas de un mapa vectorial en la tabla enlazada, se ha de hacer por columnasy estas deben existir anteriormente en la tabla, si no es así deberán crearse con el el módulo db.executeElsiguiente ejemplo muestra como almacenar información geométrica sobre el mapa de municipios:

:∼> echo ’ALTER TABLE municipios3 add column "area" float, \"perimetro" float)’|db.execute

:∼> v.to.db map=municipios type=area option=area column=area units=k

:∼> v.to.db map=municipios type=boundary option=length column=perimetrounits=k

Si el módulo se ejecuta muy despacio y los atributos están almacenados en una base de datos externacomo PostgreSQL, es conveniente crear un índice en la columna clave (category).

FIELD 1:type count min maxpoint 0 0 0line 1379 1 1379boundary 0 0 0centroid 0 0 0area 0 0 0all 1379 1 1379

4.7 Integración raster-vectorial

Uno de los aspectos más interesantes en un SIG es la integración de la información almacenada en rastery en vectorial. Los siguientes módulos permiten incorporar información procedente de una capa raster ala tabla enlazada a una capa de objetos vectorial.

4.7.1 v.what.rast

Es similar a v.what.vect pero en lugar de muestrear sobre un vectorial muestrea sobre un raster. Elsiguiente ejemplo añade a la tabla de vértices geodésicos el correspondiente valor de elevación queaparece en el Modelo Digital de Elevaciones.

95

Page 108: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> v.db.addcol vertices50 column="MDE float"

:∼> v.what.rast vertices_50 column=MDE raster=MDE

4.7.2 v.rast.stats

Calcula 9 estadísticos de una variable cuantitativa almacenada como capa raster utilizando como unidadesde muestreo los diferentes polígonos presentes en una capa vectorial. Crea una columna por estadísticos.Si el número de celdillas de la capa raster de entrada es muy alto, la ejecución de este módulo será muylenta.

El parámetro colprefix permite establecer un prefijo para el nombre de las columnas que contendrán losestdísticos.

La opción por defecto calcula 9 estadísticos (número de celdillas, mínimo, máximo, rango, media,desviación típica, varianza, coeficiente de variación y suma). Con la opción -e calcula además la medi-ana el primer y tercer cuartil y el percentil especificado con el parámetro percentile.

4.7.3 v.sample

Este módulo permite comparar valores almacenados en una columna de la tabla de atributos con los val-ores almacenados en el mismo punto en una capa raster. Puede usarse por ejemplo para validar resultadosde interpolación.

Por ejemplo asumiendo que disponemos de una capa vectorial llamada precipitación en los queaparecen puntos con valores de precipitación real (columna real), la orden:

:∼> v.sample precipitacion column=real output=diferencia raster=precipitacion

Muestreará la capa raster precipitacion, que contiene la precipitación interpolada y guardará ladiferencia entre el valor rea ly el estimado en la columa diferencia.

96

Page 109: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 5

Edición gráfica y alfanumérica

5.1 Objetivos

1. Aprender a digitalizar con GRASS

2. Conocer los diferentes módulos que permiten manipular, corregir y reconstruir topología en capasvectoriales con GRASS.

5.2 Digitalización: v.digit

GRASS dispone de una potente herramienta de digitalización: v.digit.

Al ejecutar este módulo debemos añadir la opción -n si queremos crear una nueva capa. Si la capa yaexiste no es necesario especificarlo. Admite además el parámetro bgcmd con el que podremos entrarun conjunto de ordenes de visualización de GRASS (entrecomilladas y separadas por ;) que servirán defondo sobre el que digitalizar.

Así, si queremos crear una nueva capa y digitalizarla sobre la capa raster de elevaciones, la orden ade-cuada sería:

:∼>v.digit -n nueva_capa bgcmd="d.rast MDE"

v.digit Módulo para digitalización vectorialv.category Gestión de identificadores de objetosv.build Módulo de reconstrucción topológicav.clean Módulo de corrección topológicav.centroids Gestión de centroides de polígonosv.build.polylines Módulo para creación de polilíneas a partir de tramosv.split Módulo para partir polilíneas

Tabla 5.1: Módulos que van a utilizarse en este capítulo

97

Page 110: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.1:

Una vez creada la capa, las siguientes sesiones de v.digit para completar su digitalización se iniciaríancon la orden:

:∼>v.digit nueva_capa bgcmd="d.rast MDE"

5.2.1 Barra de herramientas

Al pulsar [return] obtendremos la ventana que aparece en la figura 5.1.

Al pulsar algunos de estos botones situados en las dos filas superiores , la ventana nos mostrará en suparte inferior el modo de utilizar los tres botones del ratón para obtener el resultado deseado.

El botón de configuración ( ) da acceso a una ventana con cuatro pestañas con las que podemos modi-ficar algunas características del manejo de v.digit:

• Simbology: Permite modificar la codificación de colores con la que se presentan las característicastopológicas de los diferentes objetos (figura 5.2).

• Settings: Modificar el umbral de snap y el ancho de las lineas (figura 5.3).

• Table: Ver las características de la tabla enlazada al mapa(figura 5.4).

• Background: Modificar las órdenes de visualización que forman el fondo de la imagen (figura5.5).

Para hacer efectivos los cambios sobre el monitor gráfico deberemos pulsar el botón de redibujar ( ).

98

Page 111: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.2: Simbología por defecto de v.digit

Figura 5.3: Selección del umbral de snapping y el ancho de linea

99

Page 112: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.4: Diseño de la tabla enlazada

Figura 5.5: Selección de las imágenes de fondo para digitalizar

100

Page 113: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Podemos cambiar el zoom y movernos por el mapa con los botones correspondientes ( , y ).Podemos también seleccioar la región por defecto ( ) o una región almacenada en la base de datos(botón )

Finalmente el botón Guardar y salir ( ) hace una reconstrucción definitiva de la topología y sale delprograma.

Incomprensiblemente, v.digit no tiene la opción de deshacer un cambio. Por ello es razonable salir decuando en cuando y hacer copias de seguridad.

Si se sale de v.digit si el botón Guardar y salir el programa no reconstruira la topología, por lo quedeberemos hacerlo inmediatamente con el módulo v.build.

5.2.2 Edición geométrica

Los vértices de una linea o límite de polígono pueden ser cambiados de posición ( ) o eliminados ( ).También pueden añadirse nuevos vértices a una linea ( ). En caso de que movamos un nodo inicial ofinal hacia otro nodo estos se unirán si la distancia que queda entre ellos es inferior al umbral de snapping.

El botón de editar linea ( ) sirve para continuar la digitalización de una linea despues de haber modifi-cado la región de trabajo con un zoom o con el botón de desplazamiento.

Si queremos partir una linea puede utilizarse el botón . Resulta útil cuando estamos digitalizandolímites de polígono y es necesario romper uno de ellos para crear un nodo al que debe llegar un nuevolímite.

El botón de mover objetos ( ) permite desplazar objetos enteros. Finalmente el botón de eliminar obje-tos ( ) borrará el objeto seleccionado tras haber pedido confirmación.

5.2.3 Categorías y atributos

Las opciones de digitalización de entidades ( , , y ) permiten seleccionar un valor de categoríao dejar que por defecto se adopte el siguiente valor no utilizado (figura 5.6), si la opción de insertarun nuevo registro en la tabla está activada, también podremos introducir los valores correspondientes alobjeto. En caso de que no exista una tabla enlazada al mapa se producirá un mensaje de error.

El botón de modificación de categorías ( ) permite cambiar la categoría de un objeto, mientras que conel botón ( ) puedes copiar categorías de unos objetos a otros.

El botón de edición de atributos ( ) devolverá una ventana con los valores de la fila enlazada al objetosobre el que se ha pinchado en el monitor gráfico (figura 5.7). En ella podemos modificar directamentelos atributos.

5.2.4 Reconstrucción de topología sobre la marcha

El módulo v.digit es capaz de reconstruir la topología de toda la capa vectorial cada vez que el usuariomodifica la geometría. Los resultados nos los muestra representando los distintos elementos con difer-entes colores. Estos colores se pueden alterar con la opción Symbology a la que se accede a través delbotón de configuración. En la figura 5.2 aparecen los colores por defecto.

101

Page 114: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.6: Selección de categorías para los nuevos elementos digitalizados

Figura 5.7: Ventana de edición de atributos

102

Page 115: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.8: Ejemplo de reconstrucción automática de topología con v.digit (1)

En la figura 5.8 vemos un ejemplo con el mapa de municipios de la Región de Murcia. Los nodosadyacentes de dos o más arcos aparecen en verde, los nodos sueltos en rojo. Los arcos que separandos polígonos correctos (incluyendo el polígono exterior) aparecen en verde, los que separan un sólopolígono correcto en naranja y los que no definen ningún polígono en gris. La simple eliminación de esteúltimo provoca una reconstrucción topológica y la alteración de los colores (figura 5.3).

Los nodos se representan con una X mientras que los centroides y puntos aparecen como signo +.Los puntos en negro, los centroides que definen un polígono correcto en azul, los centroides situadosen polígonos incorrectos en dorado y los centroides suplicados dentro de un polígono correcto en rosa(figura 5.2).

5.3 Identificadores de los objetos: v.category

En GRASS los identificadores de los diversos objetos presentes en una capa vectorial se denominancategorías. Estos identificadores pueden modificarse uno a uno con v.digit o en conjunto con el módulov.category.

Para utilizar este módulo hay que introducir el nombre del mapa de entrada (parámetro input) el de salida(parámetro output), el tipo de objetos al que lo queremos aplicar (parámetro type), por defecto se aplicaa todos, y la acción a ejecutar (parámetro option).

Las acciones posibles son:

• add, añade identificadores a los objetos, el primer número utilizado es el valor asignado al parámetrocat, los siguientes se obtienen añadiendo sucesivamente el valor asignado al parámetro step

• del, borra todos los identificadores

103

Page 116: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.9: Ejemplo de reconstrucción automática de topología con v.digit (2)

• sum, suma a los identificadores el valor asignado al parámetro cat

• chlayer, permite cambiar el layer en que se encuentran los objetos seleccionados

• report, devuelve estadísticos básicos de los identificadores

• print, hace un listado de todos los identificadores utilizados

El siguiente ejemplo muestra como extraer un informe sobre los identificadores de un mapa vectorial:

:∼>v.category in=municipios option=report

FIELD 1:type count min maxpoint 0 0 0line 1379 1 1379boundary 0 0 0centroid 0 0 0area 0 0 0all 1379 1 1379

El siguiente ejemplo borra todas las categorías:

:∼>v.category in=municipios out=mapa_salida option=del

104

Page 117: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

observa que nos obliga a crear un nuevo mapa con los polígonos sin identificadores y mantiene inalteradoel mapa original

Los valores de los identificadores pueden también modificarse, el siguiente ejemplo suma un dos a todoslos identificadores de la capa original:

:∼>v.category in=municipios out=mapa_salida option=add step=2

FIELD 1:type count min maxpoint 0 0 0line 1379 1 2757boundary 0 0 0centroid 0 0 0area 0 0 0all 1379 1 2757

Finalmente podemos añadir identificadores/centroides a un mapa vectorial que no tiene

:∼>v.category in=wkt out=wktnew option=add

Los resultados pueden comprobarse con d.what.vect.

5.4 Reconstrucción de topología: v.build

Crea topología para mapas vectoriales de GRASS. Utiliza los siguientes parámetros:

• map Nombre del mapa de entrada

• error Nombre del mapa en el que se guardaran los vectores erroneos

• option Construir topología o y or dump topology or spatial index to stdout

– build - construye la topología

– dump - vuelca la información topológica a la salida estandard

– sdump - vuelca el índice espacial a la salida estandard

– cdump - vuelca el índice de categorías a la salida estandard

La opción por defecto es build

El módulo v.build.all ejecuta v.build en todos los mapas de la capa vectorial.

Este módulo se basa en una función de librería que es ejecutada por todos los módulos que generan comosalida una capa vectorial para generar la topología de la misma.

105

Page 118: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

5.5 Corrección automática de topología: v.clean y v.centroids

El módulo v.clean es una herramienta que permite resolver de manera automática la mayoría de losproblemas topológicos que suelen presentarse en capas importadas desde ficheros que no almacenan estetipo de información (shape, dxf, etc.).

Para prevenir problemas, nos obliga a crear una nueva capa con los resultados.

Name of output map where errors are written

Las herramientas de corrección topológica se pasan con el parámetro tool y son:

• break: Rompre las lineas en todas las intersecciones.

• snap: Acerca los nodos suelos al vértice más cercano dentro del umbral definido por el parámetrothreshold

• rmdangle: Elimina dangles de tamaño inferior al umbral definido por el parámetro threshold

• chdangle: Cambia el tipo de linea de boundary a line si este es de tamaño inferior al umbraldefinido por el parámetro threshold

• rmbridge: Elimina puentes que aparezcan conectando polígonos con polígonos isla o 2 polígonosisla.

• chbridge: Cambia a line los boundary que aparezcan conectando polígonos con polígonos isla o2 polígonos isla.

• rmdupl: Elimina geometrías duplicadas.

• rmdac: Elimina centroides duplicados.

• bpol: rompe los perímetros de polígonos importados de formatos sin topología (como los Shape-File) en los puntos en que estos se Boundaries are broken on each point shared between 2 and morepolygons where angles of segments are different

• prune: Elimina vértices de las lineas o perímetros, en este último caso sólo si la topología no se veafectada. Los nodos inicial y final de las lineas no resultan modificados. Los límites de polígonosólo son eliminados si la topología no resulta comprometida por nuevas intersecciones o si se alterala posición topológica de un centroide respecto a los límites.

• rmarea: Elimina áreas pequeñas integrándolas con el mayor de los polígonos adyacentes.

• rmline: Elimina lineas o perímetros de longitud cero.

• rmsa: Elimina angulos pequeños entre lineas, sólo aquellos tan pequeños que al calcularse elángulo el resultado es cero. Este umbral no puede modificarse.

• thresh=: Umbral en unidades del mapa. Puede utilizarse un umbral diferente para cada her-ramienta. Los valores por defecto son cero.

La opción -b debe utilizarse cuando no queremos que el módulo reconstruya la topología tras la operaciónrealizada. Sólo afecta al mapa output, pero no al error.

106

Page 119: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

5.5.1 Ejemplos

En primer lugar vamos a arreglar un mapa de polígonos digitalizados como una sóla linea cerrada enlos que además los nodos inicial y final no coinciden y uno de los polígonos tiene un centroide de más.También queremos que las lineas se rompan en cada uno de los cruces. La llamada a v.clean incluiría lasherramientas snap, break y rmdac, lógicamente sólo snap necesita un valor de tolerancia:

:∼> v.clean -o pruebas_clean1 output=pruebas_clean1b tool=snap,break,rmdacthresh=0.005,0,0

En la figura 5.10 podemos ver los resultados, mientras que la figura 5.11 muestra el resultado de añadirautomáticamente centroides a los polígonos generados con la orden anterior, para ello utilizaremos elmódulo v.centroids.

Este módulo permite introducir centroides en una capa de polígonos que no dispone de ellos, el parámetrocat nos indica el valor a partir del cual deben asignarse categorías a los nuevos centroides. La orden esla siguiente:

:∼> v.centroids -o pruebas_clean1b output=pruebas_clean1c cat=3

:∼> v.clean -o pruebas_clean1d output=pruebas_clean1e tool=rmarea thresh=0.02

El efecto de las herramientas rmbridge y chbridge puede verse en las figuras 5.12 y 5.13.

:∼> v.clean -o pruebas_clean2 output=pruebas_clean2b tool=rmbridge

:∼> v.clean -o pruebas_clean2 output=pruebas_clean2c tool=chbridge

El siguiente ejemplo muestra como eliminar polígonos con una superficie inferior a un umbral dado:

:∼> v.clean -o pruebas_clean3 output=pruebas_clean3b tool=bpol,rmdupl

La figura 5.15 muestra el resultado de la eliminación de dangles con v.clean:

:∼> v.clean -o pruebas_clean5 output=pruebas_clean5b tool=rmdangle thresh=0.5

107

Page 120: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.10: Primer paso de corrección topológica

Figura 5.11: Adición de centroides a los polígonos generados.

Figura 5.12: Eliminación de arcos entre polígonos isla.

108

Page 121: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 5.13: Transformación de arcos entre polígonos isla por lineas

Figura 5.14: Ruptura de polígonos y eliminación de arcos duplicados con v.clean.

Figura 5.15: Eliminación de dangles con v.clean.

109

Page 122: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

5.6 Crear y descomponer polilíneas: v.build.polylines, v.split

v.build.polylines construye polilineas a partir de lineas rectas presentes en un mapa vectorial. Algunosprocedimientos de importación/exportación de datos rompen las polilineas en lineas rectas.

Si las lineas que forman una polilinea son de distintos tipos (lineas y arcos), v.build.polylines mantendráel mismo tipo que la primera linea y lanzará un aviso (a menos que se haya activado la opción -q). Silas lineas que forman la polilinea tieneen diferentes atributos, v.build.polylines asignará a la polilinea elatributo de la última linea.

v.build.polylines maneja correctamente mapas de entrada conteniendo lineas, arcos y puntos. Las lineasy arcos se convertirán en polilineas del tipo de la primera. Los arcos de área sólo se preservan si las lineasque las forman son también arcos de área.

La operación inversa a v.build.polylines puede realizarse con v.split.

Este módulo divide cada linea en segmentos del mismo tamaño aproximado. Puede especificarse eltamaño máximo de los segmentos (parámetro length) o el número máximo de segmentos (parámetrovertices)

5.7 Digitalizar un raster (r.digit)

En algunos casos puede interesar el utilizar cómo máscara un área irregular que no existe como mapay que no puede obtenerse de forma sencilla a partir de operaciones de álgebra de mapas. Un ejemplopueden ser áreas homogéneas en un análisis visual de una imagen de satélite o fotografía aérea digital.La manera de generar un mapa que contenga ese área y que, por tanto, pueda utilizarse posteriormentecómo máscara, es utilizar el comando r.digit que permite digitalizar directamente polígonos de formaarbitraria sobre una capa raster. El manejo es sencillo, antes que nada hay que definir el objeto que se vaa digitalizar: (polígono, círculo o linea), hay que asignar un objeto y una categoría a cada objeto creadoy, finalmente decirle al programa cómo se va a llamar el mapa creado.

Please choose one of the followingA define an areaC define a circleL define a lineX quit (and create map)Q quit (whithout creating map)>

el menú de ratón posterior permite digitalizar uno a uno los vértices de la linea o polígono, o bien definirel centro y radio de un círculo. Al terminar de digitalizar el objeto se nos pide un identificador numéricoy una etiqueta de texto para el objeto creado y se vuelve al menú inicial. Si en este se pulsa la letra X elprograma termina preguntando por el nombre de la capa raster que va a contener los objetos digitalizados.Si se pulsa la letra Q el módulo terminará sin crear el mapa.

110

Page 123: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 6

Herramientas de geoprocesamientovectorial

Por geoprocesamiento se entiende una serie de herramientas que, aplicadas al formato vectorial, permitenllevar a cabo tareas de modelización cartográfica similares a las del álgebra de mapas.

6.1 Objetivos

1. Aprender adigitalizar con GRASS

2. Conocer los diferentes módulos que permiten manipular, corregir y reconstruir topología en capasvectoriales con GRASS.

v.extract Módulo para la extracción de objetos en función de valores temáticosv.select Modulo para la extracción de objetos según un criterio espacialv.reclass Módulo para modificar los identificadores de los objetos en función

del resultado de una consulta SQLv.dissolve Módulo para disolver límites entre polígonosv.overlay Módulo para la superposición de objetosv.distance Módulo para el cálculo de distancias entre objetosv.buffer Módulo para generar áreas de influenciav.hull Módulo para generar un conjunto convexov.delaunay Módulo para generar una triangulación de Delaunayv.voronoi Módulo para generar polígonos de Thiessen

Tabla 6.1: Módulos que van a utilizarse en este capítulo

111

Page 124: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

6.2 Selección temática: v.extract

Permite seleccionar objetos procedentes de un mapa vectorial y crear un nuevo mapa que contiene sólolos objetos seleccionados. La selección se realiza en función de los identificadores de los objetos ode los valores almacenados en la tabla de atributos enlazada al mapa utilizando sentencias SQL con elparámetro where. Por tanto sólo se extraerán objetos que tengan un identificador asignado, generalmentea los límites de polígono no se les asigna identificador por lo que este deberá asignarse con v.category

Por defecto los objetos conservan su identificador y por tanto se copia la tabla de atributos de la capa deentrada (rellena sólo con las filas correspondientes a los polígonos extraidos).

Cabe la posibilidad de asignar un único identificador a los diferentes objetos utilizando el parámetronew. En este caso, y utilizando la opción -d, se disolverán los límites de los polígonos adyacentes.

Ejemplos

:∼> v.extract list=1-12 input=municipios type=area output=extraccion

Produce un nuevo mapa de polígonos (extraccion) que contiene los polígonos con identificadores de1 a 12 (figura 6.1);

:∼> v.extract municipios where=’cod_comarc=5’ output=extraccion

La nueva capa vectorial contendrá sólo los municipios situados en la comarca 5, la tabla de atributos seconserva (figura 6.1);

:∼> v.extract where=’cod_comarc=5’ input=municipios

output=extraccion new=1

La nueva capa vectorial contendrá sólo los municipios situados en la comarca 5, pero ahora sin conservarla tabla de atributos ya que todos los polígonos han recibido un identificador 1;

:∼> v.extract -d where=’cod_comarc=5’ input=municipios output=extraccionnew=1

Igual que en el caso anterior pero se disuelven los límites entre polígonos adyacentes ya que todos tienenel mismo identificador(figura 6.1).

6.3 Selección espacial: v.select

El módulo v.select permite seleccionar objetos de un mapa vectorial a partir de los objetos presentes enotro.

Los parámetros más importantes de este módulo son:

112

Page 125: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 6.1: Resultados de los 3 ejemplos de v.extract presentados en el texto, en cada caso los polígonosen rojo son los que han resultado de la extracción

113

Page 126: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• ainput, nombre de la capa que contiene los objetos que se van a seleccionar,

• atype tipo de objetos en la capa a los que afectará la selección (point,line,boundary,centroid,area)por defecto afectará a todos,

• binput Nombre de la capa que contiene las unidades de selección,

• btype tipo de objetos en la capa a los que afectará la selección (point,line,boundary,centroid,area)por defecto afectará a todos,

• output, nombre de la capa vectorial de salida.

Por defecto, v.select copiará a la capa de salida la tabla de atributos de la capa de entrada ainput. Paraevitarlo debe utilizarse la opción -t .

Como ejemplo va a crearse un rectángulo que servirá para seleccionar:

:∼> echo "B 5 0592500 4227847592500 4162994677820 4162994677820 4227847592500 4227847C 1 1620000 42000001 1"|v.in.ascii -n --o fs=" " output=marco format=standard

La siguiente orden selecciona sólo aquellos municipios que intersectan con el rectángulo previamentedefinido. El resultado puede verse en la figura 6.2.

:∼> v.select ainput=municipios binput=marcooutput=seleccion

En el último ejemplo, se seleccionan aquellos observatorios meteorológicos situados en el municipio deMurcia. Para ello se extrae de la capa de municipios una capa temporal que contiene sólo el municipiode Murcia (identificador=31). El resultado puede verse en la figura 6.3.

:∼> v.extract municipios output=temp where="ident=31" :∼> v.select ainput=vertices50

binput=temp output=clima_31

Al igual que trabajando con capas raster, en muchas ocasiones será necesario crear capas temporales. Esconveniente utilizar siempre el mismo nombre (temp o temporal son nombres adecuados) para evitaruna proliferación de capas de contenidos dudosos.

114

Page 127: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 6.2: Resultado de v.select, los polígonos en rojo son los que han resultado de la selección

Figura 6.3: Selección de los observatorios meteorológicos ubicados en el municipio de Murcia

115

Page 128: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

6.4 Reclasificación: v.reclass

El módulo v.reclass permite al usuario crear un nuevo mapa vectorial basado en la reclasificación de otroanteriormente existente en función de los resultados de consultas SQL a la tabla de atributos.

Los parámetros de este módulo son:

• input Mapa de entrada

• output Mapa de salida

• rules Fichero de texto con las reglas de reclasificación

• column El nombre de los valores de las columnas que se utilizan como nuevas categorías. El tipode columna debe ser entero.

• type tipo de datos, las opciones son: point, line, boundary, centroid (por defectotodas)

El fichero de reglas de reclasificación debe contener en cada una de sus filas una palabra clave y unvalor (separados por un espacio) o un comentario precedido por el carácter #. La definición de una nuevacategoría comienza con la palabra clave cat seguido del nuevo valor, en la siguiente línea la palabra clavewhere hace referencia a una sentencia SQL para determinar que objetos serán afectados por cada regla.

Por ejemplo:

:∼> v.reclass municipios output=comarcas column=cod_comarc

Un ejemplo de fichero de reclasificación podría ser:

# land reclass filecat 1where cod_comarc = 1 or cod_comarc = 3cat 2where cod_comarc = 2 or cod_comarc = 5

La orden necesaria para utilizar este fichero de reclasificación , al que llamaremos reglas_reclas.txt, sería:

:∼> v.reclass municipios output=comarcas rules=reglas_reclas.txt

que produce un nuevo mapa vectorial de polígonos que contiene los límites de las áreas cuyos atributoscoinciden con la selección SQL:

No se crea ninguna tabla para el mapa reclasificado si se utiliza la opción columna y el tipo es entero.

116

Page 129: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 6.4: Resultado de v.disolve sobre el mapa reclasificado de comarcas

6.5 Fusión de polígonos: v.dissolve

Fusionar polígonos con igual identificador (categoría). En primer lugar vamos a ver cómo asignar a lascategorías valores en función de una columna de la tabla enlazada.

:∼> v.dissolve comarcas output=comarcas2

6.6 Superposición de capas vectoriales: v.overlay

El módulo v.overlay permite hacer operaciones simples de álgebra de mapas con dos capas vectoriales.En la versión actual sólo trabaja con relaciones entre polígonos o entre líneas y polígonos.

Los parámetros del módulo son:

• ainput Nombre del primer mapa vectorial de entrada

• atype Tipo del primer mapa vectorial de entrada, las opciones son line y area siendo estaúltima la opción por defecto.

• binput Nombre de la segunda capa vectorial de entrada

• btype Tipo del segundo mapa vectorial de entrada (sólo puede ser area)

117

Page 130: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• output Nombre del mapa vectorial de salida

• operator Operador de álgebra de mapas que se ejecuta, las posibilidades son:

– and : intersección

– or : unión (sólo si atype=area)

– not : entidades de ainput no cubiertas por binput

– xor : entidades de ainput o binput salvo aquellas de ainput cubiertas por binput (sólo paraatype=area)

El operador por defecto es or

A la capa de salida se asocia una tabla de atributos que agrupa los atributos de la tabla de entrada,a las columnas que corresponden con las de la capa ainput se les añade el prefijo a_ y a las quecorresponden con las de la capa binput se les añade el prefijo b_. Pero si se utiliza el parámetro -t nose creará esta tabla.

Por defecto este módulo crea un solo layer a cuyos identificadores se enlaza la tabla de atributo. Pero conla opción olayer pueden crearse dos layer más para recoger los identificadores de los objetos de las capasainput y binput. Para utilizar este parámetro hay que pasarle tres números separados por comas queson los identificadores de la layer común, la layer que recibe los identificadores de la capa ainput yla capa que que recibe los identificadores de la capa binput respectivamente. La opción por defecto es1,0,0 que crea una única layer 1 y le enlaza la tabla de atributos.

A continuación v.db.connect permitiría enlazar las tablas de las capas de entrada a las layers correspon-dientes. En todo caso sería preferible enlazar una copia ya que borrar la nueva capa implicaría borrar lastablas enlazadas. En general no es recomendable tener una capa enlazada a más de un mapa.

Para copiar tablas puede utilizarse el módulo db.copy

6.6.1 Intersección (and)

:∼> v.overlay ainput=hidrogeologia binput=municipios output=overlayand\operator=and

6.6.2 Unión (or)

:∼> v.overlay ainput=hidrogeologia binput=municipios output=overlayor\operator=or

118

Page 131: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

6.6.3 Diferencia simétrica (Or exclusivo, xor)

:∼> v.overlay ainput=hidrogeologia binput=municipios output=overlayxor\operator=xor

6.6.4 Diferencia (Not)

:∼> v.overlay ainput=hidrogeologia binput=municipios output=overlaynot\operator=not

Las tablas enlazadas a las capas municipios e hidrogeologia son respectivamente:

cat | ident | nombre | cod_comarc | comarca | poblacion | renta95 | renta00 | secano | regadio |parcela| presupuesto-----+-------+--------------------+------------+------------------------------+-----------+---------+---------+--------+---------+-------+---------------------

1 | 1 | Abanilla | 9 | Cuenca de Abanilla-Fortuna | 6568 | 36241 | 43346 | 11448 | 1212 | 5279 | 15502 | 2 | Abarán | 3 | Vega del Segura | 12968 | 69964 | 90101 | 1961 | 2953 | 5402 | 7353 | 3 | Águilas | 6 | Comarca de Lorca | 33134 | 163774 | 208927 | 2268 | 5101 | 8885 | 8094 | 4 | Albudeite | 4 | Cuenca de Mula | 1413 | 6464 | 8244 | 723 | 423 | 1015 | 10175 | 5 | Alcantarilla | 8 | Area metropolitana de Murcia | 39636 | 191690 | 262915 | 226 | 192 | 6800 | 7496 | 6 | Alcazares (Los) | 7 | Cartagena-Mar Menor | 14077 | 38036 | 68111 | 22 | 1048 | 5848 | 22377 | 7 | Aledo | 5 | Bajo Guadalentín y Mazarrón | 1046 | 5234 | 6371 | 1002 | 808 | 943 | 75788 | 8 | Alguazas | 8 | Area metropolitana de Murcia | 8572 | 40630 | 52478 | 321 | 1096 | 3264 | 8139 | 9 | Alhama de Murcia | 5 | Bajo Guadalentín y Mazarrón | 18996 | 94153 | 118211 | 7697 | 8039 | 7674 | 910

10 | 10 | Archena | 3 | Vega del Segura | 17634 | 85020 | 108778 | 16 | 1082 | 6283 | 123811 | 11 | Beniel | 8 | Area metropolitana de Murcia | 10294 | 46869 | 66529 | 0 | 680 | 2608 | 77912 | 12 | Blanca | 3 | Vega del Segura | 6119 | 33252 | 43714 | 132 | 2810 | 2429 | 357113 | 13 | Bullas | 1 | Noroeste | 12020 | 60772 | 81214 | 4344 | 710 | 5863 | 61614 | 14 | Calasparra | 1 | Noroeste | 10282 | 55757 | 69389 | 3544 | 2888 | 4499 | 160415 | 15 | Campos del Río | 4 | Cuenca de Mula | 2182 | 10679 | 13079 | 1726 | 616 | 1460 | 152616 | 16 | Caravaca de la Cruz| 1 | Noroeste | 25688 | 137990 | 181266 | 36649 | 5939 | 8105 | 107817 | 17 | Cartagena | 7 | Cartagena-Mar Menor | 207286 | 1140254 | 1474644 | 24327 | 11785 | 58088 | 88718 | 18 | Cehegín | 1 | Noroeste | 15798 | 83459 | 108578 | 6020 | 3685 | 7244 | 141119 | 19 | Ceutí | 3 | Vega del Segura | 9185 | 37986 | 52053 | 0 | 628 | 3982 | 115920 | 20 | Cieza | 3 | Vega del Segura | 34898 | 185998 | 234426 | 4108 | 9725 | 7256 | 831

cat | unidad | nombre | dominio | area | perimetro-----+--------+-------------------------------+---------+---------------+---------------

1 | 07.20 | ALTO QUIPAR | 3 | 271715040.356 | 90362.36699482 | 07.21 | BULLAS | 3 | 376950500.277 | 96253.06680913 | 07.22 | SIERRA DE ESPUÑqA | 5 | 697390597.929 | 162219.7353024 | 07.23 | VEGA ALTA DEL SEGURA | 6 | 30715649.2313 | 29721.44651985 | 07.24 | VEGAS MEDIA Y BAJA DEL SEGURA | 6 | 1182186797.67 | 200437.3938586 | 07.25 | SANTA-YECHAR | 5 | 69935359.5911 | 43114.25451697 | 07.26 | VALDEINFIERNO | 3 | 217433758.651 | 88026.75510258 | 07.27 | ORCE-MARIA | 3 | 400038657.831 | 96747.7078279 | 07.28 | ALTO GUADALENTIN | 6 | 300490433.895 | 103148.460796

10 | 07.29 | TRIASICO DE CARRASCOY | 5 | 131122684.578 | 63247.838472111 | 07.30 | BAJO GUADALENTIN | 1 | 390432622.806 | 139819.92362712 | 07.31 | CAMPO DE CARTAGENA | 7 | 1554038379.47 | 245974.88247813 | 07.32 | MAZARRON | 5 | 503710521.444 | 99186.214834214 | 07.33 | AGUILAS | 5 | 464204581.148 | 96472.108962815 | 07.34 | CUCHILLOS-CABRAS | 2 | 229453611.648 | 94807.60114816 | 07.35 | CINGLA | 2 | 414666083.581 | 141921.27612817 | 07.36 | CALAR DEL MUNDO | 2 | 178187033.352 | 64669.231337318 | 07.37 | ANTICLINAL DE SOCOVOS | 2 | 849700466.134 | 155293.39831719 | 07.38 | ONTUR | 2 | 172534458.902 | 67203.082514720 | 07.01 | SIERRA DE LA OLIVA | 2 | 367690115.224 | 76107.8891734

por lo que la tabla resultante tendrá las siguientes columnas:

119

Page 132: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

municipios acuiferos

and or

xor not

Figura 6.5: Resultados de v.overlay utilizando los operadores and, or, xor y not con las capas de munici-pios y unidades hidrogeológicas

120

Page 133: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

cata_cata_identa_nombrea_cod_comarca_comarcaa_poblaciona_renta95a_renta00a_secanoa_regadioa_parcelasa_presupuesto_per_capitab_catb_unidadb_nombreb_dominiob_areab_perimetro

6.7 Area de influencia: v.buffer

Este módulo crea un buffer alrededor de los objetos de un determinado tipo (los polígonos deben contenerun centroide).

Puede elegirse una distancia única para todos los objetos (parámetro buffer) o determinarla a partir deuna columna de la tabla asociada al mapa de entrada (parámetro bufcol).

Los atributos de los polígonos en las capas de entrada no se conservan en una tabla enlazada a la capa desalida debido a la posibilidad de que los buffers se superpongan lo que no puede ser resuelto de formaautomática. Por la misma razón, los límites entre los polígonos creados son disueltos.

El siguiente ejemplo crea círculos alrededor de un conjunto de puntos (figura 6.7)

:∼> v.buffer input=vertices50 output=vert_circulos type=point buffer=10000

Con el siguiente ejemplo se hará un buffer alrededor de las líneas del mapa de carreteras:

:∼> v.buffer input=carreteras output=buffer_car type=line buffer=500

Finalmente se hará un buffer alrededor de los polígonos de los acuíferos:

:∼> v.buffer -o hidrogeologia output=hidrogeologia_buf buffer=1000

121

Page 134: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 6.6: Resultado de v.buffer sobre el mapa de vértices geodésicos

Si los buffer de más de un objeto se han solapado obtendremos dos centroides lo que genera una incon-sistencia topológica que deberá resolverse con v.digit o v.clean.

En algunos casos pueden aparecer resultados extraños, sobre todo si el tamaño del buffer es mucho mayorque el de los objetos iniciales.

6.8 Distancias: v.distance

El módulo v.distance encuentra los objetos de una capa vectorial (from=) más cercanos a otra capavectorial (to=). La información referente a la relación (distancia o propiedades del objeto más cercanoen la capa to, incluyendo valores de su tabla de atributos) puede almacenarse en la tabla de atributosenlazada a la capa from o volcarse en el monitor de texto. Puede generarse un nuevo mapa con las lineasque conectan los puntos más cercanos.

Los parámetros from_layer, to_layer, from_type y to_type permiten determinar el layer y tipo deobjetos a los que se aplicará el análisis.

Los valores que quieren obtenerse deberán especificarse con el parámetro upload cuyas opciones másrelevantes son:

cat identificador

dist distancia

to_x coordenada X del punto más cercano del objeto

122

Page 135: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

to_y coordenada Y del punto más cercano del objeto

to_attr un conjunto de valores de la tabla de atributos que se especificarán con el parámetro to_column.

El parámetro column especifica los nombres que se darán a las columnas de información generadaspor el módulo, deben ser tantas como la suma de las opciones especificadas en el parámetro upload(descontando to_attr) más las especificadas con el parámetro to_column.

Si se incluye la opción -p los resultados se volcarán en la salida estándar (terminal de texto). Si no esasí se escribirán en las columnas de la tabla de atributos enlazada a la capa from que tengan los mismosnombres pasados con el parámetro column. Estas columnas deben existir con antelación, pudiendo habersido creadas con el módulo v.db.addcol.Finalmente el parámetro output generará una capa vectorial con las líneas que definen las mínimasdistancias.

A continuación se presentan algunos ejemplos:

1. Encontrar la carretera más cercana a cada uno de los vértices geodésicos y escribir las categoríasde las lineas en la columna linecat de la tabla enlazada al mapa pnt.

:∼>v.db.addcol vertices50 columns="linecat int" :∼>v.distance from=vertices50

to=carreteras upload=cat column=linecat

2. Para cada vértice geodésico encontrar el núcleo urbano más cercano y escribir los nombres deestos en la columna nucleo en la tabla de atributos enlazada a la capa de vértices geodésicos. Creaademás una capa vectorial con las lineas que unen los vértices al núcleo urbano más cercano encada caso.

:∼>v.db.addcol vertices50 columns="urbano varchar(50)"

:∼>v.distance from=vertices50 to=urbanos upload=nombre\column=urbano output=distancias

3. Punto en polígono: Puesto que si un punto en la capa from está dentro de un polígono en la capato la distancia computada es cero, puede determinarse en que municipio se encuentra cada vérticegeodésico:

:∼> v.distance from=vertices50 to=municipios dmax=0 upload=label \column=municipio

El parámetro dmax permite introducir una distancia máxima a contabilizar. De este modo se eliminan del cómputo los vértices situados fuera de la Región de Murcia.

123

Page 136: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 6.7: Capa de lineas resultado de la aplicación de v.distance sobre las capas de vértices geodésicosy núcleos urbanos

En principio el parámetro from sólo admite capas de puntos, pero en el caso de que los polígonospresentes en una capa fuesen considerablemente pequeños en relación a las distancias a evaluar,podrían extraerse los centroides y utilizarse como puntos de origen.

6.9 Obtención de geometrías a partir de capas de puntos

A partir de capas de puntos pueden extraerse diversas geometrías:

• Conjunto convexo

:∼> v.hull input=vertices50 output=vertices_hull

• Triangulación de delaunay

:∼> v.delaunay vertices50 output=vertices_delaunay

124

Page 137: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 6.8: Resultados de v.hull, v.delaunay y v.voronoi sobre el mapa de vértices geodésicos

• Polígonos de Thiessen (Voronoi)

:∼> v.voronoi vertices50 output=vertices_voronoi

De estos tres módulos sólo el último genera objetos que pueden conservar la tabla de atributos de la capade entrada.

125

Page 138: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

126

Page 139: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 7

Algebra de mapas

El álgebra de mapas constituye un conjunto de herramientas que van a permitir generar nuevas capasde información a partir de las capas preexistentes mediante operaciones aritméticas y lógicas, siempreen formato raster. El fundamento del álgebra de mapas es la consideración de las diferentes capas rastercomo matrices de datos de manera que los diferentes operadores de no son más que operaciones sobre unao varias matrices/capas que generan una nueva matriz/capa. Algunos de estos operadores se correspondencon operaciones habituales del álgebra matricial, pero otras son específicas del álgebra de mapas.

El número de posibles operadores es prácticamente infinito y , lógicamente, no todos van a implementarsecomo módulos de un SIG. Los operadores más simples o los menos habituales no se incorporan comomódulo para evitar sobrecargar el sistema de módulos. Para resolver estos casos se proporciona al usuarioun lenguaje de programación de operadores de álgebra de mapas y un módulo capaz de interpretar yejecutar estos programas. En el caso de GRASS este módulo es r.mapcalc.

7.1 Objetivos

1. Conocer r.mapcalc, el intérprete de GRASS de programas de álgebra de mapas

2. Conocer los diferentes módulos que implementan algoritmos de álgebra de mapas

7.2 Mapcalc

Los programas para r.mapcalc admiten un amplio conjunto de funciones y operadores de tipo aritméticoy lógico que permiten programar cualquier tipo de operador local o focal. Los programas para r.mapcalctienen la misma estructura que una ecuación matemática. Por ejemplo el programa:

mdecm=100*mde

Genera una nueva capa llamada mdecm que contiene los mismos valores que la capa mde pero ahoramultiplicados por 100. Si mde es una capa de elevaciones en metros, mdecm será una capa de elevacionesen centímetros.

127

Page 140: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

r.mapcalc Intérprete de lenguaje de álgebra de mapasr.reclass Reclasificación de celdillasr.neighbors Operador focal estadísticor.mfilter Operador de filtrador.slope.aspect Análisis de terrenor.clump Conversión de variable cualitativa en polígonosv.areas.sh Cálculo de áreasr.cost Cálculo de coste acumulador.drain Obtención de lineas de flujor.walk Cálculo de ruta óptimar.buffer Obtención de áreas tampónr.distancias Cálculo de distancias y objeto más cercano

Tabla 7.1: Módulos que van a utilizarse en este capítulo

Lo que hace r.mapcalc es aplicar el programa (la ecuación en definitiva) a cada una de las celdillas delmapa original y asignar el resultado a la misma celdilla del mapa de salida.

7.2.1 Ejecución de programas con r.mapcalc

Existen tres modos de ejecución de r.mapcalc

• Modo interactivo. El usuario teclea:

:∼>r.mapcalc

y a continuación el sistema presenta un nuevo prompt:

mapcalc>

tras el que deberemos teclear el programa en una sola linea. Tras teclear [RETURN] el programase ejecuta.

Este modo tiene el inconveniente de que cualquier error al teclear el programa nos obligará a repetirtodo el proceso, por lo cual es el menos recomendable.

• Modo linea de comandos. El usuario teclea el programa entero entrecomillado tras r.mapcalc.Por ejemplo:

:∼>r.mapcalc ’mdecm=100*mde’

Si nos hemos equivocado al introducir la orden bastará con recuperarla con la tecla [flecha haciaarriba] y editarla. El inconveniente es que programas un poco largos resultarán difíciles de editar.

Una opción es utilizar llamadas de este tipo dentro de un script de manera que todas juntas, juntoa otras órdenes de GRASS o del sistema., actúen como un programa.

128

Page 141: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• Modo archivo. Consiste en escribir el programa en un fichero aparte con un editor (por ejemplogedit) y a continuación llamar al programa.

:∼>r.mapcalc<mde100.mc1

Este modo resulta más adecuado para programas demasiado largos o complejos para ser editadosen una linea. También es útil para lanzar dos o más programas de una sola tacada. La figura ??muestra un programa de para r.mapcalc. El signo \ sirve para romper lineas en dentro del ficheroque el programa debe interpretar como una sola linea.

7.2.2 Operadores y funciones aritméticas en r.mapcalc

El lenguaje de programación de r.mapcalc admite gran número de operadores aritméticos y funciones,así como combinaciones entre diversos mapas. Los operadores aritméticos son:

• %. Módulo, resto de la división

• /. División

• *. Multiplicación

• +. Suma

• -. Resta

En cuanto a las funciones matemáticas, r.mapcalc admite varias de ellas:

• abs(x) Valor absoluto

• round(x) Redondeo

• int(x) Parte entera, conversión a número entero

• float(x) Conversión a número en coma flotante

• double(x) Conversión a número en coma flotante con doble precisión

• exp(x) Exponencial

• exp(x,y) o pow(x,y) xy

• log (x) Logaritmo

• max(x) Valor máximo

• min(x) Valor mínimo1La extensión no es necesaria, pero resulta útil para distinguir los archivos con programas para r.mapcalc del resto de los

archivos

129

Page 142: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• median(x) Mediana

• mode(x) Moda

• sqrt(x) Raíz cuadrada

• sin(x)2 Seno

• asin(x) Arco seno

• cos(x) Coseno

• acos(x) Arco coseno

• tan(x) Tangente

• atan(x) Arcotangnte

• atan(x,y) Arcotangente

Las diferentes funciones y los operadores pueden combinarse a voluntad. Por ejemplo la siguiente ex-presión:

:∼> r.mapcalc ’C=log(sqrt(B)/sin(A))’

tendría el siguiente efecto:

A B C

14 12 9 8 4 400 410 390 370 350 4.41 4.58 4.84 4.93 5.5911 9 7 4 4 350 340 320 350 340 4.58 4.77 4.99 5.59 5.582 1 1 1 4 300 320 310 330 345 6.21 6.93 6.92 6.95 5.582 2 2 1 4 290 300 305 325 340 6.19 6.21 6.22 6.94 5.582 2 1 1 4 285 285 300 305 350 6.18 6.18 6.9 6.91 5.59

7.2.3 Operadores y funciones lógicas con r.mapcalc

Los operadores lógicos implican evaluar una condición y ejecutar unas acciones u otras en función deque la condición se haya cumplido o no. La función de r.mapcalc para la evaluación de condiciones y laposterior ejecución selectiva de acciones es if. Esta función sigue el esquema:

:∼> r.mapcalc ’A=if(condicion,accion1,accion2)’

donde A es el mapa que se va a crear, condicion es la condición a evaluar, accion1 la función que crearáel mapa A si la condición es cierta y accion2 la función que creará el mapa A si es falsa. Los operadoreslógicos que pueden incluirse en la condición a evaluar son:

2las funciones trigonométricas operan con ángulos medidos en grados

130

Page 143: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• == Igual

• ! = No igual

• > Mayor que

• >= Mayor o igual que

• < Menor que

• <= Menor o igual que

• && Y lógico

• || O lógico

• not(x) devuelve verdadero si x es falso y viceversa

• xor(x,y) O exclusivo

La siguiente instrucción creará un mapa llamado A con valores 1 para las altitudes (mapa MDE) mayoresde 500 y 0 en el resto:

:∼> r.mapcalc ’A=if(MDE>500,1,0)’

En el siguiente ejemplo se trata de obtener una capa de elevaciones en el supuesto de una elevación de300 metros del nivel del mar:

:∼> r.mapcalc ’A=if(MDE>300,MDE-300,0)’

en este caso, el valor de 300 en el mapa MDE indica el punto de corte. A los valores superiores se les resta300 (ya que al subir el nivel del mar todos los valores de altitud sobre el nivel del mar se reducen) y losinferiores se transforman en cero ya que este es el valor de elevación en el nivel del mar.

350 340 320 290 280 50 40 20 0 0335 333 310 295 275 35 33 10 0 0335 330 320 305 270 35 30 20 5 0320 310 305 290 280 20 10 5 0 0325 315 310 300 290 25 15 10 0 0

Este último ejemplo refleja además como accion1 y accion2 pueden ser, no sólo un número, sino tam-bién operadores y funciones que tomen otras capas como argumentos, incluso otra función if() como enel siguiente ejemplo:

:∼> r.mapcalc ’usosb=if(usos<3,1,if (usos==3,3,2))’

El cual parte del mapa usos de usos del suelo con los siguiente valores:

131

Page 144: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

1 secano2 regadío3 improductivo4 matorral5 bosque

para crear un mapa usosb que contiene los siguiente valores:

1 cultivo (incluye los secanos y regadíos del mapa anterior)2 vegetación natural (incluye el matorral y el bosque del mapa anterior)3 improductivo

Sin embargo hay que tener en cuenta que r.mapcalc no añade etiquetas de texto al mapa de salida. Lamanera más sencilla de hacerlo sería mediante una recñasificación:

:∼> echo "1=1 Cultivo2=2 Vegetación natural3=3 Improductivo"|r.reclass usosb output=usosc

7.2.4 Valores nulos y creación de máscaras con r.mapcalc

En las primeras versiones de GRASS no existía una valor para indicar ausencia de valor y se debíautilizar para ello el 0. En las más recientes se ha introducido el valor NULL para distinguir entre valor 0y ausencia de valor. En general es preferible utilizar NULL incluso aunque el cero no represente un valorreal de una variable concreta.

En r.mapcalc se utiliza la función null() para generar un valor NULL, por ejemplo:

:∼> r.mapcalc ’A=if(MDE>50000,1,null())

Por otra parte hará falta una función especial para determinar si un valor es nulo o no (si es nulo notiene sentido preguntar si es mayor o menor que un número ya que la respuesta estará indeterminada). Lafunción para ello es isnull(). Por ejemplo si se quiere obtener un mapa con la elevación de los diferentesnúcleos urbanos y con valor NULL en el resto la fórmula sería:

:∼> r.mapcalc ’mde_urb=if(isnull(urbanos),null(),MDE)’

de manera que en las celdillas con valor NULL en el mapa de núcleos urbanos se mantuviera dicho valory en aquellas con valor no nulo se tomará el valor del mapa de elevación (MDE).

Como ya se vio en el capítulo dedicado a la visualización de capas de información espacial con GRASS,r.mapcalc puede utilizarse para crear máscaras. Para ello basta con tener en cuenta tres aspectos a la horade crear la orden:

• Puesto que en lugar de un mapa se va a crear una máscara, el mapa de salida debe denominarse�MASK. En sentido estricto es un mapa (podremos visualizarlo con d.rast MASK) pero GRASS

132

Page 145: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

lo utilizará para filtrar que celdillas deben visualizarse y analizarse y cuales no cuando trabajemoscon otros mapas,

• accion1 debe ser 1,

• accion2 debe ser null().

:∼> r.mapcalc ’MASK=if(usos==3,1,null())’

7.2.5 Operadores lógicos con varias condiciones

En la mayor parte de los casos las condiciones a evaluar son condiciones compuestas de varias subcondi-ciones. Estas deben concatenarse con los operadores && y ||. Por ejemplo, la instrucción

:∼> r.mapcalc A=if(B>0 && C<500,1,null())

creará una capa A que contendrá unos en aquellas celdillas en que B sea mayor de 0 y C menor de 500y NULL en el resto.

Este tipo de operadores multicondicionales pueden servir cuando las condiciones se refieren a rangos devalores más complejos, por ejemplo partiendo de la leyenda de usos del suelo que aparece en la figura7.1 la siguiente orden seleccionaría las áreas de bosque:

:∼> r.mapcalc ’bosque=if(usos>=11 && usos<=13 || usos==14,1,null())’

Se utilizan también en problemas de evaluación multicriterio, es decir cuando se requiere extraer laszonas que cumplen un conjunto complejo de criterios que las hacen adecuadas para determinadas activi-dades, por ejemplo la instrucción:

:∼> r.mapcalc ’balsa=if(usos==6 && MDE>300,1,null())’

seleccionará zonas de regadío con elevación mayor de 300 metros como los lugares ideales para, porejemplo, la construcción de una balsa de riego.

usos mde balsa4 4 4 4 4 400 410 390 370 350 NULL NULL NULL NULL NULL1 4 3 4 4 350 340 320 350 340 NULL NULL NULL NULL NULL2 1 1 1 4 300 320 310 330 345 NULL NULL NULL NULL NULL6 6 6 1 4 290 300 305 325 340 NULL NULL 1 NULL NULL6 6 1 1 4 285 285 300 305 350 NULL NULL NULL NULL NULL

133

Page 146: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 7.1: Leyenda de mapa de usos del suelo

7.2.6 Variantes de la operación if

La condición en una llamada a la función if puede ser lógica o aritmética, para ello se asimila un resultado0 a Falso y diferente de 0 a Verdadero. Ello permite ampliar las posibilidades de la función if con variasvariantes:

• if(condición) devuelve 1 si la condición es cierta y 0 en caso contrario.

• if(condición,a) devuelve a si la condición es cierta y 0 en caso contrario.

• if(condición,a,b) devuelve a si la condición es cierta y b en caso contrario.

• if(x,a,b,c) devuelve a si x>0, b si x=0 y c si x<0.

7.2.7 Funciones relacionadas con la posición y geometría de las celdillas

Existen una serie de funciones que nos permiten incluir la posición de cada celdilla individual en loscálculos, así como tener en cuenta la resolución de la capa raster:

134

Page 147: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• x() devuelve la coordenada X

• y() devuelve la coordenada Y

• col() devuelve la columna

• row() devuelve la fila

• ewres() devuelve la resolución este-oeste

• nsres() devuelve la resolución norte-sur

7.2.8 Cálculos intermedios: La función eval

La función eval permite introducir varias expresiones que evaluarán cálculos intermedios para suministrarvariables a la última expresión cuyo resultado será el que se guarde. De este modo podemos emplearvariables intermedias en los cálculos sin necesidad de hacer varias llamadas a r.mapcalc ni generarmapas temporales.

El siguiente programa implementa en 3 pasos la expresión z = 2x+ y, lógicamente para sacar partido ala función eval la expresión debe ser bastante más compleja.

r.mapcalc ’z=eval(a=2*x(),b=y(),a+b)’

El siguiente ejemplo muestra un caso algo más complejo:

r.mapcalc ’Z=eval(xx=(x()-636000)/1000,yy=(y()-4185000)/1000,\\-250*xx+yy+2*xx*xx+3*yy*yy+0.5*exp(xx,3)’

da lugar a la superficie matemática que aparece en la figura 7.2.

Figura 7.2: Superficie matemática generada con r.mapcalc

y que resulta de la siguiente función polinómica:

Z = −250 ∗ x+ y + 2 ∗ x2 + 3 ∗ y2 + 0.5 ∗ x3 (7.1)

135

Page 148: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 7.3:

donde x e y, obtenidas mediante cálculos intermedios, son coordenadas relativas en kilómetros respectoal punto X = 636000, Y = 4185000.

7.2.9 Interpolación a partir de un gráfico: La función graph

En ocasiones, la relación entre dos variables no se establece de forma explícita con una ecuación sino queaparece como un gráfico. Para abordar este tipo de funciones, r.mapcalc dispone de la función graph:

:∼> r,.mapcalc ’y=graph(x,x1,y1,x2,y2,..,xn,yn)’

Por ejemplo la orden para implementar la transformación del MDE que aparece en la figura 7.3 sería:

:∼> r,.mapcalc ’Z=graph(MDE,0,100,500,150,1000,275,1500,450,2000,500,2500,510)’

7.2.10 Operadores focales con r.mapcalc

Los operadores focales son aquellos en cuya resolución intervienen, no sólo valores extraidos de diversascapas para una misma celdilla, sino que también pueden intervenir valores situados en celdillas cercanas.

La sintaxis utilizada por r.mapcalc para hacer referencia a la celdilla central se basa en un sistema decoordenadas centrado en la celdilla para la que se realiza el cálculo (∆X = 0,∆y = 0) que se escribenentre corchetes:

136

Page 149: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

mapa[∆ Y,∆ X]

tal como aparece en la figura 7.4(b). Por ejemplo para la matriz que aparece en la figura 7.4(a), elsiguiente código:

r.mapcalc ’y=2*x[1,1]-3*x[1,0]+x[1,-1]+5*x[0,1]+2*x+x[0,-1]-2*x[-1,1]\+4*x[-1,0]-7*x[-1,-1]’

equivaldría en el caso de la celdilla central a la operación

y=2*3 - 3*6 + 9 +5*12 +2*32 + 12 -2*23 +4*43 - 7*44

Figura 7.4: Operadores focales con r.mapcalc

Lógicamente los desplazamientos pueden generalizarse a cualquier distancia, así para la misma celdillacentral el código:

r.mapcalc ’y=2*x[1,2]+6*x[-2,-2]’

equivaldría a

y=2*10 + 6*12

Puedes suponer que no existe limitación respecto a las distancias a que se encuentran las celdillas queintervienen en un cálculo.

7.2.11 Ejemplos

1. Modifica el mapa de elevaciones para que sus valores estén en metros en lugar de en centímetros

2. Sabiendo que el mapa de pendientes está expresado en tantos por ciento (es decir 100 ∗ tan(s)donde s es la pendiente en grados), calcular un mapa del coseno de la pendiente

137

Page 150: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

3. Con r.mapcalc crea un mapa que cumpla:

• Pendiente baja o moderada (según los criterios anteriores)

• El uso del suelo debe ser matorral o bosque

• Estar a menos de 500 m de la carretera

4. Se sabe que la temperatura aumenta, por termino medio, 0.65oC cada 100 metros. Suponiendo quela temperatura a nivel del mar es de 20oC crea un mapa de temperaturas

5. En un episodio de precipitación determinado, la cantidad de lluvia aumentó desde la costa hacia elinterior de la Región de Murcia a razón de:

δP

δX= 0.5mm/Km (7.2)

δP

δY= 0.75mm/Km (7.3)

(7.4)

Sabiendo que en Totana cayeron 24 mm de precipitación genera un mapa de precipitación paratoda la zona de trabajo.

7.3 Módulos para operadores locales de álgebra de mapas

Son aquellos que asignan a cada celdilla de las capas de salida un valor obtenido de los valores dela misma celdilla en las capas de entrada. El más sencillo es r.reclass que hace una reclasificación demapas.

7.3.1 Reclasificación

La modificación de una paleta de colores no evita el problema de las leyendas demasiado grandes enel caso de variables cuantitativas. Para solventarlo lo más efectivo es reclasificar los valores del mapapara transformar un mapa de variable cuantitativa en un mapa de variable cualitativa con una leyendarazonablemente corta para su visualización con d.legend.

El comando que hace reclasificación es r.reclass, se trata evidentemente de un operador local de álgebrade mapas que asigna a cada celdilla del nuevo mapa un valor en función del rango de valores al quepertenezca esa misma celdilla en el mapa de entrada. La ejecución del módulo es sencilla:

r.reclass input=mapa_entrada output=mapa_salida

Si lo ejecutamos tal cual deberemos introducir una a una las reglas de reclasificación, de modo similar ala opción rules de r.colors, y, al igual que en ese caso, es más eficiente crear un fichero con las reglas dereclasificación y redireccionárselo. La figura 7.5 es un ejemplo de reglas de reclasificación para un mapade elevaciones de la Región de Murcia. Suponiendo que este fichero se denomina reclass.txt, laorden quedaría:

r.reclass input=MDE output=MDE_clases<reclas.txt

138

Page 151: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 7.5: Ejemplo de reglas de reclasificación para un mapa de elevaciones de la Región de Murcia

Las reglas que aparecen en la figura 7.5, asignan, por ejemplo a los valores entre 0 y 500 el valor 1 (queserá el que se almacene en la celdilla correspondiente de la matriz de datos) y la etiqueta de texto “0 -500m” que aparecerá cuando ejecutemos r.what.rast o d.legend. Para indicar valores mayores que 2000 seutiliza el truco de establecer un umbral superior mucho mayor que el máximo valor esperable en el mapa.El resultado aparece en la figura 7.6.

7.4 Módulos para operadores de vecindad

El valor de cada celdilla de la capa de salida es función de los valores de un conjunto de celdillas,situadas en torno a ella, en la capa de entrada. Generalmente se trabaja con grupos cuadrados de celdillasy el tamaño de la vecindad corresponde a la anchura (o altura) en celdillas del cuadrado y será siempreun número impar. Por ejemplo

1 2 34 5 67 8 9

representa una vecindad de tamaño 3 centrada sobre la celdilla número 5, mientras que

1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25

representa una vecindad de tamaño 5 en torno a la celdilla número 13.

139

Page 152: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 7.6: MDE reclasificado con r.reclass

7.4.1 r.neighbors

Da a cada celda un valor que resulta del cálculo de un estadístico a partir de los valores de las celdillascircundantes en la capa de entrada.

r.neighbors input=capa_entrada output=capa_salida method=estadístico\

size=tamaño_de_la_vecindad

Los estadísticos que pueden utilizarse son:

• average, calcula la media aritmética de los valores del mapa de entrada en las celdillas de lavecindad y la asigna a la celdilla central en el mapa de salida

1 2 34 5 3 3.667 5 3

• median, calcula la mediana de los valores del mapa de entrada en las celdillas de la vecindad y laasigna a la celdilla central en el mapa de salida

1 2 34 5 3 37 5 3

• mode, calcula la moda de los valores del mapa de entrada en las celdillas de la vecindad y la asignaa la celdilla central en el mapa de salida

140

Page 153: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

1 2 34 5 3 37 5 3

• minimum, calcula el mínimo de los valores del mapa de entrada en las celdillas de la vecindad yla asigna a la celdilla central en el mapa de salida

1 2 34 5 3 17 5 3

• maximum, calcula el máximo de los valores del mapa de entrada en las celdillas de la vecindad yla asigna a la celdilla central en el mapa de salida

1 2 34 5 3 77 5 3

• stddev, calcula la desviación típica de los valores del mapa de entrada en las celdillas de la vecin-dad y la asigna a la celdilla central en el mapa de salida

1 2 34 5 3 1.87 5 3

• variance, calcula la varianza de los valores del mapa de entrada en las celdillas de la vecindad yla asigna a la celdilla central en el mapa de salida

1 2 34 5 3 3.257 5 3

• diversity, calcula el número de valores diferentes del mapa de entrada en las celdillas de la vecin-dad y la asigna a la celdilla central en el mapa de salida

1 2 34 5 3 67 5 3

• interspersion, porcentaje de celdillas que contienen valores diferentes al de la celdilla central

1 2 34 5 3 787 5 3

141

Page 154: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

7.4.2 r.mfilter

Permite crear operadores de vecindad que calculan una media ponderada de los valores de las celdillascircundantes

r.mfilter input=mapa output=mapa2 filter=archivo

Los parámetros input y output indican los mapas de entrada y salida y el parámetro filter un fichero quecontiene los criterios de filtrado escritos siguiendo unas reglas sencillas. Así, este comando funciona demodo similar a r.colors o r.reclass en el sentido de que debe utilizarse un pequeño archivo de texto en elque se especifique el filtro a utilizar. En la figura 9.7 se presentan dos ejemplos de filtro.

Figura 7.7: Dos ejemplos de filtros

Con estos ficheros vamos a pasar a r.mfilter los siguiente parámetros:

• TITLE: Es un texto descriptivo del filtro y su objetivo

• MATRIX: El tamaño de la matriz de filtrado n y a continuación n lineas, con n enteros separadospor al menos un espacio, cada una. El valor n debe ser un número impar igual o mayor que 3.Representa la matriz de coeficientes de ponderación por los que se multiplicará cada una de lasceldillas de la ventana.

• DIVISOR: El número por el que se va a dividir el resultado de sumar los valores hallados en lemapa multiplicados por los especificados en la matriz de filtrado, si no se especifica el valor pordefecto es 1. Si se especificó 0 como divisor, el programa calcula el divisor como la suma de losvalores de la matriz en los que el valor de la celdilla era diferente de cero. Se consigue así unamedia ponderada.

• TYPE: Filtro de tipo S significa que es secuencial mientras que el tipo P significa que es paralelo.En un filtro secuencial, los valores ya procesados se utilizan para procesar los siguientes, mientrasque en un filtro paralelo los valores del mapa de entrada se conservan para realizar todos loscálculos.

El proceso de filtrado produce un nuevo valor para cada celdilla en el fichero de entrada multiplicandolos valores de las celdillas incluidas en la ventana n x n, sumando todos los resultados y dividiendo esa

142

Page 155: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

suma entre el divisor especificado. Si se especificó 0 como divisor, el programa calcula el divisor comola suma de los valores de la matriz en los que el valor de la celdilla era diferente de cero. Se consigue asíuna media ponderada.

Si se incluye más de un filtro en el fichero, o si el valor asignado a repeat es mayor de 1, los filtros seejecutan secuencialmente uno detrás de otro hasta que, al finalizar el proceso, los resultados se escribenen el fichero de salida.

Algunos ejemplos del resultado de diversas matrices de filtrado puede verse a continuación:

1 2 3 1 1 14 5 3 1 1 1 3.667 5 3 1 1 1

1 2 3 1 1 14 5 3 1 2 1 3.87 5 3 1 1 1

1 2 3 -1 1 -14 5 3 1 2 1 17 5 3 -1 1 -1

Este tipo de operadores de vecindad se utilizan mucho en teledetección para resaltar u ocultar elementosen la visualización de imágenes de satélite.

7.4.3 Análisis de terreno: r.slope.aspect

Un MDE contiene información altimétrica de la que se pueden derivar diversos mapas con parámetrostopográficos y geomorfológicos (pendientes, orientaciones, formas, áreas drenadas, visibilidad, etc.), elconjunto de estos mapas se conoce como Modelo Digital de Terreno (MDT).

La práctica totalidad de los mapas derivados puede obtenerse mediante el módulo r.slope.aspect. Si eje-cutas r.slope.aspect help verás que es necesario introducir una capa de entrada (elevaciones) y podemosseleccionar una o varias capas de salida (los diferentes parámetros).

De momento vamos a ser generar un mapa de pendientes y otro de orientaciones que son los más fre-cuentemente utilizados:

r.slope.aspect elevation=mdecm slope=pend aspect=asp pcurv=cur_perf \tcurv=cur_trans zfactor=0.01 min_slp_allowed=5

El parámetro zfactor indica cual es el factor por el que hay que multiplicar las unidades del mapa deelevaciones para obtener metros, puesto que el mapa mdecm está en centímetros el valor será 0.01. Elparámetro min_slp_allowed, que por defecto no se utiliza, sirve para determinar un valor mínimo dependiente para calcular la orientación, es conveniente utilizarlo porque no tiene mucho sentido calcularorientaciones en celdillas con pendiente cercana a cero, estando además este cálculo más sujeto a errorescuanto menor sea la pendiente.

143

Page 156: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

7.5 Operadores de vecindad extendida

Son aquellos en los que el valor que recibe cada celdilla en la capa de salida depende de un conjunto deceldillas en la capa de entrada que no se conocen a priori sino que se determinan por el mismo operador.

7.5.1 r.clump

Reclasifica los datos en un mapa raster agrupando celdas contiguas que contienen el mismo valor dán-doles un valor único.

:∼> r.clump input=nombre_mapa output=nombre_mapa2

Este módulo resulta útil cuando se necesita individualizar manchas homogéneas. Por ejemplo cuandoqueremos analizar cada una de las parcelas de matorral por separado en lugar de todo el suelo ocupadopor matorral en conjunto. En el siguiente ejemplo aparecen 3 clases, cada una de ellas define un valor enuna variable cualitativa, al aplicar r.clump se convierten en 7 polígonos con identificador distinto.

1 1 1 2 2 1 1 1 2 23 3 1 1 2 3 3 1 1 23 1 1 2 2 r.clump 3 1 1 2 22 1 1 1 1 4 1 1 1 11 2 3 3 3 5 6 7 7 7

Date cuenta, en la esquina inferior izquierda de la tabla de que r.clump sólo hace movimientos de torreno movimientos de rey es decir que se considera que dos celdillas que sólo comparten una esquina noforman parte del mismo objeto.

7.5.2 r.drain

Genera la ruta que seguiría una pelota dejada en un punto del terreno (parámetro coordinate) siguiendoel camino de máxima pendiente. El mapa de elevaciones se le pasa al módulo mediante el parámetroinput. El parámetro output indica cual será el mapa que contiene la ruta.

:∼> r.drain input=name output=name coordinate=x,y

Los parámetros input y output hacen referencia al mapa de entrada y salida respectivamente, el parámet-ros coordinate indica el punto desde el que se inicia la modelización.

La siguiente tabla muestra el resultado que tendría r.drain en un modelo de elevaciones partiendo de laesquina superior izquierda.

144

Page 157: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

8 8 9 8 6 1 0 0 0 07 6 5 6 7 0 1 1 0 07 6 6 4 5 r.drain 0 0 0 1 06 5 4 2 3 0 0 0 1 06 5 3 2 1 0 0 0 0 1

7.6 Operadores de área

Son aquellos en los que el valor que recibe cada celdilla en la capa de salida depende de un conjunto deceldillas en la capa de entrada que se conocen a priori. La ubicación de estas áreas se almacena en unade las capa de entrada.

7.6.1 r.statistics

El comando básico para obtener estadísticos de una variable cuantitativa para diferentes valores de unavariable cualitativa (o para diferentes polígonos) es r.statistics. Este módulo permite calcular diversosestadísticos:

• distribution Distribución de valores

• average Media

• mode Moda

• median Mediana

• avedev Desviación media

• stddev Desviación típica

• variance Varianza

• skewness Sesgo

• kurtosis Curtosis

• min Valor mínimo

• max Valor máximo

Todas estas opciones generan una capa raster salvo la primera que genera un listado con la frecuencia deaparición de cada combinación de variable cualitativa y cuantitativa

La orden para determinar, por ejemplo, la altitud media en distintos tipos de uso de suelo sería:

:∼> r.statistics base=usos cover=MDE method=average output=dev_altitud

145

Page 158: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

El parámetro cover indica la capa raster que contiene la variable cuantitativa, el parámetro base la caparaster que contiene la variable cualitativa y el parámetro method el estadístico que se va a calcular.Finalmente en output se consigna el nombre de la capa de salida que va a contener los valores delestadístico.

Este módulo no genera, por tanto, una tabla de datos sino una nueva capa raster en la que a cada celdillale corresponde el estadístico calculado para su valor en la capa de variable cualitativa. En la siguientetabla se muestra un ejemplo de la orden anterior. La parte de la izquierda muestra el mapa base, la centralel mapa cover y la de la derecha el resultado:

1 1 1 2 2 10 18 19 12 12 21.3 21.3 21.3 23.1 23.13 3 1 1 2 31 23 21 21 12 26.8 26.8 21.3 21.3 23.13 1 1 2 2 13 12 18 25 22 26.8 21.3 21.3 23.1 23.12 1 1 1 1 24 21 31 31 32 23.1 21.3 21.3 21.3 21.32 2 3 3 3 34 44 35 29 30 23.1 23.1 26.8 26.8 26.8

Este módulo tiene el inconveniente de que sólo admite valores enteros en el mapa cover.

7.6.2 r.areas.sh

Otro operador de área de interés es r.areas.sh. Este simplemente calcula el área ocupada por cada polí-gono o por cada clase de una variable cualitativa y asigna este valor a los polígonos o clases correspondi-entes en el mapa de salida. Permite seleccionar la unidad de medida de superficie (utilizando las mismasabreviaturas que con el comando r.report. Por ejemplo:

:∼> r.areas.sh input=urbanos output=urbanos units=k

nos dará un mapa en el que cada núcleo urbano recibirá su extensión (lógicamente las zonas no urbanascuyas celdillas contienen valor NULL seguirán con este valor. En el siguiente ejemplo se aprecia elcomportamiento de r.areas.sh asumiendo que las unidades pedidas son celdillas (units=c).

1 1 1 2 2 11 11 11 8 83 3 1 1 2 6 6 11 11 83 1 1 2 2 r.areas 6 11 11 8 83 1 1 1 1 6 11 11 11 112 2 2 3 3 8 8 8 6 6

Este módulo no está disponible en la distribución oficial de GRASS.

7.7 Operadores de bloque

Los operadores de bloque actúan de forma similar a los focales pero en lugar de aplicar la ventana a cadauna de las celdillas desplazandola celdilla a celdilla, se aplica a bloques completos del mismo tamaño de

146

Page 159: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

1 2 3 4 5 4 N N N N N N4 5 3 3 4 3 N 3.7 3.8 4 4.2 N7 5 3 6 5 4 N 4.8 4.3 4.3 4.8 N7 5 4 5 6 7 N 5.5 5.3 5.7 6.1 N7 5 7 8 7 7 N 6.1 6.2 6.9 7.3 N7 5 8 9 8 9 N N N N N N

Tabla 7.2: Ejemplo de operador de vecindad para el cálculo de la media

1 2 3 4 5 4 3.7 3.7 3.7 4.2 4.2 4.24 5 3 3 4 3 3.7 3.7 3.7 4.2 4.2 4.27 5 3 6 5 4 3.7 3.7 3.7 4.2 4.2 4.27 5 4 5 6 7 6.1 6.1 6.1 7.3 7.3 7.37 5 7 8 7 7 6.1 6.1 6.1 7.3 7.3 7.37 5 8 9 8 9 6.1 6.1 6.1 7.3 7.3 7.3

Tabla 7.3: Ejemplo de operador de bloque para el cálculo de la media

la ventana y asignando el mismo resultado a todas las celdillas incluidas dentro del bloque. Las figuras7.2 y 7.3 muestran la diferencia entre un operador de vecindad y otro de bloque. En ambas se aplica unoperador de media al mismo conjunto de datos.

Los operadores de bloque suponen un remuestreo que permite llevar a cabo cambios de escala en lascapas raster, tal como aparece en la figura 7.3 el resultado puede considerarse como un aumento deltamaño de las celdillas.

Otra diferencia importante entre los operadores de vecindad y los de bloque es que mientras que losprimeros exigen definir una vecindad de un número impar de celdillas, con los operadores de bloquepueden definirse ventanas de cualquier tamaño.

El módulo r.resamp.stats permite calcular estadísticos (suma, media, mediana, desviación típica, var-ianza, mínimo, máximo, primer cuartil, tercer cuartil y percentil 90) por bloques en una capa raster yasignar los resultados a otra capa en la que las celdillas coinciden con aquellos. Los bloques vienendefinidos por la región de trabajo.

La opción -w permite ponderar el cálculo en función de la proporción que cada celda de la capa deentrada ocupe en el bloque.

:∼> r.resamp.stats -w input=MDE output=MDE_av method=average

147

Page 160: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

7.8 Operadores globales

7.8.1 r.cost

Produce un mapa del coste acumulado que conlleva viajar desde un punto del mapa a cualquier otropunto del mapa:

:∼> r.cost -k input=mapa output=mapa coordinate=x,y

La opción -k fuerza al programa a usar “movimientos Rey” en lugar de “movimientos de torre”, de estemodo se fuerza al programa a tener en cuenta posibles desplazamientos en la diagonal, es un proced-imiento más lento pero más exacto. Los parámetros input y output hacen referencia al mapa de entraday salida respectivamente.

En la siguiente tabla aparece un ejemplo de obtención de un mapa de coste acumulado desde la celdillacentral a partir de un mapa de costes de entrada.

1 1 1 2 2 5 3 2 3 43 3 1 1 2 5 4 2 2 43 1 1 2 2 r.cost 5 2 1 3 42 1 1 1 1 4 2 2 2 31 2 3 3 3 3 4 5 5 5

Como puede verse, la capa resultante se asemeja a un embudo deformado, si pensamos en ella como enuna capa de elevaciones vemos que las rutas de mayor pendiente marcan la ruta de mínimo coste. Estehecho es importante ya que permite utilizar el módulo r.drain visto anteriormente para construir rutasde mínimo coste a través de una capa de coste acumulado.

Una alternativa a la utilización de r.cost-r.drain para obtener mapas de ruta óptima es el módulo r.walkdiseñado para modelizar el recorrido de una persona. Toma como entrada un modelo de elevacionesy un mapa de fricción en función del terreno. El resultado es un mapa raster con la ruta óptima. Lascoordenadas de los puntos de salida y llegada pueden introducirse de forma numérica en la orden o biénse pueden introducir varios puntos de salida y varios de llegada en mapas vectoriales.

7.8.2 r.buffer

Crea zonas buffer (áreas tampón) alrededor de un objeto o conjunto de objetos. Se define como objetoen un mapa raster un conjunto de celdillas adyacentes con valores no nulos. CELDILLAS CON VALORCERO DEFINEN POR TANTO UN OBJETO.

:∼> r.buffer input=mapa output=mapa distances=valor,valor,...

El parámetro input es el mapa de entrada que contiene los objetos, el parámetro output es el mapa de sal-ida que contiene los puntos situados entre distintos umbrales de distancia. Puede utilizarse el parámetrounits indica las unidades en las que se calcula la distancia (la opción por defecto es meters).

148

Page 161: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

7.8.3 r.distancias

Ese módulo calcula las distancia a un objeto o conjunto de objetos. Las diferencias respecto a r.bufferson:

• Genera un mapa de distancias (expresado en metros) y no de zonas situadas entre determinadosumbrales de distancia

• Genera además un mapa en el que a cada celdilla le asigna el identificador del objeto más cercano(existen otros posibles mapas de salida pero no van a ser tratados aquí)

• Puede utilizar como entrada una capa con el coste de atravesar una determinada celdilla (parámetrocost), de esta manera se genera una capa de coste acumulado similar a la que se obtiene con r.cost

• Este módulo no está disponible en la distribución oficial de GRASS, lo puedes bajar de las páginasdel proyecto yerba3 en la Universidad de Murcia.

:∼> r.distancias input=capa coste=capa_coste dist_map=capa alloc_map=capa

El parámetro input es el mapa de entrada que contiene los objetos, el parámetro dist_map es el mapa desalida que contiene los puntos situados entre distintos umbrales de distancia, finalmente el parámetro al-loc_map indica el nombre del mapa que contendrá el identificador del objeto más cercano. El parámetrocost es opcional y hace referencia a la capa de coste que se va a utilizar.

En la figura 7.8 aparece en la parte alta el mapa de núcleos urbanos y el resultado de la ejecución der.buffer. En la parte baja el mapa de distancias y el de núcleo más cercano resultado de la ejecución der.distancias.

3www.um.es/ geograf/sigmur/yerba

149

Page 162: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 7.8: Ejemplo de salida de r.buffer y r.distancias

150

Page 163: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 8

Generación de mosaicos

8.1 Mosaico raster

El módulo r.patch crea una capa raster a partir de la concatenación de dos o más capas previamenteexistentes. Suele utilizarse también para rellenar areas sin dato o para actualizar un mapa con informaciónmás reciente.

El mapa resultante tendrá las dimensiones y la resolución de la región de trabajo actual y respetará lamáscara activa si la hubiere.

El primer nombre de capa introducido en la lista de entrada será el primero con cuyos datos se rellenarála matriz resultante, el segundo mapa se utilizará a continuación, pero sus valores sólo se utilizarán enaquellas celdillas que hayan quedado sin valor en el paso anterior, y así sucesivamente.

A continuación pueden verse dos ejemplos:

1 1 1 0 2 2 0 0 0 0 1 1 0 0 0 0 1 1 1 1 2 2 0 01 1 0 2 2 2 0 0 0 0 1 1 0 0 0 0 1 1 1 2 2 2 0 03 3 3 3 2 2 0 0 0 0 0 0 0 0 0 0 3 3 3 3 2 2 0 03 3 3 3 0 0 0 0 4 4 4 4 4 4 4 4 3 3 3 3 4 4 4 43 3 3 0 0 0 0 0 4 4 4 4 4 4 4 4 3 3 3 4 4 4 4 40 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

0 0 1 1 0 0 0 0 1 1 1 0 2 2 0 0 1 1 1 1 2 2 0 00 0 1 1 0 0 0 0 1 1 0 2 2 2 0 0 1 1 1 1 2 2 0 00 0 0 0 0 0 0 0 3 3 3 3 2 2 0 0 3 3 3 3 2 2 0 04 4 4 4 4 4 4 4 3 3 3 3 0 0 0 0 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4

El módulo v.mkgrid permite que los mapas se alineen limpiamente.

Es conveniente revisar la región de trabajo antes de ejecutar este módulo para asegurar que los límites deestá permiten incluir toda la extensión del mapa que queremos crear y que la resolución es la adecuada.Para modificar los parámetros de la región de trabajo puede utilizarse el módulo g.region.

151

Page 164: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

A continuación se va a crear una lista de mapas que comienzan con el mismo nombre y a crear unmosaico con todos ellos.

:∼> MAPS=‘g.mlist type=rast sep=, pat="map_*"

:∼> g.region rast=$MAPS

:∼> r.patch in=$MAPS out=mosaic

8.2 Mosaico vectorial

El módulo v.patch crea una nueva capa vectorial combinando dos o más capas previamente existentes.

Si existen elementos duplicados entre las capas unidas, deberán editarse a posteriori. Esta edición puederealizarse automáticamente con el módulo v.clean utilizando la opción (tool=snap,break,rmdupl).

:∼> v.patch input=municipios,carreteras out=municipios_carreteras

La opción -a permite yuxtaponer los mapas de entrada a un mapa preexistente que se introduce en elparámetro output:

:∼> g.copy vect=roads,transport

:∼> v.patch -a input=railroads output=transport -overwrite

La opción -e permite copiar también la tabla enlazada, pero sólo la correspondiente a la capa 1.

El parámetro bbox permite crear una nueva capa vectorial que contendrá los límites de los diferentesmapas de entrada.

152

Page 165: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 9

Teledetección

9.1 Almacenamiento de imágenes de satélite en GRASS

Una imagen de satélite contiene niveles digitales, es decir una variable cuantitativa, y normalmente serepresenta con niveles de gris como si se tratara de una fotografía en blanco y negro. La diferencia deuna imagen de satélite respecto a una capa raster es que está formada por varias de ellas (una por cadabanda) por tanto en algunas aplicaciones (especialmente georreferenciación y clasificación) es necesariocodificar explícitamente esta interdependencia.

La solución adoptada en GRASS es definir unas estructuras específicas que se denominan group y sub-group (grupo y subgrupo) con el módulo i.group. Cada grupo consiste en un subdirectorio denominadocon el nombre del grupo y se almacenan en un subdirectorio específico bajo el MAPSET activo (al mismonivel que /cell, /cellhd, etc.) denominado /group. Dentro de él hay un subdirectorio para cada grupo conel nombre que el usuario le haya asignado (figura 9.1). Los grupos tienen los siguientes contenidos:

• REF: Fichero ascii conteniendo todas las capas que forman el grupo

• POINTS: Archivo que contiene los puntos de control obtenidos en el proceso de georreferen-ciación de la imagen. Este fichero se genera con el módulo i.points.

• TARGET: LOCATION y MAPSET al que se trasladarán las imágenes una vez georreferenciadas.Este fichero se genera con el módulo i.target

• subgroup: Subdirectorio conteniendo los subgrupos

El propósito de los subgrupos es incluir diferentes bandas de una misma imagen para clasificar esta. Unsubgrupo está compuesto por todas o algunas de las capas que forman el grupo de imagen. El contenidode los subdirectorios de subgrupo es:

• REF: Fichero ASCII conteniendo todas las capas que forman el subgrupo (todas ellas debenpertenecer al grupo en que se incluye este subgrupo)

153

Page 166: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 9.1: Subdirectorios de GRASS para el almacenamiento de imágenes de satélite

• sig: Subdirectorio que contiene ficheros ASCII con las propiedades estadísticas (vector de mediasy matriz de correlaciones) de un conjunto de clases estos ficheros se generan con los módulosi.cluster, i.class o i.gensigset y se utilizan por módulos que realizan la clasificación como i.maxliko i.smap.

• points: Fichero con los puntos de control obtenidos tras ejecutar i.points para georreferenciar laimagen

Los módulos utilizado en GRASS para analizar imágenes de satélite comienzan con la letra i. Sin em-bargo muchos de los módulos de análisis de capas raster (los que comienzan con r.) o de visualización(los que empiezan con d.) son también útiles.

El primer paso será siempre leer los ficheros que contienen las imágenes de satélite tal como nos hanllegado del proveedor para crear las correspondientes capas raster en GRASS.

Según el formato de los ficheros que se han recibido, podríamos utilizar la utilidad gdalinfo que formaparte de la librería gdal1 (Geospatial Data Abstraction Library) para examinar el contenido del fichero yobtener metainformación sobre el mismo.

Para hacer la importación propiamente dicham se utiliza el módulo r.in.gdal, este módulo utiliza lalibrería gdal que permite pasar información raster entre la práctica totalidad de los múltiples formatosraster, comerciales o no, existentes.

1www.gdal.org

154

Page 167: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> r.in.gdal input=fichero_de_entrada output=capa_raster_de_salida

Este módulo comprueba que el sistema de referencia espacial del fichero de entrada coincida con el dela location donde se va a incorporar, si no es así lo advierte y da dos alternativas:

• Crear una nueva LOCATION para la capa (opción location)

• Saltar la comprobación con la opción -o

Esta segunda opción sólo es aconsejable en aquellos casos en que sabemos que el sistema de referenciaes el mismo pero que no está codificado en el fichero de entrada (por desgracia esto ocurre con práctica-mente todos los datos espaciales).

En el caso de imágenes de satélite sin georreferenciar, la opción más lógica es incorporarlas a una locationsin sistema de referencia para posteriormente georreferenciarlas y transferirlas a una location con sistemade referencia.

Una vez importada cada una de las bandas de la imagen como una capa raster independiente, es elmomento de crear el grupo de imagen con i.group:

:∼> i.group group=imagen input=banda1,banda2,...

donde banda1, banda2,... son cada una de las capas raster conteniendo información de una banday imagen un nombre para la imagen.

9.2 Visualización

9.2.1 Máscaras

Algunas de las operaciones habituales en teledetección, implican el cálculo de estadísticos a partir de losniveles digitales de toda la imagen. En estos casos hay que tener precaución ya que si la imagen tienegrandes zonas sin información relevante (zonas en negro sin datos, zonas de alta nubosidad, superficiesmarinas) estas pueden tener un peso excesivo y falsear los resultados en las zonas de interés.

Por ello es conveniente generar máscaras sencillas para realizar los cálculos. Basta con ejecutar r.digitpara obtener una capa raster con el polígono sobre el que se va a hacer el análisis y posteriormenteejecutar:

:∼> r.mapcalc ’MASK=mascara’

donde mascara es la capa generada con r.digit.

155

Page 168: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

9.2.2 Modificación de las paletas de color

Ya se ha visto en el capítulo 2 sección como pueden modificarse las paletas de colores con GRASS conel módulo r.colors que permite asignar una paleta de color preestablecida. En teledetección serán deutilidad toda las variantes de niveles de gris:

• grey, niveles de gris

• grey255, para utilizar la misma paleta en todas las bandas independientemente de sus rangos devalores de ND

• grey1.0, para valores de reflectividad o de probabilidad de pertenencia

• grey.eq, para para hacer una ecualización del histograma de la banda

• grey.log, equivale a una transformación logarítmica de los ND

La paleta ndvi es adecuada para índices de vegetación, finalmente la opción rules permite definir lapaleta de color mediante un fichero de texto (ver la tabla ). Esta opción será útil, por ejemplo, paraasignar colores al resultado de una clasificación.

El cambio de paleta de color no modifica los datos originales, simplemente su presentación gráfica.También afectará a las composiciones de color que se hagan a partir de las bandas.

9.2.3 Composiciones de color

Existen diversos módulos que permiten generar una composición de color a partir de tres capas de infor-mación (tres bandas en el caso de una imagen de satélite) que utilizan paletas de niveles de gris.

El módulo d.rgb permite definir que bandas ocuparán los canales de vídeo rojo, verde y azul mostrandola composición en el monitor gráfico:

:∼> d.rgb red=banda_3 green=banda_2 blue=banda_1

Si el objetivo es obtener una nueva capa con la composición resultante, deberá utilizarse el módulor.composite que también genera composiciones de color a partir de tres bandas que se pasan por loscanales rojo, verde y azul, pero permitiendo especificar un nombre para la capa de salida:

:∼> r.composite red=banda_3 green=banda_2 blue=banda_1 output=composicion

En ambos casos los resultados cambiarán de forma notable en función del tipo de paleta de niveles de grisutilizada, en general los mejores resultados se obtienen con histogramas ecualizados (paleta grey.eq).

Otro módulo para hacer composiciones de color específico para landsat es i.landsat.rgb que analizael histograma de cada una de las bandas desechando valores extremos antes de recalibrar la paleta decolores de cada una de las bandas. El resultado es una composición más natural.

156

Page 169: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> i.landsat.rgb red=tm.3 green=tm.2 blue=tm.1

Cada composición de color es una combinación de tres bandas cuya cantidad de información dependeráde lo correlacionadas o no que estén las bandas (a mayor correlación menos información y viceversa).El módulo i.oif permite calcular un índice que indica el grado de información aportado por cada una delas posibles combinaciones entre bandas de landsat TM:

:∼> i.oif image1=b1 image2=b2 image3=b3 image4=b4 image5=b5 image7=b7

El resultado de este módulo es un listado de todas las posibles combinaciones de tres bandas ordenadoen función de su contenido de información.

Es conveniente haber hecho previamente una máscara para evitar que el agua o celdillas en negro inter-fieran en el resultado.

Para ver los histogramas de las diferentes bandas, puede utilizarse d.histogram que mostrará el his-tograma en el monitor gráfico activo coloreando las diferentes barras con la misma paleta de coloresutilizada para la banda en cuestión.

:∼> d.histogram tm1

El módulo d.correlate acepta hasta 4 capas de información y muestra en el monitor gráfico activo unaserie de scatterplots por parejas:

d.correlate layer1=tm1 layer2=tm2 layer3=tm3 layer4=tm4

9.2.4 Fusión de imágenes

Transformación IHS

GRASS permite fusionar dos imágenes mediante una transformación IHS (Intensidad, Tono, Saturación).El objetivo es utilizar un pancromático de alta resolución espacial como valor de intensidad, mientrasque el color vendría dado por una composición de bandas con mayor resolución espectral pero menorresolución espacial.

Puesto que se van a fusionar imágenes con dos resoluciones espaciales diferentes y el resultado se quierecon la máxima de ellas, es necesario en primer lugar ajustar la región de trabajo a la del pancromático:

:∼> g.region rast=tmpan

El siguiente paso sería transformar la combinación RGB de las bandas de alta resolución espectral enuna combinación IHS:

157

Page 170: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> i.rgb.his blue=tm1 green=tm2 red=tm3 hue=tono saturation=sat intensity=int

para a continuación sustituir el valor de intensidad por la banda pancromática y obtener unas nuevascapas que contendrán la componentes rojo, verde y azul:

:∼> i.his.rgb hue=tono saturation=sat intensity=tmpan blue=tmb red=tmrgreen=tmg

Finalmente se ecualizan los histogramas y se presenta en pantalla la composición final:

:∼> r.colors tmr color=grey.eq

:∼> r.colors tmg color=grey.eq

:∼> r.colors tmb color=grey.eq

:∼> d.rgb blue=tmb red=tmr greeen=tmg

Transformación de Brovey

Este método de fusión se adapta a imágenes de landsat (opción -l), spot (opción -s) o quickbird (opción-q).

Por ejemplo para Landsat:

:∼> i.fusion.brovey -l ms1=tm1 ms2=tm2 ms3=tm3 pan=tmpan outputprefix=brov

9.3 Georreferenciación

La georreferenciación de capas raster consiste en transformar una capa sin sistema de coordenadas enuna capa en la que las distintas celdillas tengan su ubicación en el terreno utilizando un sistema decoordenadas estándar.

Puede aplicarse a mapas escaneados, imágenes de satélite o fotografías aéreas. El primer caso es el mássencillo ya que puede asumirse que las distorsiones son mínimas.

158

Page 171: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Puesto que cada LOCATION de GRASS se define con un sistema de coordenadas al que deben venirreferidas todas las capas de información incluidas, una capa raster sin georreferenciar debe importarse auna location específica con coordenadas X-Y definidas por el número de columna y número de fila en lamatriz de datos.

Al georreferenciarse, dicha capa se trasladará a otra location definida con el sistema de coordenadasrespecto al que se quiere georreferenciar la capa.

9.3.1 Definición de la location de destino: i.group e i.target

El primero de estos módulos crea un grupo de capas que se georreferenciarán en bloque. Esto permitepor ejemplo georreferenciar al mismo tiempo las diferentes capas que forman una imagen landsat.

El segundo define cual es la LOCATION y MAPSET en los que se almacenarán las capas una vezgeorreferenciada. El siguiente ejemplo muestra el proceso de georreferenciación de un mapa escaneadoy almacenado en formato tiff.

r.in.gdal mapa.tiff output=mapag.region rast=mapa.redr.composite red=mapa.red blue=mapa.blue green=mapa.green output=mapai.group group=migrupo input=mapai.target migrupo location=cursoGRASS mapset=usuario1

La orden r.in.gdal generará tantos ficheros como bandas de color haya en el fichero original (asumimosque son 3 y almacenan los colores rojo, verde y azul). La orden r.composite unificará las tres bandas,debe ejecutarse habiendo ajustado la región de trabajo a la de las capas creadas. Finalmente con i.groupse crea el grupo de imagen y con i.target se definen la location y mapset de destino.

9.3.2 Búsqueda de puntos de control: i.points

Este módulo crea en el monitor gráfico un entorno para visualizar una de las imágenes (lado derecho)que se van a georreferenciar y la imagen o mapa ya georreferenciado presente en la location de destino(lado izquierdo).

Cada uno de los lados se divide a su vez en dos partes, en la superior veremos la imagen completa(según la región de trabajo establecida antes de ejecutar i.points; y en la inferior veremos un zoom(si ejecutamos esta opción).

Durante el proceso de selección de puntos de control podemos ir cambiando los mapas que visualizamos.

i.points proporciona un pequeño menú:

• QUIT Salir de i.points

• ZOOM Hacer un zoom, mediante un rectángulo (BOX) o señalando un punto y un factor deampliación (POINT)

• PLOT RASTER Dibujar un nuevo mapa, en el lado izquierdo o en el derecho (figura 9.2)

159

Page 172: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

• ANALYZE Analizar el conjunto de puntos de control seleccionados hasta el momento

y las opciones de introducción de coordenadas:

• KEYBOARD, tecleando directamente las coordenadas

• SCREEN, pulsando sobre pantalla

La selección de puntos de control debe hacerse buscando el mismo punto en los dos lados del monitor ypinchando en ambos, primero en la imagen origen y luego en la destino(opción screen), o bien pinchandoen la imagen origen e introduciendo las coordenadas como texto (opción keyboard). En la figura 9.5aparece un ejemplo de zoom sobre el nucleo urnbano de Yecla y obtención de un punto de control.

El análisis del conjunto de puntos de control (opción ANALYZE) muestra para cada uno de ellos losvalores de fila y columna y de las coordenadas X e Y adjudicadas. Además nos da el error cometidoen cada punto, en relación al modelo generado, y el error cuadrático medio. Este análisis debe hacersecuando se disponga de un mínimo de 4 puntos.

La figura 9.6 muestra el resultado de un análisis , los puntos en rojo son lo que más error introducen,los puntos not used son puntos eliminados anteriormente al introducir errores (aparecen en rojo sobre elmapa). Para cada punto nos indica el desplazamiento en filas y columnas, el error al cuadrado en metrosy las coordenadas asignadas. En general hay que evitar errores mayores de 2 en filas y columnas y unerror cuadrático no muy superior al tamaño del pixel.

El usuario puede eliminar o reintroducir un punto de control haciendo doble click sobre el número deeste. Cuando se elimina un punto este no se incluye en el cálculo del ECM ni se tendría en cuentaposteriormente para calibrar las ecuaciones de transformación. Para reintroducir un punto eliminadobasta con hacer de nuevo doble click sobre este.

En el caso de mapas escaneados, basta con 4 puntos de control situados cerca de las equinas del mapa,en el caso de una imagen de satélite o de una fotografía aérea el proceso es más complejo y el númerode puntos de control debe ser mucho mayor.

El número de puntos de control debe superar los 50 y estar homogéneamente repartido. Hay que tener encuenta que es preferible ampliar y repartir homogéneamente el número de puntos de control, aun a costade aumentar el ECM.

Una buena estrategia es comenzar con los puntos de control más evidentes (espigones, plazas grandes,cruces de autopista) para obtener una primera calibración a la que deberán ajustarse los puntos másinciertos para añadir información.

Las balsas de riego son buenos puntos de control (si tienen el tamaño suficiente como para verse en laimagen) ya que si seleccionamos la balsa correcta es muy fácil localizar con precisión su centro y si nosequivocamos de balsa el error introducido será muy grande y será evidente el fallo.

9.3.3 Georreferenciación de la imagen: i.rectify

Una vez obtenidos los puntos de control, estos se almacenan en un fichero dentro del direcorio específicodel grupo de imágenes al que se refieren.

160

Page 173: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 9.2: v.points (b)

Figura 9.3: v.points (b)

161

Page 174: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 9.4: v.points (c)

Figura 9.5: v.points (d)

162

Page 175: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 9.6: v.points (e)

Para efectuar la georreferenciación, se utiliza i.rectify que, a partir de estos puntos, genera una ecuaciónpolinómica de transformación (de la que puedes elegir su grado) y la aplica a cada una de las capasoriginales incluidas en el grupo de imagen para crear capas equivalentes, pero ya georreferenciadas, enla location y mapset indicadas con i.target.

A la pregunta:

Please, select one of the following options1. Use the current window in the target location2. Determine the smallest window wich covers the image>

Responder con la segunda opción.

Salvo que se disponga de un conjunto de puntos de control muy grande y homogéneamente distribuidoes preferible georreferenciar con polinomios de grado 1.

9.4 Filtrados con GRASS

Son tres los módulos de GRASS que pueden utilizarse para definir y aplicar filtros: Los dos primeros sevieron con detalle en la sección 7.4 y el tercero es r.mapcalc.

163

Page 176: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

9.4.1 r.neighbors

Este módulo calcula estadísticos de vecindad algunos de los cuales se corresponden con los filtros mássencillos (media o mediana):

:∼> r.neighbors input=capa_entrada output=capa_salida \method=estadístico size=tamaño_de_la_vecindad

• average, calcula la media aritmética de los valores del mapa de entrada en las celdillas de lavecindad y la asigna a la celdilla central en el mapa de salida

1 2 34 5 3 3.667 5 3

• median, calcula la mediana de los valores del mapa de entrada en las celdillas de la vecindad y laasigna a la celdilla central en el mapa de salida

1 2 34 5 3 37 5 3

9.4.2 r.mfilter

Este módulo permite pasar a una capa raster filtros definidos previamente en un fichero de texto.

Permite crear operadores de vecindad que calculan una media ponderada de los valores de las celdillascircundantes

:∼> r.mfilter input=mapa output=mapa2 filter=archivo

Los parámetros input y output indican los mapas de entrada y salida y el parámetro filter un fichero quecontiene los criterios de filtrado escritos siguiendo unas reglas sencillas. Así, este comando funciona demodo similar a r.colors (con la opción rules) o r.reclass en el sentido de que debe utilizarse un pequeñoarchivo de texto en el que se especifique el filtro a utilizar. En la figura 9.7 se presentan dos ejemplos defiltro.

Con estos ficheros vamos a pasar a r.mfilter los siguiente parámetros:

• TITLE: Es un texto descriptivo del filtro y su objetivo

• MATRIX: El tamaño de la matriz de filtrado n y a continuación n lineas, con n enteros separadospor al menos un espacio, cada una. El valor n debe ser un número impar igual o mayor que 3.Representa la matriz de coeficientes de ponderación por los que se multiplicará cada una de lasceldillas de la ventana.

164

Page 177: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 9.7: Dos ejemplos de filtros

• DIVISOR: El número por el que se va a dividir el resultado de sumar los valores hallados en lemapa multiplicados por los especificados en la matriz de filtrado, si no se especifica el valor pordefecto es 1. Si se especificó 0 como divisor, el programa calcula el divisor como la suma de losvalores de la matriz en los que el valor de la celdilla era diferente de cero. Se consigue así unamedia ponderada.

• TYPE: Filtro de tipo S significa que es secuencial mientras que el tipo P significa que es paralelo.En un filtro secuencial, los valores ya procesados se utilizan para procesar los siguientes, mientrasque en un filtro paralelo los valores del mapa de entrada se conservan para realizar todos loscálculos.

El proceso de filtrado produce un nuevo valor para cada celdilla en el fichero de entrada multiplicandolos valores de las celdillas incluidas en la ventana n x n, sumando todos los resultados y dividiendo esasuma entre el divisor especificado. Si se especificó 0 como divisor, el programa calcula el divisor comola suma de los valores de la matriz en los que el valor de la celdilla era diferente de cero. Se consigue asíuna media ponderada.

Si se incluye más de un filtro en el fichero, o si el valor asignado a repeat es mayor de 1, los filtros seejecutan secuencialmente uno detrás de otro hasta que, al finalizar el proceso, los resultados se escribenen el fichero de salida.

Algunos ejemplos del resultado de diversas matrices de filtrado puede verse a continuación:

1 2 3 1 1 14 5 3 1 1 1 3.667 5 3 1 1 1

1 2 3 1 1 14 5 3 1 2 1 3.87 5 3 1 1 1

165

Page 178: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

1 2 3 -1 1 -14 5 3 1 2 1 17 5 3 -1 1 -1

Este tipo de operadores de vecindad se utilizan mucho en teledetección para resaltar u ocultar elementosen la visualización de imágenes de satélite.

9.4.3 r.mapcalc

El lenguaje de mapcalc permite programar operadores de vecindad utilizando la notaciónmapa[∆fila,∆columna].Por ejemplo para el filtro C de Sobel:

-1 0 1-1 -1 0 10 -2 0 21 -1 0 1

el programa de r.mapcalc sería:

:∼> r.mapcalc ’C=-I[-1,-1]+I[-1,1]-2*I[0,-1]+2*I[0,1]-I[1,-1]+I[1,1]’

9.5 Índices

Los índices de vegetación y similares pueden programarse fácilmente con r.mapcalc.

La transformación tasseled cap también puede programarse, sin embargo GRASS dispone de un móduloespecífico para ello, i.tasscap, de manejo muy sencillo.

:∼> i.tasscap -5 band1=tm1 band2=tm2 band3=tm3 band4=tm4 band5=tm5\band7=tm7 outprefix=tc_

La opción (4, 5 o 7) indica la misión de landsat a la que pertenece la imagen. El parámetro outprefixindica el prefijo que tendrá el nombre de cada un de la s capas de salida.

El módulo r.mapcalc puede también utilizarse para implementar modelos físicos de cálculo de radiancia,corrección atmosférica, corrección de iluminación. El módulo r.sun permite calcular capas de ángulo deincidencia solar o de radiancia para un día determinado.

166

Page 179: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

9.6 Análisis de Componentes Principales

El módulo oficial de GRASS para hacer un Análisis de Componentes Principales es i. pca. Este módulotiene el inconveniente de no presentar el vector de valores propios que es importante para interpretarlos resultados. Tampoco permite realizar el ACP con la matriz de correlaciones en lugar de con la decovarianzas.

Estas limitaciones se deben en parte a la tendencia en GRASS a trabajar de forma integrada con R pararealizar los análisis estadísticos.

Una opción sería crear un script de R que lea la imagen y utilice la función princomp de este programaque si permite utilizar la matriz de correlaciones en lugar de la matriz de covarianzas. Así mismo permiteacceder a toda la información del ACP.

Finalmente nos permitirá crear las capas correspondientes a los componentes principales generando yejecutando órdenes para r.mapcalc.

# Cargar librerías

library(spgrass6)

# Creación del data frame

im=readRAST6(c("tm1","tm2","tm3","tm4","tm5","tm7"))imagen=data.frame(b1=im$tm1,b2=im$tm2,b3=im$tm3,b4=im$tm4,\

b5=im$tm5,b7=im$btm7)

# Análisis de Componentes principales

pc=princomp(imagen)summary(pc,loadings=T)

# Utiliza los pesos del ACP como coeficientes para generar# los componentes con r.mapcalc

k=pc$loadingsn=sqrt(length(k))

for (i in 1:n){orden=sprintf("r.mapcalc ’pc.%d= %g*b1 + %g*b2 + %g*b3 + %g*b4 + \

%g*b5 + %g*b7’", i,k[1,i], k[2,i],\k[3,i], k[4,i], k[5,i], k[6,i])

cat(orden,"\n")system(orden)

}

167

Page 180: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

9.7 Clasificación

9.7.1 Clasificación no supervisada

GRASS dispone del módulo i.cluster que aplica el algoritmo ISODATA. Los parámetros que requiereson:

• group, el grupo de imágenes al que se va a aplicar.

• subgroup, el subgrupo, un subconjunto de las capas raster incluidas en el grupo y que se definecon el módulo i.group (figura 9.1).

• sigfile, fichero de signaturas con la definición de las clases, se almacenará en el directorio sig delsubgrupo (figura 9.1).

• classes, número de clases que se obtendrán.

Otros parámetros no imprescindibles son:

• seed, un fichero de clases que se utilizarán como valores iniciales en el proceso;

• sample, intervalo de muestreo en filas y columnas (por defecto se seleccionan 10000 valores);

• iterations, el algoritmo es iterativo y podemos establecer el número de iteraciones, por defectoson 30;

• convergence, en un procedimiento iterativo, se asume que las diferencias en los resultados de unaiteración a la siguiente van disminuyendo, podemos establecer el grado de similitud (en tanto porciento) por encima del cual las diferencias que se produzcan son despreciables, por defecto 98 %;

• separation, separación mínima exigida entre clases, por defecto 0;

• min_size, tamaño mínimo de una clase, por defecto 17 píxeles; reportfile, fichero de texto quecontendrá un informe de los resultados.

En definitiva, este módulo analiza una muestra de celdillas de tamaño especificado por el usuario y lasreparte entre un número dado de clases (classes) que deben tener unas características especificadas por losparámetros min_size y separation. La salida básica de i.cluster es un fichero de signaturas espectralescuyo nombre ha especificado el usuario con el parámetro sigfile.

Los ficheros de signaturas espectrales se almacenan en el subdirectorio sig del subgrupo con el que seestá trabajando. Están compuestos por una linea de cabecera que hace referencia al módulo que lo hagenerado y a continuación la definición de cada una de las clases.

Cada clase tiene una cabecera con el nombre de la clase (asignado automáticamente por i.cluster o laetiqueta correspondiente en la capa de áreas de entrenamiento pasada a i.gensigs); la siguiente lineacontiene el número de celdillas de esta clase; y a continuación viene el vector de medias y la matriz devarianzas-covarianzas.

168

Page 181: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

9.7.2 Clasificación supervisada

Existen tres módulos para la generación de clases por clasificación supervisada.

i.gensig

El módulo i.gensig genera un fichero de signaturas espectrales a partir de un mapa raster de áreas deentrenamiento. Los parámetros son:

• trainingmap, mapa raster con las áreas de entrenamiento

• group, el grupo de imágenes al que se va a aplicar

• subgroup, el subgrupo, un subconjunto de las capas raster incluidas

• signaturefile, fichero de signaturas espectrales resultante.

Las áreas de entrenamiento se habrán digitalizado previamente con v.digit o r.digit.

i.class

El módulo i.class genera un fichero de signaturas espectrales a partir de áreas de entrenamiento digital-izadas y analizadas de forma interactiva por el usuario durante la ejecución del módulo. Tiene la ventajasobre i.gensig de hacer un análisis estadístico de las clases, sin embargo es relativamente pesado y notiene sentido si ya se han conseguido áreas de entrenamiento bien con visitas de campo o bien analizandofotografía aérea.

Los parámetros de este módulo son:

• map, mapa raster sobre el que se digitalizarán las áreas de entrenamiento, lo normal es que se tratede una composición de color

• group, el grupo de imágenes al que se va a aplicar

• subgroup, el subgrupo, un subconjunto de las capas raster incluidas

• outsig, fichero de signaturas espectrales resultante.

Al ejecutarlo, se divide en el monitor gráfico en tres secciones. A la derecha y arriba una vista del mapasobre el que se digitalizará, a la derecha y debajo una vista ampliada con zoom del mismo, y a la izquierdalos resultados de los análisis estadísticos sobre las áreas de entrenamiento seleccionadas.

En la parte baja del monitor aparece un menú con diversas opciones:

• Menú principal, con las siguientes opciones:

– Zoom, para especificar una región rectangular sobre cualquiera de los dos mapas, cuyo con-tenido será visualizado en el mapa inferior.

169

Page 182: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

– Menú de región (áreas de entrenamiento), lleva al usuario a dicho menú

– Redibujar, lleva al usuario a dicho menú

– Analizar región, lleva al usuario a dicho menú

– Salir

• Menú de región, contiene las siguientes opciones:

– Borrar región

– Pintar región

– Restaurar la última región

– Completar región

– Done para volver al menú principal

• Menú de redibujar, contiene las siguientes opciones:

– Map geographic region, redibuja el mapa superior

– Zoom region, redibuja el zoom situado en el mapa inferior

– Both, redibuja ambos

– Cancel, vuelve al menú principal sin ejecutar ninguna acción

• Menú de análisis de área de entrenamiento. Contiene el menú de signatura que permite alusuario establecer un número de desviaciones típicas, de manera que las celdillas que estén dentrode ese intervalo se resaltarán sobre el mapa.

– Set std dev’s, permite establecer un límite inferior y superior ala rango de variación de lasceldillas en función de un número dado de desviaciones típicas.

El número que aparece entre paréntesis es el número seleccionado.

– Set color permite modificar el color con el que se resaltarán las celdillas que encajan con elárea de entrenamiento creada. El color que aparece entre paréntesis es el color seleccionado.

– Display matches, resalta las celdillas que encajan con la clase creada en función del númerode desviaciones estándar especificado.

– Done, al activar esta opción el usuario deberá decidir si quiere guardar la signatura creadajunto a una etiqueta descriptiva de la clase a la que corresponde.

i.gensigset

El módulo i.gensigset es similar a i.gensig pero el fichero de signaturas espectrales resultante se utilizapor i.smap para hacer clasificación contextual. Utiliza los mismos parámetros que i.gensig más maxsigque establece el número de subclases que se admiten en cada clase.

170

Page 183: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

9.7.3 Adjudicación de píxeles a clases. Técnicas estadísticas: Clasificación por máximaverosimilitud

El módulo i.maxlik implementa la clasificación de máxima probabilidad. Los parámetros que utiliza estemódulo son:

• group, el grupo de imágenes al que se va a aplicar

• subgroup, el subgrupo, un subconjunto de las capas raster incluidas en el grupo y que se definecon el módulo i.group (figura 9.1)

• sigfile, fichero de signaturas con la definición de las clases, creado por i.cluster, i.class o i.gensig.

• class, el mapa de salida que contiene las clases

• reject, este mapa contendrá para cada celdilla el nivel de confianza con el que la celdilla pertenecea la clase a la que se ha asignado

El módulo i.smap puede realizar una clasificación máximo verosimil convencional (opción -m) o utilizarel algoritmo secuencial máximo a posteriori (SMAP).

• group, el grupo de imágenes al que se va a aplicar

• subgroup, el subgrupo, un subconjunto de las capas raster incluidas en el grupo y que se definecon el módulo i.group (figura 9.1)

• signaturefile, fichero de signaturas con la definición de las clases creado por i.gensigset

• output, el mapa de salida que contiene las clases

El algoritmo secuencial máximo a posteriori (SMAP) se basa en que dos píxeles contiguos tienen altaprobabilidad de pertenecer a la misma clase. Trabaja segmentando la imagen a varias escalas usando lasmenos detalladas para guiar las más finas.

9.7.4 Validación

La validación de una clasificación se realiza con GRASS con el módulo r.kappa utilizando los paramet-ros:

• classification, capa con los resultados de la clasificación

• reference, capa con las áreas de validación

• output, fichero que contendra el resultado, matriz de confusión y estadístico κ

171

Page 184: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

172

Page 185: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 10

Interpolación

Todo programa de SIG dispone de un conjunto de módulos o funciones de interpolación. El objetivo dela interpolación espacial es obtener una capa raster de una variable Z a partir de sus valores conocidosen un conjunto de puntos de muestreo. Por tanto se hace necesario estimar el valor de Zx,y para cadaceldilla con coordenadas x, y.

Existen infinidad de métodos de interpolación, muchos de los cuales se encuentran implementados enGRASS, cuyo comportamiento puede además modificarse dando valores a un conjunto de parámetrosque se le pasan al módulo que ejecuta el método. La consecuencia es que el número de métodos esvirtualmente infinito.

Es importante tener en cuenta que diferentes métodos van a generar diferentes superficies (a veces muydiferentes) y que no siempre es fácil decidir cual es el método más adecuado. Por todo ello llevar a cabouna interpolación espacial es mucho más complejo de lo que parece debido a la sencillez de manejo delos módulos que implementan los distintos métodos de interpolación.

Los métodos que pueden utilizarse en GRASS son:

• Métodos globales

– Interpolación por clasificación

– Interpolación por regresión

• Métodos locales

– Polígonos de Thiessen

– Media ponderada por el inverso de la distancia elevado a un exponente

– Kriggeado

– Splines

– Interpolación a partir de TIN (Red Irregular de Triángulos)

• Interpolación a partir de curvas de nivel

La interpolación se basa en gran parte en métodos estadísticos, por tanto va a ser necesario utilizar Rpara llevar a cabo algunos de los cálculos.

173

Page 186: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

10.1 Interpolación por clasificación

Si se dispone de una capa vectorial con puntos de muestreo para interpolar por el método de clasificación,lo más adecuado es rasterizar esos puntos con el módulo v.to.rast y utilizar el comando r.statistics paraobtener una capa con las medias de los valores muestreados para los diferentes valores de una variablecualitativa que se utiliza como variable de apoyo en la clasificación y de la que también se dispone decapa.

Por ejemplo, el mapa de puntos mo contiene un conjunto de puntos de muestro con el contenido enmateria orgánica (expresado en tantos por ciento) en el área de trabajo. Utilizando este mapa y el mapade suelos como entrada a r.statistics se consigue un mapa con la estimación del contenido en materiaorgánica interpolado por clasificación para cada uno de los tipos de suelo.

:∼> v.to.rast input=arable output=mo use=attr column=mo :∼> r.mapcalc

’mo100=int(mo*100)’ :∼> r.statistics base=suelos cover=mo100 method=average

output=mo100_av :∼> r.mapcalc ’mo_av=mo100_av/100’

Recuerda que r.statistics necesita que el mapa cover contenga números enteros, por ello se ha transfor-mado el mapa original, multiplicándolo por 100, con una llamada a r.mapcalc, al final hay que deshacerel cambio.

La adecuación del procedimiento de clasificación puede comprobarse generando mapas de desviacióntípica, mínimo y máximo con r.statistics para determinar si las medias para los diferentes valores de lavariable cualitativa son significativamente diferentes.

Un procedimiento alternativo, si no se tienen datos puntuales pero se dispone de valores adecuadosde la variable cuantitativa a interpolar para las diferentes clases en la variable de apoyo (por ejemplo,podríamos haber encontrado en la bibliografía una tabla con los valores medios de materia orgánica enlos diferentes tipos de suelo de la Región de Murcia), es utilizar r.reclass para reclasificar el mapa de lavariable cualitativa y asignar a cada clase su valor correspondiente.

10.2 Interpolación por regresión

Con r.mapcalc puede programarse cualquier ecuación de regresión para una variable dependiente re-specto a una o varias variables independientes, por ejemplo:

:∼>r.mapcalc ’V _1 = a+ b ∗ V _2’

174

Page 187: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Asume que hay una variable independiente V2 a partir de la que puede estimarse V1 mediante los coefi-cientes de regresión a y b.

En muchos modelos de regresión espacial las variables independientes van a ser las coordenadas espa-ciales (X UTM e Y UTM por ejemplo). En r.mapcalc se dispone de funciones que devuelven el valor deestas variables, por ejemplo:

:∼>r.mapcalc ’V1 = a+ b ∗ x() + c ∗ y()’

Tanto en el caso de la interpolación por regresión como en el de la clasificación, el análisis estadísticohay que hacerlo previamente, lo más adecuado es utilizar un programa de estadística para ello.

El fichero de puntos pluv10_90 contiene información acerca de la precipitación total en octubre de1990 en los observatorios de la Región de Murcia. A partir de un análisis estadístico se ha comprobadoque la precipitación tiende a aumentar con la coordenada Y según el siguiente modelo de regresión:P = 0.0009829 ∗ Y − 0.004088 o sea casi un litro por metro cuadrado por cada kilómetro que nosdesplazamos hacia el Norte. Este modelo de regresión puede transformarse en un modelo de interpolacióncon la siguiente orden:

:∼>r.mapcalc ’P = 0.0009829 ∗ y()− 0.004088’

10.2.1 Cálculo de los parámetros de la regresión

En el caso de la regresión simple, se tiene que:

b =covx,y

sx ∗ sy(10.1)

y

a = my − b ∗mx (10.2)

Los valores de mx,my,sx,sy, es decir media y desviación típica pueden obtenerse con r.univar mientrasque los de covx,y se pueden obtener con r.covar.

10.3 Interpolación mediante polígonos de Thiessen

Además de para interpolar mediante TIN, la triangulación de delaunay es el paso previo para crearpolígonos de Thiessen. Estos pueden crearse directamente a partir del módulo v.voronoi.

:∼> v.voronoi input=arable output=arable_pol :∼> d.vect arable_pol

175

Page 188: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Para llevar a cabo la interpolación, es preciso rasterizar los polígonos de Thiessen para asignar a cadaceldilla el valor de la variable de la tabla de atributos que queramos interpolar. En el siguiente ejemplose va a crear una capa raster de carbonato cálcico co3ca y otra de materia orgánica mo.

:∼> v.to.rast input=arable output=co3ca type=area use=attr column=co3ca :∼> v.to.rast

input=arable output=mo type=area use=attr column=mo

10.4 Interpolación con inverso de la distancia

Este método hace una estimación del valor de cada una de las celdillas como la media ponderada delos valores medidos en un conjunto de puntos de muestreo situados alrededor. Los coeficientes de pon-deración son inversamente proporcionales a la distancia elevada a un exponente p.

En GRASS se dispone del módulo r.surf.idw que utiliza un valor de p = 2. El usuario puede determinarel número de puntos de muestreo alrededor que se van a tener en cuenta a la hora de hacer la interpolación(el valor por defecto es 12).

Las siguientes órdenes generan en primer lugar una versión raster de la capa vectorial arable asignandoa las celdillas que coinciden con puntos de muestreo el valor de la variable co3ca. En segundo lugarse genera la correspondiente capa raster interpolada utilizando el método del inverso de la distancia alcuadrado:

:∼> v.to.rast arable output=muestreo use=attr column=co3ca

:∼> r.surf.idw input=muestreo output=co3ca npoints=10

Otra posibilidad es utilizar R para hacer la interpolación.

entramos en R y cargamos la librería para trabajar con GRASS. Se trata de un script que incluye algunasfunciones para simplificar el trabajo en R aún a costa de perder algo de flexibilidad. En el apéndice finalaparece el código del script.

> source("/home/datos/curso_GRASS/scripts/codigoGRASS.R")

a continuación importamos la capa arable como objeto de R y la llamamos igual:

> arable=readVECT6(“arable”)

El siguiente paso será crear un objeto grid de R, equivalente a una capa raster, que contendrá los resulta-dos de la interpolación. La función crea_def_grid(res) crea un grid con los límites de la regiónde trabajo de GRASS y con la resolución que indique el usuario. Es importante adecuar la resolución dela capa interpolada a la densidad de nuestros datos ya que en caso contrario la ejecución sería muy lentay la precisión alcanzada totalmente ficticia. En este caso vamos a utilizar 250 metros:

176

Page 189: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

> raster=crea_def_grid(250)

Uno de los problemas de las librerías para el manejo de datos espaciales de R es que no reconocen lasinonimia entre distintas descripciones del sistema de referencia espacial. Por tanto para evitar problemashay que hacer que la descripción del mismo sea igual en el objeto que contiene los datos puntuales y enel que define el grid que recibirá los resultados de la interpolación:

> arable@proj4string=raster@proj4string

Ambos objetos contienen, como ves, un subobjeto llamado proj4string que define el sistema de coorde-nadas utilizado.

A continuación hacemos la interpolación utilizando la función idw utilizando como exponente un 2:

> idw_interp=idw(co3ca∼1,arable,raster,idp=2)Finalmente se exporta el resultado a GRASS:

writeRAST6(idw_interp,“co3ca_idw",zcol=var1.pred)

10.5 Krigeado

Se han desarrollado diversos proyectos para la implementación de la interpolación por kriggeado enGRASS, el más desarrollado en la actualidad implica la utilización de programas externo como R y gstat(www.gstat.org/).

Tras entrar R, los primeros pasos son los mismos que para el apartado anterior:

> source("funciones_GRASS.R")> arable=readVECT6(“arable")> raster=crea_def_grid(250)

10.5.1 Cálculo del semivariograma

En primer lugar será conveniente comprobar, al menos visualmente, si se cumplen los supuestos básicospara el uso de los semivariogramas. Para ello podemos hacer dos representaciones de la variable co3ca,como mapa y como histograma:

> plot(arable,cex=sqrt(arable$co3ca/10),pch=1)> hist(arable$co3ca)

En la primera orden, el parámetro cex define el tamaño de los puntos, que debe ser función de la variableque se quiere representar, la segunda orden dibuja un histograma para comprobar si se cumple la hipótesisde normalidad. Si no fuese así sería necesario hacer una transformación de la variable para conseguir unadistribución normal. Los resultados de estas órdenes aparecen en la figura 10.1.

La función variogram permite calcular un semivariograma empírico:

> v=variogram(co3ca~1,arable)> plot(v)

177

Page 190: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 10.1: Distribución espacial e histograma de la variable CO3Ca

La nube de puntos resultante debe ajustarse a un semivariograma teórico. La función de R para elloes fit.variogram que admite varios modelos que se el pasan mediante una cadena con los 3 primeroscaracteres de su nombre en inglés:

• Semivariograma esférico: “Sph"

• Semivariograma exponencial: “Exp"

• Semivariograma gaussiano: “Gau"

Una vez escogido el modelo que mejor parece aproximarse a nuestros datos, debemos determinar unosvalores iniciales de los parámetros para que la función fit.variogram obtenga unos parámetros opti-mizados. Esta primera aproximación se pasa, junto con el nombre del semivariograma, con la la funciónvgm(meseta, modelo, alcance, pepita). En la figura 10.2 se presentan las magnitudes a que correspon-den estos parámetros. Trata de hacer una estimación de los mismos.

El siguiente ejemplo muestra el uso de vgm para codificar un semivariograma gaussiano con meseta=200,alcance=20000 y pepita=50:

vgm(200,"Gau",20000,50)

Asumiendo que el semivariograma muestral se almacena en un objeto llamado v, la función para suajuste será:

fv=fit.variogram(v,vgm(200,"Gau",20000,50)

tras lo cual el objeto fv contendrá el modelo de semivariograma teórico seleccionado. La orden plot_variogrampermitirá crear un gráfico con el semivariograma empírico ajustado:

plot_variogram(v,fv)

178

Page 191: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 10.2: Parámetros del semivariograma

10.5.2 krigeado

El siguiente paso es ya hacer el krigeado. Para ello comenzamos utilizaremos el objeto raster creadoanteriormente y la función que ejecuta el krigeado es muy similar a la de la interpolación con inverso dela distancia al cuadrado:

> krige_out = krige(co3ca∼1, arable, raster, model = fv)

Date cuenta de que se ha utilizado de nuevo el objeto raster creado anteriormente. Posteriormente elresultado hay que exportarlo a una capa raster de GRASS:

writeRAST6(krige_out,“co3ca_kri",zcol=var1.pred)

> writeRAST6(kk,"residual",zcol=’var1.pred’)> system("r.mapcalc ’precipitacion=modelo+residual’")

> system("d.rast precipitacion")> system("d.vect inm")> system("d.legend -m precipitacion")> system("d.what.vect inm")

10.6 splines

Este método simula la adaptación de una membrana flexible a un conjunto de valores de Z en el espacio.Es el método más general y exacto de que dispone GRASS (Neteler & Mitasova), es además uno de

179

Page 192: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

los módulos de GRASS que mayor desarrollo ha experimentado en los últimos años, pero requiere uncuidadoso ajuste de sus parámetros para conseguir la máxima exactitud.

El módulo v.surf.rst lleva a cabo este tipo de análisis y, opcionalmente, calcula un conjunto de parámet-ros topográficos de la superficie generada. Existe una versión de este módulo para interpolación en 3dimensiones (s.vol.rst) y un módulo experimental (v.volt.rst) para interpolación en 4 dimensiones. Noexiste en GRASS una versión similar que utilice como entrada datos raster, aunque si existe un módulov.surf.rst para hacer interpolación a partir de isolineas.

Puesto que se utilizan sites, es posible seleccionar cual es la columna que contiene la variable a interpolarmediante el parámetro field, en el ejemplo que se muestra a continuación no es necesario ya que el ficherode sites sólo contiene un campo.

A pesar de la necesidad de ajustar apropiadamente los parámetros, una primera aproximación a la inter-polación por splines en dos dimensiones puede hacerse dejando las opciones por defecto de todos losparámetros.

:∼> v.surf.rst input=pluv10_90 elev=precipitacion

10.7 Interpolación a partir de curvas de nivel

Los más habituales son r.surf.contour y v.surf.rst. El primero utiliza curvas de nivel rasterizadas conv.to.rast y un algoritmo que completa los espacios vacíos entre las celdillas a las que se ha asignado valoral rasterizar. Aunque no resulte del todo intuitivo, este hecho hace que cuanto mayor sea la densidad decurvas de nivel en la región de trabajo más rápido se hará la interpolación debido a la mayor cantidad deinformación disponible.

El módulo v.surf.rst utiliza un algoritmo de interpolación por splines a partir de curvas de nivel. Si nose sabe cual utilizar, es preferible r.surf.contour.

El primer paso es disponer de un fichero vectorial con curvas de nivel digitalizadas y con cota. En laLOCATION pbx2 se dispone de un mapa llamado carrascoy con las curvas de esta sierra. Para rasterizarestas curvas puedes utilizar el módulo v.to.rast.

:∼>v.to.rast input=carrascoy output=carrascoy_curvas

Los resultados serán mejores si se adoptan las siguiente precauciones:

• No existen curvas cortadas

• El tamaño de celdilla utilizado para rasterizar las curvas de nivel es lo suficientemente pequeñopara que las curvas no se superpongan (resolución espacial adecuada)

• Una vez rasterizadas los valores de las curvas de nivel se multiplican por cien (resolución verticaladecuada).

• No falta ninguna curva

180

Page 193: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Para obtener una resolución vertical adecuada basta con el siguiente programa de r.mapcalc:

:∼>r.mapcalc ’carrascoy_curvas_cm=100*carrascoy_curvas’

Prueba a ejecutar este módulo con diferentes resoluciones y verifica los posibles errores que puedanproducirse.

Para obtener el modelo de elevaciones a partir de estas curvas de nivel rasterizadas utiliza r.surf.contour.Para ello haz primero un zoom a una zona pequeña ya que se trata de un módulo que requiere bastantetiempo para ejecutarse, por tanto es preferible empezar haciendo modelos pequeños para practicar. Unavez hecho el zoom ejecuta:

:∼>r.surf.contour -f input=carrascoy_curvas_cm output=carrascoy_dem_cm

181

Page 194: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

182

Page 195: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 11

Sistemas de Coordenadas

Todas las funcionalidades de proyección, cambio de sistema de proyección y cambio de datum se llevana cabo en GRASS utilizando la librería PROJ 4 (se requiere la versión 4.5.0 o posterior). Esta librería seencuentra entro los paquetes instalables en cualquier distribución de linux y se instalara automáticamenteal instalar el paquete de GRASS.

Los módulos que la utilizan son:

• g.proj

• g.setproj

• m.proj

• v.proj

• r.proj

11.1 Definición y consulta del sistema de referencia espacial

La definición del sistema de referencia de una location se hace en dos ficheros llamados PROJ_INFO yPROJ_UNITS dentro del mapset PERMANENT. El contenido del primer fichero es más o menos este:

name: Universe Transverse Mercatorproj: utmdatum: eur50towgs84: -131,-100.3,-163.4,-1.244,-0.020,-1.144,9.39a: 6378388es: 0.006722670022333321zone: 30no_defs: defined

Incluyendo información sobre el datum utilizado, el sistema de proyección (y la zona UTM en este caso),los parámetro del elipsoide y los 7 parámetros de la transformación a WGS84 con el método de BursaWolf.

183

Page 196: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

La información que aparece es variable dependiendo de como se haya creado la location y podría in-cluir otras entradas distintas dependiendo de la proyección utilizada (paralelos estándar y orígenes decoordenadas).

El contenido del fichero PROJ_UNITS es más sencillo y se refiere simplemente a las unidades demedida.

unit: Meterunits: Metersmeters: 1

Estos ficheros pueden ser consultados de forma sencilla mediante el módulo g.proj y la informaciónpuede ser extraída en diversos formatos:

• g.proj -p formato de GRASS (simplemente devuelve en pantalla el contenido de los ficheros).

• g.proj -j, utiliza el formato de PROJ 4

+proj=utm+no_defs+zone=30+a=6378388+rf=297+towgs84=-131,-100.3,-163.4,-1.244,-0.020,-1.144,9.39+to_meter=1

• g.proj -w, utiliza el formato WKT

PROJCS["UTM Zone 30, Northern Hemisphere",GEOGCS["international",

DATUM["European_Datum_1950",SPHEROID["International_1924",6378388,297],TOWGS84[-131,-100.3,-163.4,-1.244,-0.020,-1.144,9.39]],

PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],

PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]

• g.proj -e, formato de Esri (prácticamente igual al WKT)

La salida de g.proj se divide en varias lineas para hacerla más legible al usuario, pero con la opción -f seobtendrá en una sola linea para permitir su utilización en scripts.

:∼> g.proj -fj

184

Page 197: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

+proj=utm +no_defs +zone=30 +a=6378388 +rf=297\

+towgs84=-131,-100.3,-163.4,-1.244,-0.020,-1.144,9.39 +to_meter=1

La información referente al sistema de referencia puede modificarse mediante el módulo g.setproj oeditando directamente PROJ_INFO y PROJ_UNITS para ello debes ser propietario del mapset PER-MANENT. Esta modificación no afectará a los mapas pero luego GRASS generará errores cuando in-tentemos utilizar mapas con un sistema de referencia en una location que tiene definido un sistema dereferencia diferente.

11.2 Conversión entre sistemas de referencia espacial

El módulo m.proj convierte el sistema de referencia de un listado de coordenadas que el usuario pasapor el teclado o desde un fichero ASCII.

El módulo v.proj importa mapas vectoriales de otra location a la location de trabajo. Si ambas locationstienen un sistema de referencia espacial, se realiza la necesaria conversión.

El módulo r.proj hace lo propio con capas raster, permitiendo remuestrear el contenido de las celdillasutilizando el método del vecino más próximo, interpolación bilineal o convolución cúbica.

11.2.1 Material para la práctica

Para hacer esta práctica tenemos que abrir dos sesiones de GRASS al mismo tiempo, una con la loca-tion murcia (sistema de referencia ED50) y otra con la location murciaetrs89 (sistema de referenciaETRS89).

En la location murcia tenemos:

• El mapa vectorial vertices50 que contiene vértices de la red REGENTE de la Región de Murcia

• El mapa vectorial Red_Gral_carreteras que contiene la red de carreteras

En la location murciaetrs89 tenemos:

• El mapa vectorial vertices89

En el directorio /home/datos/ficheros tenemos el fichero qb_murcia.tif que contiene una imagen Quikbird de la ciudad de Murcia con el sistema de referencia ED50.

11.2.2 Series de coordenadas

Vamos a utilizar un listado de vértices de la red REGENTE en formato ED50 y vamos a intentar trans-formarlos a ETRS89 con el módulo m.proj.

Los vértices aparecen en la tabla 11.1 en formato ED50 y ETRS89. La lista de coordenadas ED50 estáen el fichero /home/datos/ficheros/vertices.txt

185

Page 198: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

X_ED50 Y _ED50 X_ETRS89 Y _ETRS89639094 4290364 638984 4290155.93671301 4289739 671190.37 4289531.23643368 4272629 643257.57 4272421.58671854 4274587 671743.82 4274379.31619742 4256419 619631.11 4256211.74647718 4254257 647607.52 4254049.11660373 4255074 660262.28 4254866.42561932 4228799 561820.82 4228592583534 4229886 583422.98 4229679.28612911 4236896 612800.76 4236688.4635033 4239863 634921.99 4239655.09674099 4227386 556171.01 4210032.53556283 4210240 556171.01 4210032.53593504 4209357 593393.09 4209149.09608847 4215772 608736.56 4215564.36641667 4214640 641556.14 4214432.74662706 4217599 662595.43 4217391.67559609 4190445 559496.96 4190237.58581926 4194095 581814.1 4193887.19620096 4201852 619984.98 4201644.13644383 4199146 644271.79 4198937.84673378 4193488 673266.84 4193280.23694181 4202766 694070.05 4202557.67579711 4176625 579599.16 4176417.08621429 4178337 621317.58 4178129.54645369 4183867 645258.16 4183659.64673335 4181332 673223.92 4181124.41697789 4183847 697677.98 4183639.17580774 4154137 580662.59 4153929.3609585 4163460 609474 4163252.39643460 4169151 643349.09 4168943.87670862 4167345 670750.72 4167137.35694603 4168229 694492.19 4168021.41589802 4142281 589690.87 4142073.82625761 4140576 625650.03 4140368.17

Tabla 11.1: Listado de vértices

186

Page 199: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

El módulo m.proj necesita que le especifiquemos el datum de entrada y salida en formato de PROJ4.Para obtener esta información debemos ejecutar en ambas location (murcia y murciaetrs89) la siguienteorden:

:∼> g.proj -jf

En la location murcia podemos incluso asignar esta especificación como valor de una variable:

:∼> ED50=$(g.proj -jf) :∼> echo $ED50

y el resultado será:

+proj=utm +no_defs +zone=30 +a=6378388 +rf=297+towgs84=-131,-100.3,-163.4,-1.244,-0.020,-1.144,9.39 +to_meter=1

Podemos definir una variable equivalente para ETRS89 copiando y pegando la especificación de la otralocation:

:∼> ETRS89="+proj=utm +no_defs +zone=30 +a=6378137 +rf=298.257222101 \+towgs84=0,0,0,0,0,0,0 +to_meter=1"

Finalmente podemos crear otra variable que contenga el nombre del fichero a importar:

:∼> fic=/home/datos/ficheros/verticesed50.txt

De esta manera evitaremos tener que teclear órdenes demasiado largas.

:∼> m.proj input=$fic proj_in="$ED50" proj_out="$ETRS89"

Tras ejecutar la orden verás el listado resultante. Comprueba los errores.

También podemos almacenar los resultados en otro fichero:

:∼> m.proj input=$fic proj_in="$ED50" proj_out="$ETRS89">verticesetrs89.txt

11.2.3 Cambio de sistema de referencia en capas vectoriales

1. Asegúrate de que la región de trabajo coincide con la de los mapas y abre un monitor gráfico paracada sesión de GRASS

187

Page 200: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> g.region vect=vertices50 # En la location murcia

:∼> g.region vect=vertices89 # En la location murciaetrs89

:∼>d.mon x1 # En ambas location

2. Representa en ambos monitores los vértices de la red REGENTE

:∼>d.vect vertices50 # En la location murcia:∼>d.vect vertices89 # En la location murciaetrs89

3. Importa el fichero vertices50 a la location murciaetrs89

:∼> v.proj input=vertices50 location=murcia mapset=PERMANENT \output=vertices50b # En la location murciaetrs89

4. Importa el fichero vértices89 a la location murcia

:∼> v.proj input=vertices89 location=murciaetrs89 mapset=PERMANENT\output=vertices89b # En la location murcia

5. Representa en ambos monitores los vértices transformados

6. Consulta los valores de los mismos vértices en ambos sistemas con d.what.vect y comprueba quecoinciden con sus coordenadas con d.where calcula, más o menos la diferencia en X y en Y de unmismo vértice de un sistema de referencia a otro.

Visto que la conversión funciona con un mapa vectorial vamos a convertir ahora el mapa de carreteras alsistema ETRS89:

188

Page 201: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

:∼> v.proj input=Red_Gral_carreteras location=murcia mapset=PERMANENT\output=Red_Gral_carreterasb

11.2.4 Cambio de sistema de referencia en capas raster

Para comprobar la conversión de mapas raster, vamos a importar el fichero qb_murcia.tif a las doslocations:

:∼> r.in.gdal -o input=/home/datos/ficheros/qb_murcia.tif output=qb_murcia

En principio tendríamos en ambos casos un mensaje de error ya que este fichero, aunque tiene coorde-nadas UTM, no tiene la información del sistema de referencia de forma explícita. GRASS nos obliga eneste caso a utilizar la opción -o para forzar la importación o el parámetro location para crear una nuevaLOCATION a partir del sistema de referencia del fichero. Es la manera que tiene GRASS de decirnosbajo tu responsabilidad.

Una vez importados los mapas podremos comprobar su adecuación a los sistemas de referencia super-poniéndoles la red de carreteras:

:∼>g.region rast=qb_murcia :∼>d.erase :∼>d.rast qb_murcia :∼>d.vect

Red_Gral_carreteras color=red

Comprobarás el desplazamiento que se produce en la location murciaetrs89 (figura 11.1).

Ahora vamos a importar correctamente el mapa qb_murcia de la location murcia a la location murci-aetrs89:

# r.proj input=qb_murcia location=murcia output=qb_murcia_b

y comprobamos el resultado:

:∼>g.region rast=qb_murcia_b :∼>d.erase :∼>d.rast qb_murcia_b :∼>d.vect

189

Page 202: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 11.1: Mapa raster importado incorrectamente

190

Page 203: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 11.2: Mapa raster importado correctamente

Red_Gral_carreteras color=red

Puedes ver en la figura 11.2 que ahora se ajusta perfectamente.

11.3 Configuración de PROJ4 y GRASS para utilizar la rejilla del IGN

Procedimiento a seguir para configurar la transformación de ED50.

Este procedimiento sirve para configurar en MAPSERVER, GRASS y en general todos los programasque usan PROJ4 la transformación de ETRS89 a ED50 con mejor calidad de los resultados obtenidos enel proceso que la usada por defecto por estos programas.

Para ello se emplea el método de transformación de rejilla NTV2 considerado como oficial por el IGN,que demuestra dar mucho mejor resultado que el método de transformación predeterminado de siete

191

Page 204: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

parámetros.

11.3.1 Configuración de PROJ4

Los pasos para configurar la librería PROJ4 son los siguientes:

1. Descargar del sitio oficial del IGN el archivo llamado sped2et.gsb (archivo de rejilla)

2. Copiar el archivo en el directorio donde se han instalado las especificaciones EPSG (normalmenteen /usr/share/proj/)

3. Buscar y modificar las líneas del archivo de configuración /usr/share/proj/epsg referentes a lossistemas para España ED50 y ETRS89, de forma que se queden de la siguiente manera:

# ED50 / UTM zone 29N<23029> +proj=utm +zone=29 +ellps=intl +units=m +nadgrids=sped2et.gsb +no_defs no_defs <># ED50 / UTM zone 30N<23030> +proj=utm +zone=30 +ellps=intl +units=m +nadgrids=sped2et.gsb +no_defs no_defs <># ED50 / UTM zone 31N<23031> +proj=utm +zone=31 +ellps=intl +units=m +nadgrids=sped2et.gsb +no_defs no_defs <># ETRS89 / UTM zone 29N<25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +nadgrids=null +no_defs <># ETRS89 / UTM zone 30N<25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +nadgrids=null +no_defs <># ETRS89 / UTM zone 31N<25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +nadgrids=null +no_defs <>

11.3.2 Configurar GRASS

1. Copiar el archivo sped2et.sgb en el directorio de GRASS que define las espcificaciones de las trans-formaciones (recordar que cuando se instala GRASS, éste no trabaja sobre el PROJ instalado, sinoque hace una copia local). En el caso de este PC la ruta es "/usr/local/grass-6.3.0RC6/etc/nad/".

2. Modificar el archivo $GISBASE/etc/datumtransform.table" para incluir la línea:

eur50 "nadgrids=sped2et.gsb" "ETRS89 - EUR50" "Transformacion IGN"

Esta línea se debe incluir entre las líneas ya existentes de parámetros de transformación exis-tentes en GRASS y sirve para poder disponer de dicha opción en los módulos relacionados conlas proyecciones en GRASS (como a la hora de configurar una nueva LOCATION o con "g.proj".A partir de esta línea en las nuevas LOCATION GRASS será capaz de escoger los parámetros apartir de la rejilla.

3. Al crear una nueva LOCATION, GRASS incluirá como alternativa para el paso a WGS84 la nuevaopción, si no es así basta con añadir al final del fichero PROJ_INFO la siguiente linea:

nadgrids: sped2et.gsb

4. Finalmente en las LOCATIONS ya existentes se debe modificar el archivo "PROJ_INFO" paraañadirles la linea anterior

192

Page 205: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 12

Producción de cartografía en papel

En esta práctica se va a utilizar GMT y el driver PNG de GRASS para generar cartografía con el objetivode imprimirla en papel. El planteamiento básico consiste en que cada mapa se define y configura comoun pequeño script que resulta fácil editar y corregir.

12.0.3 El driver PNG

El sistema de visualización de GRASS utiliza por defecto el entorno X11. Sin embargo puede utilizarsecomo alternativa el driver PNG, utilizando las librería libpng1 y zlib2.

Este driver se activa como si fuese un monitor gráfico (d.mon start=PNG) y se cierra del mismomodo (d.mon stop=PNG). Todas las órdenes de visualización que se ejecuten entre tanto iran generandocapas en un fichero PNG en lugar de en un monitor gráfico.

Existe un conjunto de variables de entorno que permiten modificar las características del fichero PNGresultante:

• GRASS_WIDTH=xxxEstablece la anchura de la imagen en puntos (por defecto 640).

• GRASS_HEIGHT=yyyEstablece la altura de la imagen (por defecto 480).

• GRASS_PNGFILE=filenameNombre del fichero que se va a generar (por defecto map.png). Si el fichero tiene extensión ,ppmse creará un PPM en lugar de un fichero PNG.

• GRASS_BACKGROUNDCOLOR=RRGGBBEspecifica el color de fondo en notación RGB hexadecimal (por defecto 000000 o sea negro).

• GRASS_TRUECOLOR=[TRUE|FALSE]Habilitar o no la opción TRUECOLOR, es necesario habilitarla para conseguir colores de 24 bytes.

1http://www.libpng.org/pub/png/2http://www.info-zip.org/pub/infozip/zlib/

193

Page 206: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

12.0.4 GMT

GMT3 (Generic Mapping Tools) pone a disposición del usuario un conjunto de módulos orientados a laproducción de cartografía a partir de datos codificados según los modelos lógicos (raster, vectorial, listade puntos) habituales en los SIG. Los datos raster se almacenan por defecto en formato propio (GMT/netCDF) pero también se admiten ficheros binarios con datos en coma flotante, enteros, bytes o bits. Losdatos vectoriales se almacenan como simples pares de coordenadas, no se incluye por tanto informacióntopológica pero de hecho no tiene sentido incluirla si el resultado que espera obtenerse es un mapa paraimprimir en papel.

El manejo de estos módulos en linea de comandos y la posibilidad de combinarlos (entre si y con otrasherramientas UNIX) así como el elevado número de opciones de cada uno de ellos, convierte GMT enun entorno de maquetación de mapas extremadamente flexible. La contrapartida de esta flexibilidad esun lenguaje que puede llegar a ser bastante complejo y hermético.

Los módulos de GMT más utilizados para crear cartografía son:

• psbasemap, prepara la base cartográfica teniendo en cuenta la extensión de los datos y la escala.

• grdimage, incluye un fichero raster.

• psimage, incluye un fichero de imagen (fichero gráfico SUN rasterfile).

• grdcontour, genera isolineas a partir de un mapa raster.

• psxy, dibuja elementos vectoriales (puntos, lineas, polígonos).

• pstext, escribe textos.

• pslegend, Incluye una leyenda.

Existen muchos más módulos pero, o bien no son directamente de propósito cartográfico, o bien hacencosas que se pueden hacer igual con GRASS. En parte por simplificar la práctica y en parte porquemuchas de las cosas que hacen estos módulos se pueden hacer de forma más sencilla con GRASS, vamosa utilizar sólo los módulos psbasemap para obtener marcos con coordenadas en los bordes con unadeterminada escala y adaptados a un tamaño de papel, y psimage para introducir gráficos previamentegenerados con el driver PNG en GRASS.

El módulo grdcontour es útil para introducir isolineas etiquetadas a partir de un mapa raster.

GMT genera mapas en formato postscript mediante la inclusión progresiva de diversos elementos almapa/fichero por parte de diferentes módulos. Un fichero postscript se caracteriza por tener:

• Cabecera

• Código para la representación de diversos elementos

• Cierre3gmt.soest.hawaii.edu/

194

Page 207: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Generalmente cuando un programa escribe un fichero postscript debe escribir los tres elementos. En elcaso de GMT, puesto que diversos módulos escriben código de forma sucesiva en un mismo fichero desalida, el módulo que inicia el mapa debe escribir la cabecera pero no el cierre; por el contrario, el últimoen hacerlo debe escribir el cierre y no la cabecera; finalmente los módulos intermedios no deben escribirni cabecera ni cierre.

Para que un módulo de GMT no escriba la cabecera se le pasa la opción -O y para que no escriba elcierre la opción -K

12.0.5 Crear un mapa en formato PNG

Vamos a crear un fichero PNG con un mapa sencillo. En primer lugar es necesario dar valores a lasvariables que van a definir la imagen:

# g.region rast=mde500# export GRASS_WIDTH=1000# export GRASS_TRUECOLOR=TRUE# export GRASS_BACKGROUNDCOLOR=255255255# export GRASS_PNGFILE=mimapa.png

La anchura se expresa en pixels y la altura se calcula a partir de la anchura para mantener las propor-ciones.

A continuación activamos el driver:

# d.mon start=PNG

ejecutamos las órdenes de visualización

# d.rast mde500

y cerramos el driver:

# d.mon stop=PNG

Podemos ya visualizar el mapa creado. Vamos a utilizar el programa display que forma parte del paqueteImagemagick que suele estar presente en las distribuciones de linux.

# display mimapa.png

12.0.6 Crear un mapa en formato postscript

Cuando el objetivo es conseguir un mapa en papel, es importante ajustar bien la resolución en puntospor pulgada y la escala. Para ello puede utilizarse el siguiente script que, a partir de la anchura en papeldeseada para el mapa resultante y la resolución en puntos por pulgada (dpi), calcula el ancho y alto de laimagen en píxeles y la altura en centímetros.

Como ves se utiliza la salida de g.region -p para procesarla mediante pequeños scripts de awk y obtenerlos valores de las variables. Las variables alto y ancho se expresan en píxeles, mientras que altocm yanchocm en centímetros

195

Page 208: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

# dpi=300# i2c=0.39# anchocm=22

# ancho=$(echo $dpi|awk ’{print ’$anchocm’*’$i2c’*’$dpi’}’)

# minx=$(g.region -p|awk ’$1=="west:" {print $2}’)# miny=$(g.region -p|awk ’$1=="south:" {print $2}’)# maxx=$(g.region -p|awk ’$1=="east:" {print $2}’)# maxy=$(g.region -p|awk ’$1=="north:" {print $2}’)

# dx=$(echo $minx|awk ’{print ’$maxx’-’$minx’}’)# dy=$(echo $minx|awk ’{print ’$maxy’-’$miny’}’)

# alto=$(echo $ancho,$dy,$dx|awk -F "," ’{ print $1*$2/$3}’)# altocm=$(echo $alto,$i2c,$dpi|awk -F "," ’{print $1/($2*$3)}’)

Script para ajustar los valores de anchura y altura en papel y de imagen.

A continuación das a las variables los resultados obtenidos con el script

# export GRASS_WIDTH=$ancho# export GRASS_HEIGHT=$alto

y repetimos lo hecho en el ejercicio anterior:

# export GRASS_BACKGROUNDCOLOR=25525255# export GRASS_PNGFILE=mimapa.png# d.mon start=PNG# d.rast mde500# d.mon stop=PNG

Convertimos el fichero PNG a formato SUN rasterfile para que lo entienda GMT.

# pngtopnm mimapa.png|pnmtorast -standard>mimapa.ras

damos valor a algunas variables de entorno de GMT

# gmtset D_FORMAT %7.0f PAPER_MEDIA a4 ANNOT_FONT_SIZE_PRIMARY 10

Hemos modificado el tamaño de las anotaciones y su formato y hemos especificado que queremos obtenerun mapa en A4.

Preparamos la base para el mapa, observa que utilizamos las coordenadas de los límites de la región yla escala la definimos con el ancho y alto en centímetros, todos estos parámetros los obtuvimos con elscript anterior. Observa también la presencia de la opción -K para que el programa no cree el cierre delfichero postscript.

# psbasemap -R${minx}/${maxx}/${miny}/${maxy} -JX${anchocm}c/${altocm}c-B0 -K >mimapa.ps

Añadimos el fichero gráfico creado. Observa también la presencia de las opciones -K y -O para que elprograma no cree ni la cabecera ni el cierre del fichero postscript.

196

Page 209: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

# psimage mimapa.ras -W${anchocm}c/${altocm}c -C0c/0c -O -K>>mimapa.ps

Cerramos el mapa, ahora sólo usamos la opción -O para que el programa no cree la cabecera.

# psbasemap -R -J -B0 -O >>mimapa.ps

El resultado ha quedado almacenado en el fichero mimapa.ps y lo visualizas con gv:

# gv mimapa.ps

12.0.7 Un mapa algo más sofisticado

En este ejercicio haremos lo mismo que antes pero ahora añadiendo contenido al mapa , tanto desdeGRASS como desde GMT.

El programa está en el fichero mapa_grande.sh en el directorio /home/datos/ficheros. Ábrelocon emacs u otro editor que te guste.

# emacs /home/datos/ficheros/mapa_grande.sh

y ejecútalo por pasos copiando y pegando órdenes. El resultado será algo similar al que aparece en lafigura 12.1.

197

Page 210: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 12.1: Mapa creado con GRASS y GMT

198

Page 211: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Capítulo 13

Programación

Hoy en día se considera prácticamente imprescindible, en el trabajo con un SIG, disponer de un entornode programación adecuado para ampliar las capacidades del sistema. En el caso de GRASS, el caráctermodular del programa incrementa el potencial para programar, pudiendose emplear diversos modos deprogramación. Por otro lado la licencia GPL permite mantener el código libre mientras que protege losderechos de los autores al mismo tiempo que se potencia la transferencia de conocimiento.

La mayor parte de los módulos de GRASS se han programado en ANSI-C en entornos Unix utilizandoel conjunto de librerías que proporciona el programa. Los scripts se programan utilizando la BASH shellde Unix. Como excepciones a esta regla general existen algunos módulos escritos en Perl y binariosdesarrollados en Fortran77, estos últimos tienden a reescribirse en C para garantizar la portabilidad. Porotro lado se ha desarrollado una Interfaz Gráfica de usuario con lenguaje TclTk44 (TclTkGRASS).

Programar un script de shell para GRASS es más sencillo de lo que pudiera parecer a primera vista debidoal carácter modular del programa y a que incluye diferentes herramientas para facilitar la programación,además de las herramientas habituales de la shell (awk, sed, cut, etc.)

En GRASS se establecen, de este modo, cuato niveles de programación:

Funciones de librería , el desarrollo a este nivel se lleva a cabo de manera centralizada por el equipo dedesarrollo de GRASS. Se pretende poner a disposición de los programadores un amplio conjuntode funciones SIG de bajo nivel. Entre las más críticas destacan las funciones de lectura y escriturade datos que permiten mantener un entorno de programación consistente a pesar de los cambiosen las estructuras de datos.

Programación de módulos binarios , se estimula el desarrollo de módulos por parte de los usuariossiguiendo las siguientes directrices:

• Programación en ANSI-C

• Utilización de las librerías disponibles

• Creación de interfaces de usuario coherentes con el resto de los módulos

Los módulos así generados pueden enviarse para su aprobación por parte del Equipo de Desar-rollo y su inclusión en posteriores versiones del programa o mantenerse como módulos apartedescargables por Internet

199

Page 212: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Scripts se trata de módulos generados utilizando cualquiera de las shells programables de que disponeUnix, aunque se recomienda utilizar la BASH (Bourne Again Shell). Puede tratarse de simplesguiones para el desarrollo de una tarea rutinaria concreta o elaborados programas de propósitogeneral debido a la gran potencia de BASH y al carácter modular de GRASS. El destino de losmódulos resultantes puede ser el mismo que el de los binarios.

Desarrollo de interfaces para usuario , se programan con Tcl/TK, una IGU programada con TclTkmodular y fácimente personalizable, y hay un proyecto experimental para crear interfaces gráficasde usuario con Python/wxWidgets.

A continuación se comentará brevemente las técnicas básicas de programación de módulos binarios,scripts e interfaces de usuario, obviando, por su complejidad, la programación de funciones. En los trescasos se tratará de una introducción necesariamente muy breve, dándose enlaces y referencias a sitiosdonde encontrar más información.

13.1 Módulos programados con C

El equipo de desarrollo de GRASS ha marcado unas lineas generales de como deben programarse nuevosmódulos para GRASS:

• Utilizar el lenguaje C

• No acceder a los datos directamente sino a través de las funciones de librería correspondientes. Deeste modo se evitan problemas por posibles cambios en las estructuras de los ficheros,

• Utilizar los procedimientos de compilación propios de GRASS,

• Utilizar las librerías de GRASS ya que permiten acelerar considerablemente el proceso de progra-mación y mantener la consistencia entre módulos.

El siguiente ejemplo es un ejemplo mínimo de un módulo de GRASS al que llamaremos main.c

#include "gis.h"int main(int argc, char **argv){

G_gisinit(argv[0]);printf("‘Hola mundo de GRASS\n");

}

Para compilar este programa necesitamos un fichero Makefile:

MODULE_TOPDIR = /usr/local/grass6.3

PGM = g.hola_mundo

LIBES = $(VECTLIB) $(GISLIB)

200

Page 213: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

DEPENDENCIES= $(VECTDEP) $(GISDEP)EXTRA_INC = $(VECT_INC)EXTRA_CFLAGS = $(VECT_CFLAGS)

include $(MODULE_TOPDIR)/include/Make/Module.make

default: cmd

con en el que se comunica a make cual es el directorio raíz del código fuente y herramientas de compi-lación de GRASS, el nombre del programa y las librerías que necesita.

Para compilar este módulo basta con utilizar make, al igual que se hacía al compilar todo GRASS desdeel código fuente, ahora utilizamos la opción INST_NOW=y para que make sepa que debe instalar elejecutable junto al resto de módulos de GRASS.

# INST_NOW=y make

Lógicamente debes tener permiso de escritura en el directorio al que hace referencia la variable MOD-ULE_TOPDIR del fichero Makefile que es el directorio principal de la distribución de GRASS con laque estas trabajando.

13.1.1 Librerías

Entre las librerías disponibles, las más relevantes y utilizadas son:

gislib . Es la más importante y la primera que se desarrollo. Contiene todas las rutinas necesarias paraleer y escribir capas raster y sus diferentes ficheros de soporte; rutinas de acceso a la base de datos;métodos estandarizados para crear una interfaz de usuario; algunas de las funciones más básicas degráficos y para el manejo de vectores y sites y otras funciones de propósito general como reservade memoria, análisis de cadenas de caracteres, etc.

vectorlib . Contiene rutinas para la gestión de datos vectoriales

dblib . Conexiones a bases de datos

displaylib . Contiene funciones para realizar diversas operaciones gráficas y de conversión de coorde-nadas

rasterlib . Contiene las primitivas de las operaciones gráficas de GRASS

Las directivas de preprocesador que deben incluirse en cualquier programa de GRASS que vaya a utilizarestas librerías son:

#include <grass/gis.h>#include <grass/Vect.h>#include <grass/dbmi.h>#include <grass/glocale.h>#include <grass/display.h>

201

Page 214: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

13.1.2 Inicialización y Compilación. El primer programa de GRASS

El sistema de programación de GRASS necesita inicializarse antes de empezar a llamar a sus funciones,para ello se utiliza la función

int G_gisinit (char *programa);

Esta función lee las variables de entorno de GRASS e inicializa una serie de variables ocultas utilizadaspor otras funciones. Utiliza como único parámetro el nombre del módulo que se le debe pasar comoargv[0]. Un primer programa en GRASS podría ser similar al que aparece en la tabla 8.

La compilación de estos programas resulta algo compleja para explicarla aquí. Puede consultarse elmanual del programador de GRASS45 .

13.1.3 Como recopilar información acerca de la location y la región de trabajo

Existe un conjunto de funciones para consultar las variables de entorno relativas a la location y al con-junto de directorios relacionados con GRASS. En general los nombres de las funciones son bastanteexplicativos:

#include "gis.h"void main(int argc, char **argv){

char location[30],mapset[30],gisbase[30],gisdbase[30];G\_gisinit(argv[0]);printf("Hola mundo de GRASS\n");location=G\_location();mapset=G\_mapset();gisbase=G\_gisbase();gisdbase=G\_gisdbase();printf("Location : %s\n",location);printf("Mapset : %s\n",mapset);printf("Gisbase :%s\n",gisbase);printf("Gisdbase : %s\n",gisdbase);printf("Location path : %s\n",G\_location_path());

}

Tabla 9: Consulta sobre las características de la LOCATION en un programa en C

char *G_location();

char *G_mapset();

char *G_myname();

char *G_gisbase();

char *G_gisdbase();

char *G_location_path();

Todas ellas devuelven un puntero a una cadena de caracteres, recuerda que para dar a una variable elvalor devuelto por estas funciones habrás tenido previamente que declarar esta variable y reservar en

202

Page 215: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

memoria el espacio suficiente para almacenar todos los caracteres que va a recibir. La tabla 9 muestra unejemplo

Otras funciones que suministran información relevante son:

int G_projection(); devuelve un entero con el tipo de proyección

char *G_database_projection_name(int proj); recoge este entero y devuelve una ca-dena de caracteres con el nombre de la proyección:

• 0 Filas y columnas

• 1 UTM

• 2 State plane

• 3 Latitud-longitud

• 4 Otros

int G_zone(); en el caso de estar trabajando con la proyección UTM devuelve la zona en la que seencuentra el área de trabajo.

char *G_database_unit_name(int plural); que devuelve las unidades en que se mide eltamaño de celdilla. Si plural=1 las devuelve en plural si no en singular (eso si, las devuelve en inglés)

char *G_database_units_to_meters_factor(); que devuelve el factor de conversión delas unidades de la rejilla a metros.

Por tanto una manera de comunicar al usuario el tipo de proyección de la location en la que está traba-jando sería con el programa que aparece en la tabla 10.

#include "gis.h"void main(int argc, char **argv){

int zona;G\_gisinit(argv[0]);zona=G\_zone();printf("Bienvenido al mundo de GRASS. Proyección: %s \n"

, G\_database_projection_name(G\_projection()));if (G\_projection()==1)printf("Zona %d UTM \n",zona);

}

Tabla 10: Consulta sobre las características de la LOCATION en un programa en C

struct Cell_head{int format; /* Máximo número de bytes por celdilla menos 1 */int compressed; /* 0 = no comprimido 1 = comprimido, */int rows; /* Número de filas */int cols; /* Número de columna */int proj; /* Proyección */

203

Page 216: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

int zone; /* Zona UTM */double ew_res; /* Resolución horizontal */double ns_res; /* Resolución vertical */double north; /* Límites de la capa */double south;double east;double west;

};

Tabla 11: Estructura Cell_head

13.1.4 Estructuras de Información Geográfica

Una de las características más potentes de C es el uso de estructuras, formadas por variables de diferentetipo, para almacenar objetos complejos, como pueden ser los objetos espaciales. Las librerías de GRASSincluyen diversas estructuras como Cell_head que almacena una región de trabajo (tabla 11) o bien lainformación de cabecera de un mapa raster; o Map_info que almacena mapas vectoriales completos eincluye otras estructuras que representan objetos geométricos (puntos, lineas, polígonos), así como susrelaciones topológicas. Si queremos obtener las características de la región de trabajo actual o la regiónde trabajo por defecto deberíamos utilizar las funciones:

int G_get_window(struct Cell_head *region); lee la región de trabajo almacenada enel fichero WIND del MAPSET del usuario y la almacena en region.

int G_get_default_window(struct Cell_head *region); lee la región del fichero DE-FAULT_WIND del mapset PERMANENT.

struct Option{char *key; // Nombre del parámetroint type; // Tipo de parámetroint required; // Obligatorio u opcionalint multiple; // Multiples entradaschar *options; // Rango de valores válidoschar *description; // Descripciónchar *answer; // Valor pasado por el usuariochar **answers; // Valores del usuario si multiple=YES)int count;

};struct Flag{

char key; // Nombre de la opciónchar answer; // Guarda el estado de la opción: 0/1char *description; // Descripción

};

Tabla 12: Estructuras Option y Flag

double G_col_to_easting(double col, struct Cell_head *region); convierte elnúmero de columna de una celdilla en la coordenada X correspondiente

204

Page 217: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

double G_row_to_northing(double row, struct Cell_head *region); convierteel número de fila de una celdilla en la coordenada Y correspondiente

double G_easting_to_col(double easting, struct Cell_head *region); con-vierte la coordenada X de una celdilla en el número de columna correspondiente

double G_northing_to_col(double northing, struct Cell_head *region); con-vierte la coordenada Y de una celdilla en el número de fila correspondiente

13.1.5 Gestión de la linea de comandos

Los parámetros y opciones que el usuario pasa a un módulo a través de la linea de comandos se controlanen GRASS mediante dos estructuras, Option para los parámetros y Flag para las opciones, que permitengestionar tanto la forma de pasar los parámetros como su evaluación.

struct Option *G_define_option(); para definir un parámetro

struct Option *G_define_flag(); para definir una opción

Una vez definido un parámetro u opción, es necesario definir los diferentes miembros de sus estruc-turas. Los miembros más relevantes de las estructuras Option y Flag aparecen en la tabla 12. La funciónencargada de procesar la linea de comandos y almacenar la información extraida en estas estructuras es:

int G_parser(int argc, char *argv[ );

que toma los parámetros de la linea de comandos que se pasan a la función main en C. A continuación losdiferentes parámetros pueden consultarse, lógicamente el más importante es opt->answer. Es una cadenade caracteres, por tanto es necesario pasarlo a entero o real si es de tipo numérico.

13.1.6 Manejo de ficheros raster

int G_open_cell_old(char *name, char *mapset); Abre un fichero raster preexistentea partir de su nombre y el MAPSET en que se encuentra, devuelve un descriptor del fichero.

int G_open_cell_new(char *name); Crea un nuevo fichero raster, devuelve un descriptor delfichero

CELL *G_allocate_cell_buf(); reserva memoria suficiente como para almacenar una fila dedatos raster basandose en el número de columnas de la región.

int G_zero_cell_buf(CELL *buffer); rellena de ceros una fila de datos raster cuya memoriaha sido previamente reservada con CELL *G_allocate_cell_buf();

int G_get_map_row(int fd, CELL *cell, int nfila); Lee la fila número nfila delfichero cuyo descriptor es fd y la guarda en el puntero cell previamente reservada con

CELL *G_allocate_cell_buf();

int G_close_cell(int fd); cierra un fichero raster abierto

int G_get_cellhd(char *name, char *mapset, struct Cell_head *cellhd); guardaen cellhd los datos de cabecera del fichero name. La librería gislib proporciona un tipo específico de es-tructura para el almacenamiento de los datos de cabecera de un fichero raster denominada Cell_head.

Puede encontrarse más información en el manual del programador de GRASS46 y para la versión 5.7 lasreferencias de la API47 .

205

Page 218: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

13.2 BASH Scripts

Para la programación de scripts no hay ningún tipo de limitación ya que cualquier lenguaje de scriptsválido en Unix puede utilizarse (awk, PHP, TclTk, Python, etc.), sin embargo la mayor parte de losscripts se programan en el lenguaje de BASH, una de las shells de Unix. Una shell en Unix es un simpleintérprete de comandos que dispone de un lenguaje propio, se trata por tanto de shells programables, unade las más utilizadas es la BASH (Bourne Again Shell) que incorpora las características de otros shells.

El lenguaje de la BASH (Mike G., 2000; FSF, 2002) permite combinar variables, comandos del sistema,bucles y estructuras condicionales, expresiones aritméticas y lógicas para llevar a cabo tareas específicasde forma automatizada y guardarlos en forma de programa ejecutable. La gran ventaja es que permiteutilizar la gran cantidad de herramientas presentes en un sistema Unix como por ejemplo sed, awk o cut(Kernighan y Pike, 1987)

Bash reconoce dos tipos de comandos: los internos y cualquier programa ejecutable externo de quedisponga el sistema, si se está ejecutando GRASS, los diferentes módulos del mismo son para BASHprogramas externos. Un módulo de GRASS programado como script de BASH hará, lógicamente, usointensivo de los módulos del sistema. Una buena ayuda en la creaión de scripts para GRASS es la con-sulta de los scripts presentes en la distribución del programa en el directorio $GISBASE/scripts. DondeGISBASE es una variable del sistema en la que se almacena el nombre del directorio base de GRASS(por ejemplo /usr/local/grass53).

13.2.1 Listas de tareas con GRASS

En el trabajo con un SIG modular es frecuente tener que encadenar diversas órdenes consecutivas que, enalgún momento, será necesario repetir. Una buena idea para facilitar esta tarea, así como para mantenerun histórico de las operaciones ejecutadas, es abrir un fichero de texto en el que se escriben las diferentesórdenes. Por ejemplo el conjunto de órdenes de la tabla 13 adapta la región de trabajo a la capa rastermde, borra la pantalla gráfica, pinta el mapa mde junto a su leyenda y después pinta el vectorial ríos decolor azul.

Una de las ventajas de trabajar en linea de comandos es la posibilidad de escribir esta secuencia deórdenes en un editor de texto (similar a un bloc de notas pero más potente, que permitirá escribir la listade tareas y guardarla en el fichero mis_tareas.sh:

# gedit mis_tareas.sh &

g.region rast=mded.erased.rast mded.legend mde_tierra at=40,90,1,4d.vect rios

Ejecutar después estas órdenes es tan simple como cortar y pegar de la ventana del editor al terminal detexto tantas veces como sea necesario.

Si se trata de una tarea repetitiva con varias capas raster, podríamos repetir la secuencia de órdenes variasveces modificando tan sólo el nombre del archivo.

206

Page 219: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Figura 13.1: Resultado de la lista de tareas

#!/bin/sh

g.region rast=mde_tierrad.erased.rast mde_tierrad.legend mde_tierra at=40,90,1,4

Tabla 13.1: Muestra un mapa y su leyenda en pantalla

Pero también podemos crear un fichero que contenga esta lista de órdenes y ejecutarlo como si fuese unprograma. Para que un archivo de texto ASCII se convierta en un script ejecutable debemos hacer doscosas:

• Añadir una linea inicial para decirle al sistema cual es el intérprete de comandos que debe encar-garse de ejecutarlo:

#!/bin/sh

• Dar permisos para la ejecución del fichero, por ejemplo:

chmod 755 fichero.sh

dará permiso de lectura, escritura y ejecución al propietario del fichero, mientras que los demásusuarios tendrán sólo permiso de lectura y ejecución.

# sh mis_tareas.sh

207

Page 220: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

#!/bin/sh

mapa=mde_tierra

g.region rast=$mapad.erased.rast $mapad.legend $mapa at=40,90,1,4

Tabla 13.2: Uso de variables en el script anterior

13.2.2 Variables

Las listas de tareas pueden generalizarse usando variables (script 13.2) que pueden contener cadenas decaracteres o números.

De este modo bastaría con modificar el nombre del mapa una sola vez. Sin embargo sería más interesantepasar el nombre del mapa como un parámetro de entrada del programa de manera que no hiciese faltamodificar el texto del script cada vez. Para ello Unix utiliza variables posicionales, de manera que cadaparámetro que se pasa a la orden se identifica por su número de orden mediante las variables $1 $2 $3.... Podemos acceder al número de parámetros pasados con la variable $# y a cada uno de ellos conlas variables $1 a $n, donde n es el número de orden del parámetro.El script 13.3 introduce esta mínimavariación que va a permitir ejecutarlo directamente con el mapa adecuado:

# sh mis_tareas.sh mde_tierra

#!/bin/sh

mapa=$1

g.region rast=$mapad.erased.rast $mapad.legend $mapa at=40,90,1,4

Tabla 13.3: Uso de parámetros posicionales en el script anterior

13.2.3 Variables del sistema

Algunas órdenes de GRASS devuelven variables de entorno de GRASS, relativas a la región de trabajoo a las diferentes capas de información, cuya inclusión en un script puede resultar útil.

g.gisenv

GISDBASE=/mnt/woxter/grassdataLOCATION_NAME=murcia

208

Page 221: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

#!/bin/sh

$mapa=$1

eval ‘r.info -rgstp $mapaeval ‘echo $north $south $east $west|awk ’

print "x="($3+$4)/2" y="($1+$2)/2’‘

Tabla 13.4: Ejemplo de lectura de variables de GRASS y uso de AWK

MAPSET=topografiaDEBUG=0MANDELBROT=42MANDELBROT_ITER=15 GRASS_DB_ENCODING=utf-8MONITOR=x2GRASS_GUI=tcltk

g.region -g

n=4167320s=4160000w=655040e=660920nsres=10ewres=10rows=732cols=588cells=430416

r.info -rgst MDE

min=0.000000max=2381.167969north=4318040south=4123620east=710000west=520000nsres=20ewres=20datatype=FCELL

Para incluir estas variables en el script basta con utilizar la orden eval y entrecomillar (con comillasinversas simples) la orden correspondiente. En el script 13.4 se utiliza esta posibilidad y awk para obtenerlas coordenadas del punto medio de una capa raster, que a su vez se convierten en variables del sistema:

En el script 13.5 se utiliza la misma técnica para obtener todas las capas raster presentes en el mapset

209

Page 222: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

#!/bin/sh

eval ‘g.gisenv‘dir=$GISDBASE/$LOCATION_NAME/PERMANENT/cellhdls $dir

Tabla 13.5: Obtención de un listado de mapas en el mapset PERMANENT

#!/bin/sh

eval ‘g.gisenv‘dir=$GISDBASE/$LOCATION_NAME/PERMANENT/cellhdfor i in $dir;do

echo $idone

Tabla 13.6: Uso de parámetros posicionales en el script anterior

PERMANENT:

13.2.4 Estructuras de control

Todos los lenguajes de programación incluyen estructuras de control como los bulces for o while. Acontinuación aparece un ejemplo para calcular las tablas de multiplicar:

El siguiente ejemplo obtiene un listado de mapas y los devuelve uno por linea:

Ahora vamos a retomar el ejemplo de la primera página para incorporarlo dentro del bucle for quepermitirá pintar todos los mapas:

13.2.5 Scripts de GRASS

• Varios módulos de GRASS son scripts (g.manual, v.report)

• GRASS incluye módulos que ayudan a programarlos (g.gisenv, g.temp, d.menu, g.parser)

• Linux incluye diversas herramientas útiles para la programación de scripts (awk)

• Si se ejecuta un módulo con la opción -script se generará un script para llamar a dicho móduloque puede utilizarse como modelo.

GRASS introduce una sistema de ayuda a la programación de scripts para definir características delmódulo, parámetros y opciones. Todas ellas comienzan con los caracteres:

#%

210

Page 223: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

for mapa in $(ls $dir);dog.region rast=$mapad.erased.rast $mapad.legend $mapa at=40,90,1,4

done eval ‘g.gisenv‘dir=$GISDBASE/$LOCATION_NAME/$MAPSET/cellhdfor mapa in $(ls $dir);do

g.region rast=$mapad.erased.rast $mapad.legend $mapa at=40,90,1,4import -window "GRASS 6.3.0RC4 - Monitor: x2\

- Location: murcia" ${mapa}.pngdone

Tabla 13.7: Uso de parámetros posicionales en el script anterior

• Definición del módulo

#% Module#% description: Test database driver, database must exist and set bydb.connect.#% keywords: database, attribute table#% End

• Definición de parámetros

#% option#% key: test#% type: string#% description: Test name#% required : yes#% multiple : yes#% answer: 1#% options : test1#% end

• Definición de opciones

#%flag#%key: i#%description: Use image list and not group#%end

La

211

Page 224: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

Por otro lado existen una serie de convenciones acerca de como deben programarse los scripts de GRASS,por tanto es conveniente adoptar algunas de estas estrategias de programación:

• Comprobación de que GRASS se está ejecutando

if [ -z "$GISBASE" ]thenecho ""echo "You must be in GRASS GIS to run this program"echo ""exit 1fi

• Comprobar si el sistema tiene awk

#### check if we have awkif [ ! -x "‘which awk‘" ] ; then

echo "$PROG: awk required, please install awk or gawk first" 2>&1exit 1

fi

• Adaptar awk para lenguajes que (como el español) utilizan la coma como separador decimal.

# setting environment, so that awk works properly in all languagesunset LC_ALLexport LC_NUMERIC=C

• Ejecución del parser para que el script interprete los parámetros pasados por el usuario a partir dela definición de parámetros y opciones previamente hecha.

if [ "$1" != "@ARGS_PARSED@" ]thenexec g.parser "$0" "$@"

Si el parser detecta que la orden no tiene parámetros de entrada lanzará la interfaz gráfica deusuario.

El parser analiza todos los parámetros y opciones pasados por el usuario y crea una serie de vari-ables que contienen los valores pasados por el usuario.

Para los parametros se crean las variables GIS_OPT_nombre_del_parametro y para las opcioneslas variables GIS_FLAG_nombre_de_la_opcion.

• Lectura de variables del sistema, existen diversos módulos de GRASS que devuelven variables deGRASS en formato variable=valor

212

Page 225: Geographic Ressources Analysis Support System (GRASS)fobos.inf.um.es/alonso/SIGCCAA/curso_GRASS.pdf · relacional externo (PostgreSQL o MySQL). La herramienta de visualización 3D

– g.gisevn

– g.region -g

– r.info -r

– v.info -t

– v.info -g

– etc.

La orden de unix eval permite ejecutar como órdenes del sistema la salida de cualquier proceso demanera que, por ejemplo, la siguiente orden:

eval ‘g.gisenv‘

define y asigna su valor a variables como GISBASE, GISDBASE, LOCATION _NAME, MAPSET,etc.

• Creación de ficheros temporales para evitar darles un nombre de fichero ya existente.

export temporal="‘g.tempfile $$‘"

213