aprendiendo grass - media.readthedocs.org · queden asociadas a la misma tabla, ... otra forma de...

65
Aprendiendo GRASS Versión Armando Arce 12 de julio de 2017

Upload: ngodien

Post on 19-Sep-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASSVersión

Armando Arce

12 de julio de 2017

Page 2: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y
Page 3: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Índice general

1. Contenidos 3

I

Page 4: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

II

Page 5: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Este documento organiza y resume los comandos más importantesdel producto SIG llamado GRASS (Geographic Resources AnalysisSupport System).

Toda la información ha sido tomada del manual de Grass 7.0

Índice general 1

Page 6: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

2 Índice general

Page 7: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

CAPÍTULO 1

Contenidos

Datos Vectoriales

Un “mapa vectorial” es una capa de datos consistente de una seriede elementos dispersos en el espacio geográfico. Estos pueden serdatos puntuales (sitios de perforación), líneas (carreteras), polígonos(límites de parques), volúmenes (estructuras CAD en 3D) o algunacombinación de ellos. Normalmente, cada elemento en el mapa estaráasociado a un conjunto de atributos de la capa almacenados en unabase de datos (nombres de calles, identificador del sitio, el tipo geoló-gico, etc.). Como una regla general, estos pueden existir en el espacio2D o 3D y son independientes de la región de procesamiento del SIG.

Para listar las diferentes capas de datos, que se han creado en GRASS,existe el comando general llamado g.list. De esto modo para listar sololas capas de datos vectoriales se debe utilizar el parámetro type de la

3

Page 8: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

siguiente forma:

g.list type=vect

Existen también comandos generales para borrar un conjunto de datos(g.remove) o cambiarle el nombre (g.rename). En este caso el paráme-tro vect indica el nombre de la capa de datos a eliminar. Por ejemplo,para borrar una capa vectorial de puntos se podría utilizar un comandocomo:

g.remove vect=puntos

Información de la capa

El comando v.info permite averiguar información sobre una capa da-da. Este comando también permite revisar todo el historial de opera-ciones aplicadas a una capa particular.

Un aspecto importante de este comando es que muestra el tipo y can-tidad de elementos que conforman la capa. Estos elementos puedenser: puntos, líneas, centroides, áreas, caras (3D), núcleos, e islas.

Por ejemplo, el siguiente comando muestra las operaciones aplicadasa la capa lineas1:

v.info -h map=lineas1

Manejo en formato binario

El comando v.in.ogr permite importar capas vectoriales desde diferen-tes formatos binarios. Existe un parámetro opcional spatial que defineuna extensión espacial. Este parámetro permite restringir la región aun subconjunto mientras se importan los datos. La generación y lim-pieza de topología de áreas es ejecutada automáticamente, pero puedefallar en casos especiales.

4 Capítulo 1. Contenidos

Page 9: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Si la proyección cartográfica de la fuente de datos no coincide con lade la localización actual, el comando genera un error. Si se desea ig-norar esta diferencia entre proyecciones se puede usar el parámetro -oque sobrescribe la proyección, o bien, se le puede indicar al comandoque cree una nueva localización mediante el parámetro location, condicha proyección.

Mediante el parámetro type se puede cambiar el tipo de dato por omi-sión, por ejemplo: point importa los centroides de las áreas como pun-tos, line importa las fronteras de las áreas como líneas, boundary im-porta líneas como fronteras de áreas, y centroid importa puntos comocentroides.

Por ejemplo, para importar una capa vectorial de líneas, en formatoshapefile, se podría utilizar el siguiente comando:

v.in.ogr dsn=c:/temp/lineas.shp output=lineas1 -o

La exportación de datos vectoriales se realiza mediante el coman-do v.out.ogr, el cual puede exportar a diferentes formatos, como porejemplo shapefile. El parámetro type permite indicar el tipo de ele-mento que se desea exportar. Algunos ejemplos de la utilización deeste comando son los siguientes:

v.out.ogr input=puntos type=point layer=1→˓format=ESRI_Shapefile \dsn=C:/temp olayer=puntos -e -c

v.out.ogr input=lineas2 type=line layer=1→˓format=ESRI_Shapefile \dsn=C:/temp olayer=segmentos -e -c

v.out.ogr input=poligonos1 type=centroid layer=1→˓format=ESRI_Shapefile \dsn=C:/temp olayer=centroides -e -c

v.out.ogr input=poligonos1 type=area layer=1→˓format=ESRI_Shapefile \dsn=C:/temp olayer=poligonos -e -c

1.1. Datos Vectoriales 5

Page 10: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Manejo de datos en formato ASCII

Los módulos v.in.ascii y v.out.ascii permiten el ingreso/exportaciónde archivos de texto conteniendo coordenadas y datos de atributos,respectivamente. Se pueden utilizar dos formatos para dichos datos(parámetro format ): puntual o vectorial. Para el caso del formato pun-tual (point) cada fila del archivo contendrá las coordenadas X,Y de unpunto junto con algunos otros atributos asociados. Los valores pue-den estar separados por un delimitador (parámetro fs) que seleccioneel usuario. Si no se definen los nombres de las columnas (parámetrocolumns) entonces se utilizan nombres por omisión. También existenparámetros para especificar el número de la columna en donde apare-ce el valor de X, Y, Z y el identificador o categoría (parámetro cat).

El formato vectorial (standard) utiliza varias filas del archivo para es-pecificar todos los vértices (uno por fila) que componen un elementogeográfico. Además, se utiliza un código para identificar el tipo deelemento: (P) punto, (L) línea, (A) área, (B) frontera, (C) centroide,etc. Este formato no incluye atributos asociados dentro del mismo ar-chivo, estos residen en otro archivo aparte y son asociados medianteun identificador o categoría (cat) común a ambos archivos. Un archi-vo en formato vectorial puede contener una mezcla de elementos dediferentes tipos, sin embargo, es conveniente intentar mantener úni-camente elementos del mismo tipo en cada archivo.

El separador de datos (parámetro fs) puede ser un caracter cualquiera;o la palabra tab, space, comma ó un espacio en blanco. El formatode los datos de latitud,longitud pueden ser dados en grados decimales(+/-) DDD.DDDDDD

Ejemplo datos puntuales

Un archivo ASCII con coordenadas geográficas, llamado coords.txt,podría lucir de la siguiente forma:

1664619,51034811664473,50957821664273,5101919

6 Capítulo 1. Contenidos

Page 11: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

1663427,51052341663709,5102614

Para importar este archivo en Grass se debe utilizar el siguiente co-mando:

v.in.ascii fs=',' input=coords.txt output=mymap1

Como la opción cat no aparece, un campo extra llamado cat que con-tiene los identificadores será auto-generado.

Considere ahora otro archivo llamado points.txt que incluirá atributosy el identificador en forma explícita:

1,1664619,5103481,studna2,1664473,5095782,kadibudka3,1664273,5101919,hruska4,1663427,5105234,mysi dira5,1663709,5102614,mineralni pramen

El comando para importar este otro archivo varía pues es necesarioespecificar el nombre de cada campo:

v.in.ascii fs=',' input=points.txt output=mymap2 \x=2 y=3 cat=1 columns='cat int,x double

→˓precision, \y double precision,label varchar(20)'

En el momento que se requiera volver a exportar estos datos en forma-to ASCII, se utilizará el siguiente comando (el orden de los campospuede variar en la salida):

v.out.ascii fs=',' input=mymap2 output=points.txt→˓columns=label

1.1. Datos Vectoriales 7

Page 12: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Ejemplo datos lineales

Un archivo ASCII también puede contener datos lineales, sin embargose requiere un dato adicional que indique de cuántos vértices constacada línea y en cuántas capas está presente. Luego de listar los vérticesaparece un dato con el número de capa y su identificador (categoría)en esa capa. Estos datos se muestran en el siguiente archivo llamadolines.txt:

L 6 15958812 34008285958957 34008775959021 34009305959048 34009735959069 34010325958812 34008281 5

L 4 15959010 34013385959096 34013705959091 34014505959010 34013381 7

En este caso se definen dos líneas, la primera consta de seis vérticesy aparecerá solo en la capa 1 con número de categoría (cat) de 5, lasegunda línea consta de cuatro vértices aparece solo en la capa 1 y sunúmero de categoría es 7.

El comando para importar este archivo no varía de aquellos utilizadospara datos puntuales, sin embargo se debe utilizar la opción -n paraindicar que el archivo no incluye encabezados:

v.in.ascii input=lines.txt output=mymap3 -n→˓format=standard

Sin embargo, aún falta importar los datos sobre atributos asociados.El archivo linesAttr.csv muestra algunos atributos en formato CSV loscuales pueden ser convertidos a format DBF utilizando una aplicaciónde hoja de cálculo:

8 Capítulo 1. Contenidos

Page 13: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

cat,label1,St.Paul Park2,Central Park3,South Park

El comando utilizado para asociar (conectar) el archivo de atributosen formato DBF con el mapa de líneas, es el siguiente:

v.db.connect map=mymap2 table=linesAttr key=cat

La exportación de datos lineales en formato ASCII se realiza de lamisma que los datos puntuales con la excepción al indicar el formatode salida. Note que los atributos asociados no estarán presentes enla salida. Un aspecto interesante es que este pueden filtrar algunoselementos, al realizar la exportación, utilizando el parámetro where:

v.out.ascii input=mymap3 output=lines.txt -n→˓format=standardwhere="cat => 2 and cat <= 8"

Ejemplo datos poligonales

La importación de datos que representan áreas también es posible enGrass de la misma forma en que se importan datos lineales. En estecaso basta con cambiar el identificador de línea (L) por una identifica-dor de áreas (A). El archivo areas.txt muestra este formato (note quelas coordenadas del primer y último vértice deben coincidir):

A 6 15958812.48844435 3400828.842210115958957.29887089 3400877.112352295959021.65906046 3400930.74584365959048.47580612 3400973.652636655959069.92920264 3401032.649477095958812.48844435 3400828.842210111 1

A 4 15959010.9323622 3401338.36037757

1.1. Datos Vectoriales 9

Page 14: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

5959096.7459483 3401370.540472355959091.38259917 3401450.990709325959010.9323622 3401338.360377571 3

El formato de importación es el mismo utilizado en datos lineales:

v.in.ascii input=areas.txt output=mymap4 -n→˓format=standard

De igual forma que antes, es necesario asociar este mapa con su res-pectiva tabla de atributos asociados. En este caso se utiliza el coman-do mostrado anteriormente, aún cuando los dos mapas (líneas y áreas)queden asociadas a la misma tabla, lo cual es permitido:

v.db.connect map=mymap3 table=linesAttr key=cat

Ejemplo datos poligonales usando fronteras

Otra forma de definir polígonos en Grass es utilizar el concepto defronteras (boundaries) y centroides del polígono. Este mecanismo esmás recomendado que el uso de áreas. En este caso se deben definirdos elementos por cada polígono, la frontera del mismo (similar alelemento “área” visto anteriormente) y las coordenadas de un puntocualquiera dentro del polígono (el centroide). El siguiente archivo deejemplo muestra estos datos incluyendo todos los encabezados (quepueden omitirse):

ORGANIZATION: GRASS Development TeamDIGIT DATE: 1/9/2005DIGIT NAME: -MAP NAME: testMAP DATE: 2005MAP SCALE: 10000OTHER INFO: Test polygonsZONE: 0MAP THRESH: 0.500000VERTI:

10 Capítulo 1. Contenidos

Page 15: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

B 65958812.48844435 3400828.842210115958957.29887089 3400877.112352295959021.65906046 3400930.74584365959048.47580612 3400973.652636655959069.92920264 3401032.649477095958812.48844435 3400828.84221011

C 1 15958952.42189184 3400918.231264191 20

B 45959010.9323622 3401338.360377575959096.7459483 3401370.540472355959091.38259917 3401450.990709325959010.9323622 3401338.36037757

C 1 15959063.08352122 3401386.985332771 21

Aquí es importante resaltar que cada frontera (boundary) debe ser se-guida por su respectivo centroide. La información de la capa y el iden-tificador (categoría) del polígono se especifica en el centroide. En elcaso anterior ambos polígonos aparecen únicamente en la capa 1, elprimer poligono tiene un identificador de 20 y el segundo polígono de21.

Topología vectorial

GRASS es un SIG topológico. Esto significa que los componentesgeográficos adyacentes en un mismo mapa vectorial están relaciona-dos. Por ejemplo en un SIG no topológico si dos áreas compartenuna frontera común esa frontera se digitalizada dos veces y tambiénse almacena por duplicado. En un SIG topológico existe dicha fron-tera una sola vez y se comparte entre dos áreas. La representacióntopológica de datos vectoriales ayuda a producir y mantener mapasvectoriales con geometría limpia, así como permite algunos análisisque no pueden llevarse a cabo con datos no topológicos o espaguetis.

1.2. Topología vectorial 11

Page 16: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

En GRASS, los datos topológicos se conocen como datos de nivel 2,y los datos espaguetis se conocen como nivel 1.

Operaciones de topología

En GRASS las líneas y los límites pueden estar compuestos de variosvértices.

La topología de área también contiene información sobre islas. Estasislas se encuentran dentro de esa área, sin tocar los límites de la zonaexterior. las islas son agujeros dentro de la zona, pueden consistir enuna o más áreas y se utilizan internamente para mantener la topologíacorrecta para áreas.

Creación de topología de polígonos

GRASS define una capa de áreas (polígonos) como compuesta de dostipos de entidades: un conjunto de fronteras cerradas y sus centroides.La información de atributos se asocia al centroide.

Por tanto, para crear la topología de polígonos son necesarios dos co-mandos. El primer comando v.type permite cambiar el tipo de una ca-pa. En este caso interesa convertir una capa de “líneas” en “fronteras”de áreas. En el parámetro from_type se especifica el tipo actual y en elparámetro to_type el nuevo tipo. Por ejemplo, el siguiente comandorealiza dicha conversión:

v.type input=lineas output=fronteras from_→˓type=line to_type=boundary

El segundo comando v.centroids permite definir el polígono en sí (ysu centroide asociado) utilizando una capa de fronteras (boundaries).El siguiente ejemplo muestra la forma de invocar este comando:

v.centroids input=fronteras output=poligonos

12 Capítulo 1. Contenidos

Page 17: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Creando polilíneas desde segmentos

El comando v.build.polylines construye polilíneas uniendo muchas li-neas continuas. Una línea se define mediante un nodo de partida, unnodo final y cualquier número de vértices entre el inicio y el nodofinal. La línea más corta posible sólo consta de dos vértices donde lascoordenadas del nodo de inicio y final son idénticas a las de los dosvértices. Un ejemplo de uso de este comando sería:

v.build.polylines input=lineas output=polilinea

v.build.polylines maneja correctamente mapas vectoriales de entradaque contienen líneas, fronteras, centroides y puntos. Las líneas y lasfronteras se convertirán en polilíneas. Se garantiza la preservación delas áreas.

Separación de líneas

Para separar líneas en sus respectivos segmentos junto con sus in-tersecciones se utiliza el comando v.clean junto con el parámetrotool=break. Un posible comando para hacer esto sería:

v.clean input=lineas type=line tool=break \output=segmentos err=intersección

Note que en lineas2 las líneas se parten en cada intersección creandonuevos elementos.

Remoción de líneas duplicadas

El comando v.clean también puede ser utilizado para remover elemen-tos duplicados, pero en este caso mediante el parámetro tool=rmdulp.Dicha opción elimina elementos geométricos con coordenadas idén-ticas. Las categorías se fusionan. Si un punto y un centroide tienencoordenadas idénticas, una de ellas será eliminada si ambos puntosy centroides son seleccionados con: v.clean type=point,centroid Lomismo se aplica para líneas y límites.

1.2. Topología vectorial 13

Page 18: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Manipulación de líneas

El comando v.split permite dividir líneas en segmentos más pequeños.Este comando divide las líneas en segmentos de un largo indicado enel parámetro length. Un ejemplo de uso de este comando sería:

v.split lineas out=segmentos length=0.1

Creación de puntos desde una línea

El comando v.to.points permite crear una capa de puntos a partir dela frontera de los polígonos o a partir de líneas, para eso es necesarioespecificar a cuanta distancia se crearán los puntos. Un posible uso deeste comando sería:

v.to.points input=lineas output=puntos dmax=0.1

Creación de líneas paralelas

El comando v.parallel facilita la creación de líneas paralelas a otraslíneas. En este caso es necesario indicar mediante el parámetro distan-ce, la distancia a cual se generarán dichas líneas paralelas. Tambiénse puede indicar a que lado se debe generar la línea utilizando el pa-rámetro side cuyo valor puede ser: left, right, o both. Por ejemplo sepodría utilizar el siguiente comando para generar líneas paralelas:

v.parallel input=lineas distance=0.1 side=left→˓output=paralelas

Corrimiento y/o escalamiento

Para realizar el escalamiento o corrimiento de todos los elementosde una capa vectorial es posible utilizar el comando v.transform. Eneste caso se utilizan los parámetros xshift, yshift, xscale y yscales,

14 Capítulo 1. Contenidos

Page 19: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

los cuales son definidos conforme a la transformación deseada. Unejemplo del uso de este comando, sería el siguiente:

v.transform input=lineas output=transformacion \xshift=0.1 yshift=0.1 xscale=1 yscale=1

Un aspecto interesante es que los parámetros de transformación pue-den ser tomados desde la tabla de atributos asociada al mapa vectorial.En este caso los objetos vectoriales pueden ser transformados con di-ferentes parámetros basados en su número de categoría.

Datos Raster

Un mapa raster es una capa de datos consistente de un arreglo matri-cial de celdas. Este tiene una cierta cantidad de filas y columnas, conun dato puntual (o un indicador de valor nulo) en cada celda. Estospueden existir como una rejilla en 2D o como un cubo en 3D.

Las fronteras geográficas de un mapa raster son descritas por los cam-pos: north, south, east y west. Estos valores describen las líneas queacotan el mapa en sus esquinas. Estas líneas no pasan a través delcentro de la rejilla de celdas en la esquina del mapa, sino afuera delmapa.

Como regla general en GRASS:

Las salidas de mapas raster tiene sus fronteras y resoluciónigual a la región en procesamiento actual.

Los mapas de entrada raster son automáticamente cortados ore-escalados para que coincidan con la región actual.

Importación de datos usando Grass ascii

El comando r.in.ascii convierte un archivo raster en ASCII a una caparaster en binario. El archivo raster ASCII tiene una sección de enca-

1.3. Datos Raster 15

Page 20: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

bezado que describe la ubicación y tamaño de los datos, seguidos porlos datos.

El encabezado tiene 6 líneas:

north: xxxxxx.xxsouth: xxxxxx.xxeast: xxxxxx.xxwest: xxxxxx.xxrows: rcols: c

Los campos north, south, east y west son las coordenas de las esquinasde la región geográfica. Los campos rows y cols describen las dimen-siones de la matriz de datos a seguir. Los datos que siguen son r filasde c enteros, pero no es necesario que todos los datos de una fila esténen una línea.

Opcionalmente los siguientes parámetros pueden ser definidos en lasección de encabezado:

null: nntype: floatmultiplier: 2.

“null” define un string o número a ser convertido a valor nulo(no data).

“type” define el tipo de dato (int,float,double) y no es requerido

“multiplier” es una parámetro opcional para multiplicar cadavalor en las celdas

Ejemplo

Considere el siguiente archivo, llamado ejemploRaster.txt, que inclu-ye una serie de valores de ejemplo:

north: 4299000.00south: 4247000.00

16 Capítulo 1. Contenidos

Page 21: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

east: 528000.00west: 500000.00rows: 10cols: 15null: -9999

1 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 151 2 3 4 5 6 7 8 9 10 11 12 13 14 15

El comando para importar este archivo en GRASS sería similar alsiguiente:

r.in.ascii input=ejemploRaster.txt→˓output=mapRaster1 title="Ejemplo raster"

Exportación de datos ascii

El comando r.out.ascii convierte un capa de una mapa raster en unarchivo de texto ASCII.

El comando para exportar el mapa raster anterior en GRASS seríasimilar al siguiente:

r.out.ascii input=mapRaster1 output=mapRasterOut1.→˓txt

1.3. Datos Raster 17

Page 22: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Definición de la región

Ahora se debe definir la región que utilizará Grass para generar capasraster. Además se debe especificar la resolución (cantidad de filas ycolumnas) que utilizará dicha región, el siguiente comando permiterealizar eso:

g.region n=100 s=0 w=0 e=100 rows=100 cols=100

Despliegue en pantalla

Ahora utilice el comando el siguiente comando para desplegar la ima-gen en pantalla:

d.rast map=interpolacion

Importación y exportación usando ascii ESRI

Otro formato muy utilizado para intercambio de datos entre diferentessoftware de SIG, es el ESRI ARC/INFO ASCII, el cuál es diferentedel GRASS ASCII. El comando utilizado para importar datos en esteformato es r.in.arc y acepta un parámetro type que establece el tipo decelda: CELL para enteros, FCELL para punto flotante (la opción poromisión). El formato de un archivo de este tipo será de la forma:

ncols 10nrows 10xllcorner 100yllcorner 100cellsize 10NODATA_value -9999

0 0 0 0 0 0 0 0 0 01 1 1 1 1 1 1 1 1 12 2 2 2 2 2 2 2 2 23 3 3 3 3 3 3 3 3 3

18 Capítulo 1. Contenidos

Page 23: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

4 4 4 4 4 4 4 4 4 45 5 5 5 5 5 5 5 5 56 6 6 6 6 6 6 6 6 67 7 7 7 7 7 7 7 7 78 8 8 8 8 8 8 8 8 89 9 9 9 9 9 9 9 9 9

Los mapas raster pueden ser exportados en formato ESRI ASCII me-diante el comando r.out.ascii. Otros comandos tal como r.out.png,r.out.tiff y r.out.gdal permite escribir las capas raster en diferentesformatos conocidos.

Ejemplos

Para importar un archivo en formato ARC/INFO ASCII (similares alos presentados anteriormente) se puede utilizar los siguientes coman-dos:

r.in.arc input=raster2.txt output=raster2 type=CELL

Cada capa raster puede ser escrita en un formato adecuado para vi-sualizarlo mediante diferentes software gráficos. Sin embargo, antesde exportar los datos se debe hacer que coincida la región actual yresolución con las de la capa raster:

g.region n=200 s=100 e=200 w=100 cols=10 rows=10r.out.png input=raster1 output=raster1.png

Metadatos

El módulo r.info despliega información general sobre una mapa talcomo la región de extensión, rango de datos, tipos de datos, historiade creación, y otros metadatos. La extensión de una capa raster puedeser administrada con r.region

No hay que confundir este último comando con g.region el cual esutilizado para establecer la región actual. La región actual es la ex-

1.3. Datos Raster 19

Page 24: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

tensión y resolución utilizada por la gran mayoría de comandos paragenerar su salida. Para conocer la región actual se puede utilizar estemismo comando sin parámetros y con la opción -p.

Ejemplos

Mediante los siguientes comandos se modifica la ubicación de la caparaster y se verifica su nueva posición:

r.region map=raster1 n=100 s=0 e=100 w=0r.info map=raster1

Se debe recordar que es importante redefinir la región y resoluciónactual para que coincida con la extensión de la nueva capa raster, conun comando como:

g.region n=100 s=0 e=100 w=0 cols=10 rows=10

Importación y exportación en otros formatos

Para importar datos en cualquier otro formato es conveniente utilizarel comando r.in.gdal que soporta hasta 45 formatos raster diferentes.

Procesamiento Raster

El procesamiento de mapas raster en GRASS se realiza en la configu-ración de la región actual (ver g.region), es decir, se utiliza la medidaen la región actual y la resolución del raster actual. Si la resolucióndifiere de la del mapa ráster de entrada, se lleva a cabo un remuestreo( mediante vecino más cercano ). Si esto no que se desea, el mapade entrada (s) tiene / tienen que ser remuestreados previamente conalgún módulo adecuado.

El remuestreo por vecino más cercano calcula el centro de cada celdade la región, y toma el valor de la celda raster en que el punto se ubica.

20 Capítulo 1. Contenidos

Page 25: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Si el punto se ubica exactamente sobre una línea de la cuadrícula, elresultado exacto será determinado por la dirección de cualquier errorde redondeo. Una consecuencia de esto es que la disminución de laresolución en un factor que es un entero par siempre se calcula exac-tamente en el límite entre las celdas, lo que significa que el resultadono será muy correcto.

Remuestreo de datos raster

El comando r.resample realiza un remuestreo de los valores de los da-tos en una capa raster de entrada (delimitada por la región geográficaactual y enmascarado por la máscara actual), y produce nuevo maparáster de salida que contiene los resultados del remuestreo. Los valo-res de categorías en la nueva capa del mapa ráster de salida será elmismo que los de la original, excepto que la resolución y la extensiónde la capa del mapa ráster de salida debe coincidir con los de la con-figuración de región geográfica actual (ver g.region). r.resample estádestinado a la reinterpolación de datos continuos con una resolucióndiferente en lugar de para la interpolación de datos dispersos (utiliceel v.surf para este propósito).

g.region rast=elev_state_500m -pg.region res=250 -apr.resamp input=elev_state_500m output=elev_state_→˓250m

Establecimiento de la región actual

El comando g.region se utiliza para definir la región geográfica detrabajo. Todas las operaciones raster se aplican sobre dicha región.

g.region rast=name [n=value] [s=value] [e=value]→˓[w=value][t=value] [b=value] [rows=value] [cols=value]→˓[res=value]

donde

1.4. Procesamiento Raster 21

Page 26: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

region=name: Establece el nombre de la región actual

rast=name: Establece que la región coincida con un mapa raster

vect=name: Establece que la región coincida con una mapa vec-torial

n=value: Valor de la esquina mas al norte

s=value: Valor de la esquina mas al sur

e=value: Valor de la esquina mas al este

w=value: Valor de la esquina mas al oeste

rows=value: Cantidad de filas en la región

cols=value: Cantidad de columnas en la región

res=value: Resolución de la rejilla

Reclasificación de datos raster

El comando r.reclass crea una nueva capa de mapa cuyos valores decategoría se basan en una reclasificación de las categorías en una capade mapa raster existente.

Las reglas de reclasificación se leen desde la entrada estándar (es de-cir, desde el teclado, desde un archivo, o por entubamiento a través deotro programa).

r.reclass input=input_raster output=output_raster→˓rules=rules_file

r.reclass sólo funciona con un mapa de entrada de enteros, si el ma-pa de entrada es de datos de punto flotante, hay que multiplicar losdatos de entrada por un factor de escala para convertir en enteros losdatos de entrada, de lo contrario r.reclass redondeará el valor hasta elsiguiente entero.

Un mapa reclasificado no es un mapa ráster de verdad. Más bien, esuna tabla de valores de reclasificación que hacen referencia a la ca-pa del mapa raster de entrada. Por lo tanto, los usuarios que deseen

22 Capítulo 1. Contenidos

Page 27: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

conservar las capas de mapas reclasificados también debe guardar lascapas raster originales de las que fueron generados. Sin embargo, elcomando r.mapcalc se puede utilizar para convertir un mapa de recla-sificación en una capa raster regular:

r.mapcalc "raster_map = reclass_map"

Reglas de reclasificación

Cada línea de entrada debe tener el siguiente formato:

input_categories = output_category [etiqueta]

donde en cada línea de entrada se especifican los valores de la cate-goría en la capa de entrada ráster que se reclasifica a la categoría delnuevo valor output_category. La especificación de una etiqueta queva asociada con la categoría de la capa de salida es opcional. Si seespecifica, se registra como la etiqueta de la categoría para el valor dela nueva categoría. El signo igual = es requerido. El input_categorypuede consistir en valores de las categorías individuales o una seriede tales valores en el formato de “x thru y”. La palabra “thru” debeestar presente.

Para incluir todos los valores (restantes)el asterisco * se puede utilizar.Esta regla se debe establecer como regla últimaa. Ninguna otra reglaserá aceptada después de establecer esta regla. La regla especial “* =*” especifica que todas las categorías no explícitamente establecidospor una de las reglas anteriores se debe pasar sin alteraciones en lugarde estar asignar valores NULL.

Las categorías sin especificar se les establecerá un valor de sa a“NULL”.

Una línea que contiene sólo la palabra end termina la entrada.

1.4. Procesamiento Raster 23

Page 28: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Ejemplos

Una reclasificación que utiliza el asterisco para todos los otros valo-res:

1 3 5 = 1 poor quality2 4 6 = 2 good quality

* = NULL

Una reclasificación que utiliza el palabra thru para realizar la reclasi-ficación:

1 thru 10 = 111 thru 20 = 221 thru 30 = 330 thru 40 = NULL

Conversión raster/vectorial

Dependiendo del tipo de fenómeno geográfico que el dato vectorialrepresenta, se distinguen dos tipos de transformación desde datos vec-toriales y raster:

Para elementos geométricos (puntos, líneas y áreas) se utilizatransformación directa desde vectores a áreas o líneas raster.

Para campos continuos (isolíneas, contornos) se requiere inter-polación espacial para transformar desde líneas vectoriales araster.

Extracción de elementos desde objetos raster a vectores requie-re vectorización.

Vectorización automática de datos raster

Algunas veces es necesario convertir datos raster existentes (líneas,áreas) a datos vectoriales. Esto se puede realizar mediante un meca-

24 Capítulo 1. Contenidos

Page 29: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

nismo automatizado. GRASS provee los módulos r.to.vect y r.contour

Vectorización de puntos raster

Para la vectorización de puntos desde un mapa raster se debe especi-ficar el tipo ‘point’ en el comando r.to.vect, como por ejemplo:

g.region -p rast=escuelasRasterr.to.vect in=escuelasRaster out=escuelasVector→˓feature=point

Vectorización de líneas raster

Existen diferentes procedimientos para la sectorización de líneas yáreas. Con el fin de vectorial una línea de un mapa, un requisito es“adelgazar” todas las líneas del mapa raster con r.thin. Luego, se apli-ca el comando r.to.vect para convertir todas las líneas en el mapa rasteral modelo de datos vectorial. Un secuencia de ejemplo para la conver-sión de carreteras desde un mapa raster es la siguiente:

g.region -p rast=carreterasRaster1r.thin in=carreterasRaster1 out=carreterasRaster2r.to.vect in=carreterasRaster2→˓out=carreterasVector feature=line

Vectorización de áreas raster

Las áreas pueden ser convertidas a polígonos vectoriales con el mismocomando r.to.vect. Esto convierte las áreas raster a polígonos vecto-riales y también copia los atributos al mapa vectorial:

g.region -p rast=suelosRasterr.to.vect in=suelosRaster out=suelosVector→˓feature=area -s

La opción -s suaviza las esquinas. El módulo opera en la región actual.

1.5. Conversión raster/vectorial 25

Page 30: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Creando isolíneas desde superficies raster

El módulo r.contour genera líneas vectoriales desde una mapa rasterque representa una superficie. Entre las opciones que se deben especi-ficar está el intervalo de las líneas (p.ej. 10m), todos los otros valorespueden ser determinados automáticamente. Un ejemplo de este tipode procesamiento es el siguiente:

g.region -p rast=altitudesRasterr.countour in=altitudesRaster out=altitudesVector→˓step=10

La topología es construída automáticamente.

Transformación de datos vectoriales a raster

El comando v.to.rast genera un mapa raster desde un mapa vectorialde entrada. La transformación de objetos vectoriales a celdas rasterdepende de la resolución actual. Establecer la resolución puede serhecho con g.region usando el parámetro res (resolution). La opcióncol permite definir el nombre de un atributo que será utilizado paraasignar la categoría a las celdas (debe ser numérico).

El comando v.to.rast solo afecta los datos en la áreas dentro de lasfronteras de la región actual. Antes de ejecutar v.to.rast el usuariodebe asegurarse que la región actual esté correctamente definida.

Se debe especificar ya sea el parámetro column o el parámetro va-lue. El parámetro column usa una columna existente de la base dedatos vectorial como el valor de categoría en el mapa raster de sali-da. Para mostrar las columnas de la tabla se puede usar el comandodb.describe.

g.region -p vect=cultivosVector res=100db.describe -c table=cultivosVectorv.to.rast in=cultivosVector out=cultivosRaster→˓col=production

26 Capítulo 1. Contenidos

Page 31: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Para convertir un mapa vectorial de polígonos a un mapa raster queincluya etiquetas descriptivas se puede utilizar:

g.region p vect=distritosVector res=10v.to.rast in=distritosVector out=distritosRaster→˓col=codigo labelcol=nombrer.category map=distritosRaster

Análisis puntual

Distancia inversa ponderada

El comando v.surf.idw realiza la interpolación de superficies desdedatos puntuales vectoriales mediante la técnica de distancia inversaponderada. Este comando llena una matriz raster con valores interpo-lados generados desde un conjunto de datos puntuales mediante unatécnica de aproximación numérica (distancia ponderada al cuadrado).

El valor interpolado de una celda es determinado por los valores delos datos puntuales cercanos y la distancia de la celda desde los pun-tos de entrada. En comparación con otros métodos, la aproximaciónnumérica permite representaciones de superficies más complejas, res-tringe la influencia espacial de cualquier error, y genera la superficieinterpolada desde datos puntuales.

Si se especifica un mapa máscara (mask) la interpolación se reali-za únicamente sobre las celdas que se sobreponen a la máscara. Sinembargo, todos los puntos vectoriales dentro de la región actual sonusados aún cuando ellos queden fuera de la máscara. Los puntos vec-toriales fuera de la región actual no son usados para la interpolación.

Existe un parámetro npoints que indica la cantidad máxima de puntoscercanos a utilizar para calcular el valor de una celda. Si este paráme-tro es 1, el resultado será un diagrama raster de Voronoi (polígonosde Thiessen). El parámetro column permite especificar el campo quecontendrá el valor a interpolar. Otro parámetro power indica el pesode la distancia exponencial. El valor por defecto es 2 (al cuadrado).

1.6. Análisis puntual 27

Page 32: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Por ejemplo, el siguiente comando ejecuta este análisis sobre un con-junto de datos vectoriales de entrada:

v.surf.idw input=datos output=salida npoints=3→˓column=valor

Interpolación mediante curvas spline

El comando v.surf.rst ejecuta la aproximación espacial y análisis to-pográfico desde un conjunto de datos puntuales en formato vectorial.El comando genera una capa en formato raster utilizano curvas splinesregularizadas con tensión.

El parámetro zcolumn permite especificar el campo que contendrá elvalor a interpolar. Como una opción, este comando también puedeproducir capas adicionales de declive, aspecto, y curvatura. También,se puede definir una capa mask que será utilizada para calcular laaproximación únicamente sobre aquellas celdas que tengan un valordiferente de cero y NULL. Por ejemplo, el siguiente comando ejecutaeste análisis sobre un conjunto de datos vectoriales de entrada:

v.surf.rst input=datos elev=salida zcolumn=valor

Generación de triangulación de Delaunay

El comando v.delaunay crea una triangulación de Delaunay a partirde un mapa vectorial que contiene puntos o centroides. El opción -rindica que sólo se utilizarán los puntos que se encuentren en la regiónactual. Por omisión el comando genera una capa de polígonos, otraopción -l genera una capa de líneas. Por ejemplo, el siguiente coman-do ejecuta este algoritmo sobre un conjunto de datos de entrada:

v.delaunay input=datos output=salida

28 Capítulo 1. Contenidos

Page 33: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Generación de diagrama de Voronoi

El comando v.voronoi crea un diagrama de Voronoi desde una mapavectgorial de entrada que contiene puntos o centroides. El comandogenera los polígonos de Thiessen para los datos puntuales de entrada.Las fronteras del mapa de salida están limitadas por la región actual.Por omisión el comando genera una capa de polígonos, otra opción -lgenera una capa de líneas. La opción -t no crea la tabla de atributos.Por ejemplo, el siguiente comando ejecuta este algoritmo sobre unconjunto de datos de entrada:

v.voronoi input=datos output=salida

Análisis Raster

En GRASS las fronteras geográficas de un mapa raster son descri-tas por los parámetros: norte (north), sur (south), este (east) y oes-te (west). Estos valores describen las líneas que acotan el mapa ysus esquinas. Esta información puede ser modificada con el comandor.region

Como una regla general en GRASS:

1. Los mapas raster de salida tienen sus fronteras y resoluciónigual a aquellos de la región actual.

2. Los mapas raster de entrada son automáticamente recortados yampliados (usando el algoritmo de vecino más cercano) paracoincidir con la región actual.

3. Los mapas raster de entrada son enmascarados automáticamen-te si un existe un mapa raster llamado MASK.

Cuando se leen datos no georeferenciados, el mapa importado usual-mente tienen su esquina inferior izquierda en (0,0) en el sistema decoordenadas; el usuario necesita usar r.region para “posicionar” elmapa importado. El procesamiento de mapas raster en GRASS essiempre ejecutada en la configuración de la región actual, o sea la

1.7. Análisis Raster 29

Page 34: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

extensión de la región actual y la resolución del raster actual es usa-do.

Si un mapa raster llamado MASK existe, muchos módulos raster deGRASS operan solo en datos que caen dentro del área enmascarada,y tratando cualquier dato que resida fuera de la máscara como si suvalor fuera NULO. La mascara es solo aplicada cuando se lee un maparaster GRASS existente, por ejemplo cuando es usado en un módulocomo un mapa de entrada.

Algebra de mapas raster

El comando r.mapcalc provee métodos del álgebra de mapas. Estemódulo ejecuta aritmética en capas de mapas raster. Nuevas capasde mapas raster pueden ser creadas que son expresiones aritméticasinvolucrando capas de mapas raster existentes, constantes puntualesenteras y funciones.

30 Capítulo 1. Contenidos

Page 35: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Operadores

Operador Significado Tipo Precedencianegación Aritmética 12

! NOT Lógica 12^ exponente Aritmética 11% módulo Aritmética 10/ división Aritmética 10* multiplicación Aritmética 10

adición Aritmética 9

sustracción Aritmética 9

> mayor que Lógica 7>= mayor o igual Lógica 7< menor que Lógica 7<= menor o igual Lógica 7== igual Lógica 6!= diferente Lógica 6&& AND Lógica 3|| OR Lógica 2

Funciones

Algunas de las funciones soportadas son listadas en la tabla de abajo.El tipo del resultado es indicado en última columna. F significa quelas funciones siempre resulta en un valor de punto flotante, I significaque la función da un resultado entero, y * indica que el resultado esflotante si cualquiera de los argumentos de la función son valores depunto flotante y enteros si todos los argumentos son enteros.

1.7. Análisis Raster 31

Page 36: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

función descripciónabs(x) valor absoluto dedouble(x) convierte x a punto flotanteexp(x,y) x a la potencia yif condicional:if(x) 1 si x no es cero, 0 sinoif(x,a) a si x no es cero, 0 sinoif(x,a,b) a si x no es cero, b sinoif(x,a,b,c) a si x > 0, b si x es ceroint(x) convierte x a enteroisnull(x) verifica si x = NULLmax(x,y[,z...]) máximomedian(x,y[,z...]) medianamin(x,y[,z...]) mínimomode(x,y[,z...]) modapow(x,y) x a la potencia ysqrt(x) raíz cuadrada de x

Ejemplos

Se puede obtener una nueva capa raster con los valores promedios delas dos capas raster anteriores, utilizando con el operadores aritméti-cos:

r.mapcalc "raster3=(raster1+raster2)/2"

El siguiente ejemplo muestra la utilización de operadores relacionalespara comparar los valores de las dos capas. La capa resultante conten-drá únicamente valores 0 (falso) ó 1 (verdadero).

r.mapcalc "raster4=(raster1<=raster2)"

La utilización de funciones se muestra en el ejemplo a continuación.

r.mapcalc "raster5=max(raster1,raster2)"

El procesamiento condicional es mostrado en el siguiente comando,

32 Capítulo 1. Contenidos

Page 37: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

el cual selecciona únicamente aquellas celdas con valor 2. Todas lasdemás celdas contendrán un valor de 0.

r.mapcalc "raster6=if(raster1==2)"

Estadísticas en mapas raster

El comando r.statistics permite calcular estadísticas zonales. Este co-mando es una herramienta para análisis estadístico exploratorio deacuerdo a cómo se traslapa con objetos en la capa base. Un variedadde medidas estadísticas estándar son posibles. Todas las celdas en lacapa base son consideradas un objeto para el análisis. Para cierto tipode aplicaciones, puede ser necesario preparar los datos de entrada deforma que todas las áreas de celdas contiguas con el mismo valor enla capa base sean identificadas en forma única, que puede ser hechocon r.clump

Los métodos disponibles para este comando son:

método descripcióndiversity diversidaddistribution distribuciónaverage promediomode modamedian medianaavedev desviación promediostddev desviación estándarvariance varianzamin mínimomax máximosum suma

Los cálculos son ejecutados en cada área de los datos de la capa decobertura que se encuentran dentro de cada valor único, o categoría,de la capa base.

La capa de salida es una versión reclasificada de la capa base conidénticos valores de celda, pero con etiquetas modificadas. Es decir,

1.7. Análisis Raster 33

Page 38: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

los resultados de los cálculos son almacenados en las etiquetas de lacapa de salida. Para transferir los valores almacenados en las etiquetasa los valores de las celdas, se puede usar el comando r.mapcalc juntocon el operador @.

Ejemplos

r.statistics base=raster1 cover=raster2→˓out=raster7 method=averager.mapcalc "raster8=@raster7"

Funciones en vecindario

El comando r.neighbors genera para cada valor de la celda una fun-ción de los valores asignados a las celdas alrededor de ella, y almace-na nuevos valores de celda en la capa raster de salida.

El comando r.neighbors toma cada celda en el archivo raster de en-trada, y examina los valores asignados a celdas en algún vecindario,definido por el usuario, alrededor de ella. Este genera un mapa rasteren el que a cada celda le es asignado un valor que es alguna función(especificada por el usuario) de los valores en el vecindario de la cel-da.

34 Capítulo 1. Contenidos

Page 39: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Métodos de operación en el vecindario:

método descripciónaverage promediomedian medianamode modaminimum mínimomaximum máximostddev desviación estándarsum sumavariance varianciadiversity diversidad

Ejemplos

El siguiente comando crea una capa raster a partir del promedio devalores en un vecindario de tamaño 3:

r.neighbors input=raster2 output=raster9→˓method=average size=3

El siguiente comando muestra un ejemplo adicional con un vecindario“redondo” de tamaño 5:

r.neighbors -c input=raster1 output=raster10→˓method=average size=5

Agrupamiento de celdas

El comando r.clump encuentra todas las áreas de valores de celdascontinuas en el mapa raster de entrada. Este asigna un valor único acada una de estas áreas (“grupo”) en el mapa raster de salida. La dis-tinción de categorías en el mapa de entrada es preservada. Esto signi-fica que si distintos valores son adyacentes, ellos no serán agrupadosjuntos. El algoritmo utilizado no considera celdas en diagonal.

1.7. Análisis Raster 35

Page 40: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Ejemplos:

Para crear los diferentes grupos de una capa raster se puede utilizar elcomando:

r.clump input=raster1 output=raster11

Análisis Vectorial

Traslape de capas

El comando v.overlay permite calcular el resultado de aplicar diferen-tes operaciones de traslape de capas. El párametro operator permiteespecificar el operador a utilizar, el cual podría ser or para calcular launión de capas. Grass también permite ejecutar la intersección, sus-tracción y la no-intersección de polígonos mediante los operadoresand, not y xor. El siguiente comando permite calcular la unión de doscapas de polígonos:

v.overlay ainput=poligonos1 binput=poligonos2 \output=poligonos3 operator=or

Distancia entre elementos

El comando v.distance permite encontrar los elementos más cercanosa puntos. La capa resultante consiste de una conjunto de segmentosque unen los puntos con su línea más cercana. Sin embargo, antes dehacer esto es necesario crear en la capa fuente un campo en dondequedará almacenado el identificador (cat) del elemento más cercano.Los comandos para crear un nuevo campo en la tabla y luego la dis-tancia serían:

v.db.addcol map=puntos1 columns="cercano INT"v.distance from=puntos1 to=lineas1 output=lineas3 \

upload=cat column=cercano

36 Capítulo 1. Contenidos

Page 41: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Este comando también puede ser utilizado para calcular la operaciónpunto en polígono ya que cuenta con un parámetro dmax que puedeser establecido en 0. Por ejemplo, al ejecutar el siguiente comando:

v.distance from=puntos2 to=poligonos3→˓output=lineas4 \

dmax=0 upload=cat column=cercano

También se puede calcular la distancia que existe entre los elementoscercanos usando upload=cat,dist y column=cercano,distancia. Re-cuerde que previamente se deben crear los campos: cercano y dis-tancia.

Operación de buffer

La operación buffer es utilizada para dibujar una zona alrededor dela entidad inicial, de forma que las fronteras de la zona estén todas auna distancia d desde las coordenadas de la entidad original. Si estaes una entidad puntual, entonces la zona es un círculo, si la entidad esuna línea recta, un rectángulo con finales redondeados aparece, parauna línea irregular o un polígono aparece una figura poligonal.

La distancia d puede ser la misma para todos los buffers o puede uti-lizarse una distancia diferente para cada buffer a generar. En este casodicho valor se toma de algún atributo (bufcolumn) desde la tabla aso-ciada a las entidades geográficas.

La operación de buffer también permite especificar una distancia me-nor (minordistance) para los buffers. En este caso las figuras que segeneran, por ejemplo para entidades puntuales, consisten de discos(círculos con un hueco en el centro).

Para generar buffers alrededor de cualquier tipo de elemento se utilizael comando v.buffer. Por ejemplo, el siguiente comando genera puntosde radio 2 para los puntos de la capa puntos1:

1.8. Análisis Vectorial 37

Page 42: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

v.buffer input=puntos1 output=buffers1 buffer=0.2

El comando de buffer puede ser utilizado con un valor de buffer di-ferente para cada elemento de la capa. Para ello basta con definir uncampo de la capa en que reside dicho valor, por ejemplo:

v.buffer input=puntos1 output=buffers2→˓bufcol=tamano scale=0.1

Operación de líneas paralelas

Esta operación genera líneas paralelas a las líneas existentes, a dife-rencia de la operación de buffer ésta no genera polígonos. Igual queantes se debe especificar la distancia d a la que se generan las líneasparalelas.

Para esta operación también se cuenta con un parámetro adicional(side) que permite indicar si las líneas paralelas se generarán a la iz-quierda (right) de la línea original, a la derecha (left), o a ambos lados(both).

El siguiente comando genera líneas paralelas a ambos lados de lasentidades de la capa de entrada.

v.parallel input=Ln01 output=LnPrldistance=200 side=both

Disolver fronteras

Si se desea “disolver” las fronteras entre elementos que compartenuna característica común se puede utilizar el comando v.dissolve. Porejemplo, el siguiente comando “une” aquellos polígonos del mismotipo:

v.dissolve input=poligonos3 output=poligonos8→˓col=a_cat

38 Capítulo 1. Contenidos

Page 43: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Extraer elementos con base en atributos

El comando v.extract permite crear una nueva capa de elementos se-leccionados a partir de ciertos valores de sus atributos. Por ejemplo,el siguiente comando extrae los puntos que se ubican al “oeste”:

v.extract input=puntos1 output=puntos4 \where=”ubicacion = ‘Oeste’ ”

Extraer elementos con base en relación espacial

El comando v.select permite crear una nueva capa de elementos se-leccionados a partir de la geometría de otra capa. Por ejemplo, el si-guiente comando extrae los puntos que se ubican sobre poligonos2:

v.select ainput=puntos1 binput=poligonos2 \output=puntos6 operator=overlap

Este comando también permite extraer elementos que se traslapan (noúnicamente aquellos que están totalmente contenidos).

Operaciones geométricas

Una cierta cantidad de operaciones permiten generar nuevas geome-trías a partir de los datos existentes.

Construir polilíneas

Una de las funciones geométricas más sencillas (v.build.polylines)consiste en tomar un grupo de líneas individuales, pero que se en-cuentran en secuencia, y construir una polilínea a partir de ellas.

1.8. Análisis Vectorial 39

Page 44: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Separación de líneas

La operaciones v.split y v.segment permiten dividir líneas que son muylargas.

Operaciones de traslape

Aquí se analiza las operaciones sobre atributos desde dos o más en-tidades que ocupan o cubren, en forma total o parcial, el mismo es-pacio. Es decir, se consideran problemas de inclusión de la forma: Acontiene a B, ó A está contenido por B; y de traslape e intersecciónde la forma: A cruza B, ó A se traslapa con B; donde A y B son dosentidades geográficas diferentes.

Recorte

La operación de recorte (v.overlay operator=and) crea una nueva ca-pa mediante el traslape de dos grupos de elementos. Los polígonosde la capa de traslape definen la región de recorte. La operación usala región como un cortador de galletas; solo aquellos elementos de lacapa de entrada que están dentro de la región de recorte son almacena-dos en la capa de salida. Los elementos de la capa de entrada puedenser polígonos, líneas o puntos. Los elementos de la capa de traslapedeben ser polígonos.

Los elementos de la capa de salida son de la misma clase de los ele-mentos de la capa de entrada. Ellos son recortados por la frontera másexterna de la capa de traslape.

La tabla de atributos de la capa de salida puede contener los mismosatributos que la tabla de los elementos de entrada. El comando deborrado (v.overlay operator=not) es similar al recorte, excepto quelos elementos de la capa de entrada que traslapan la capa de recorteson borrados en lugar de preservados.

La operación de recorte puede actualizar los atributos de área y perí-metro en las capas de polígonos de salida y actualizar el atributo de

40 Capítulo 1. Contenidos

Page 45: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

largo en las capas de polilíneas de salida. Si estos atributos no estánpresentes en la capa de salida, ellos pueden agregados y actualizadosautomáticamente.

Disolver fronteras

La operación de disolver fronteras (v.dissolve) permite agregar ele-mentos individuales adyacentes a partir de cierto criterio de agrupa-miento. Por tanto, la capa de salida contendrá una cantidad menor deelementos que la capa de entrada.

El criterio de agrupamiento generalmente está relacionado al valor deun atributo particular. Sin embargo, si dos elementos no son adya-centes pero tienen el mismo valor del atributo, estos permaneceránseparados.

Eliminar inconsistencias

Generalmente todas las operaciones traslape pueden producir incon-sistencias debido a que las capas involucradas en la operación pre-sentan localizaciones diferentes. Aún cuando estas diferencias pue-dan ser muy pequeñas, se producen pequeños polígonos (astillas) nodeseados. Por esto, generalmente se provee una operación (v.cleantool=rmarea) que permita eliminar esas pequeñas inconsistencias enlas capas resultantes de una operación de traslape.

Borrado

La operación de borrado (v.overlay operator=not) crea una nueva ca-pa mediante el traslape de dos conjuntos de elementos. Los polígonosde la capa de traslape definen la región de borrado. Los elementos dela capa de entrada que están dentro de la región de borrado son remo-vidos. La capa de salida contiene solo aquellos elementos de la capade entrada que están fuera de la región de borrado. Los elementos de

1.8. Análisis Vectorial 41

Page 46: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

la capa de entrada pueden ser polígonos, líneas, o puntos; pero loselementos de la capa de traslape deben ser polígonos.

Los elementos de la capa de salida son de la misma clase de los ele-mentos de la capa de entrada. Ellos son recortados contra la fronteraexterna de los polígonos de la capa de traslape. La tabla de atributospara la capa de salida generalmente contiene los mismos atributos quela tabla de la capa de entrada.

La operación de borrado puede actualizar automáticamente los atribu-tos de área y perímetro presentes en capas de polígonos, o bien, puedeactualizar el atributo de largo en una capa de líneas. Si estos camposno estuviesen presentes en la capa de entrada, la misma operaciónpuede agregarlos automáticamente y actualizarlos.

Calcular distancia

La operación de calcular distancia (v.distance) permite determinar elvalor de la distancia que existe entre elementos de dos capas indepen-dientes. La distancia puede ser calculada entre elementos puntuales,lineales o poligonales. La distancia se mide desde el vértice del ele-mento más cercano al otro elemento que se desea calcular.

Generalmente, la operación de calcular distancia no crea una nuevacapa de salida, sino que actualiza la tabla de atributos de los elementosinvolucrados, o bien, crea una nueva tabla de únicamente atributos.

Referencias Lineales

Un Sistema de Referencia Lineal (SRL) es un sistema donde elemen-tos (puntos o segmentos) son localizados por una medida a lo largode un elemento lineal. El SRL puede ser usado para referenciar even-tos para cualquier red de elementos lineales, por ejemplo carreteras,tuberías, y líneas eléctricas. Un evento es definido en el SRL por unidentificador (ID) de ruta y una medida. Una ruta es un camino en

42 Capítulo 1. Contenidos

Page 47: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

la red, generalmente compuesto desde varios elementos lineales en elmapa de entrada. Los eventos pueden ser puntos o líneas (segmentos).

Un SRL es creado desde elementos lineales y puntos de un mapa vec-torial. Los puntos (hitos) deben tener asociados atributos especifican-do una línea y una distancia. Las distancias desde el inicio de loselementos lineales en el mundo real son especificadas mediante el hi-to+desplazamiento. Generalmente, los hitos se dan en kilómetros y eldesplazamiento en metros.

Se cuenta con los comandos v.lrs.create para crear un sistema de refe-rencia lineal, v.lrs.label para crear etiquetas en el LRS, v.lrs.segmentpara crear puntos/segmentos en el LRS, y v.lrs.where para encontrarel identificador de ruta y el desplazamiento para puntos/líneas dadasen un mapa vectorial usando un sistema de referencia lineal.

Creación del SRL

El comando v.lrs.create genera un SRL desde datos lineales y puntua-les. Este comando une todas las líneas conectadas con el mismo IDen una sola polilínea. Por eso es recomendable trabajar con polilíneasen lugar de líneas segmentadas. Para convertir un grupo de líneas enpolilíneas se puede usar el comando v.build.polylines.

El mapa vectorial de hitos (puntos) debe contener campos llamadosstart_mp, start_off, end_mp y end_off, todos de doble precisión. Parael ordenamiento de los hitos basta con ingresar números en formaincremental en el campo start_mp indicando el orden a lo largo de lalínea (ruta).

En el comando v.lrs.create, los parámetros lidcol y pidcol especificanlos campos que contendrán los IDs de las rutas que relacionan loshitos (puntos) y las rutas (líneas) entre sí.

Ejemplo

Considere el siguiente archivo, llamado red.txt, en donde se defineuna red de carreteras consiste de tres rutas:

1.9. Referencias Lineales 43

Page 48: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

VERTI:L 7 112 1418 2334 2542 4463 5169 7690 921 1

L 4 142 4435 6756 8948 971 2

L 5 134 2568 2280 3881 6095 671 3

Los comandos necesarios para importar esta información en Grass yasociarle una tabla de datos, sería:

v.in.ascii in=red.txt out=red_temp format=standard→˓--overwritev.db.addtable red_temp

Luego es necesario convertir estas líneas a polilíneas pues, como seindicó anteriormente, Grass así lo prefiere. Se debe tener cuidado enmantener el mismo identificador de categoría (que utilizan las líneasoriginales) en las polilíneas resultantes, pues éste será el identificadorde ruta:

v.build.polylines red_temp out=red cats=first --→˓overwrite

44 Capítulo 1. Contenidos

Page 49: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

El siguiente archivo representa el mapa de hitos, llamado hitos.txt.Nótese que el campo “ruta” se utiliza para asociar cada hito con surespectiva ruta y que la distancia que existe entre cada hito es de 1Km:

cat,x,y,ruta,start_mp1,12,14,1,12,18,23,1,23,34,25,1,34,42,44,1,45,63,51,1,56,69,76,1,67,90,92,1,78,42,44,2,19,35,67,2,210,56,89,2,311,48,97,2,412,34,25,3,113,68,22,3,214,80,38,3,315,81,60,3,416,95,67,3,5

Para importar el archivo de datos anterior en Grass y agregar los cam-pos que se necesitarán posteriomente, es necesario ejecutar la siguien-te serie de comandos:

v.in.ascii cat=1 x=2 y=3 fs=',' skip=1 \columns='cat int,x int,y int,ruta int, start_mp→˓double' \--overwrite in=hitos.txt out=hitos

v.db.addcol hitos col="start_off double"v.db.addcol hitos col="end_mp double"v.db.addcol hitos col="end_off double"

Finalmente se puede crear el SRL utilizando el siguiente comando:

v.lrs.create red points=hitos out=rutas→˓err=errores \lidcol=cat pidcol=ruta rstable=rutas thresh=1 --

→˓overwrite

1.9. Referencias Lineales 45

Page 50: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Localización de eventos

El comando v.lrs.segment crea puntos/segmentos desde líneas de en-trada, un SRL y posiciones. El formato del archivo de entrada es elsiguiente:

P <id_punto> <id_ruta> <hito>+<desplaz> [→˓<corrimiento>]L <id_segmento> <id_ruta> <hito>+<desplaz> <hito>+→˓<desplaz> [<corrimiento>]

El corrimiento es la distancia ortogonal desde la ruta. Corrimientospositivos posicionan los elementos a la derecha de la ruta, y corri-miento negativos posicionan los elementos a la izquierda de la ruta.

Ejemplo

Para localizar varias ubicaciones puntuales a lo largo de las rutas, seutilizará el siguiente archivo llamado eventosP.txt :

P 1 1 1+200 10P 2 1 3+500 -10P 3 2 5+0 0P 4 2 2+100 5P 5 3 2+300 -5P 6 3 3+500 0

El comando que permite crear la nueva capa de puntos a partir de lared de rutas, sería:

v.lrs.segment file=eventosP.txt input=rutas \output=eventosP rstable=rutas --overwrite

También, se puede utilizar un archivo con eventos lineales como elque se presenta a continuación, llamado eventosL.txt :

46 Capítulo 1. Contenidos

Page 51: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

L 1 1 1+100 3+400 10L 2 2 1+0 2+500 -10L 3 3 2+200 4+400 5

Para crear la capa de líneas a partir de la red de rutas, el comando esprácticamente el mismo del caso anterior:

v.lrs.segment file=eventosL.txt input=rutas \output=eventosL rstable=rutas --overwrite

Referencia inversa

El comando v.lrs.where encuentra el identificador de ruta junto con elhito y desplazamiento, para puntos dados en un mapa vectorial usandoun SRL. Este comando cuenta con una opción (thresh) para definir ladistancia máxima a la línea más cercana. Cualquier elemento que seencuentre a una distancia mayor, de cualquiera de la rutas, no seráprocesado.

Ejemplo

Se utilizará el siguiente archivo, llamado coords.txt, que contiene lascoordenadas de varios puntos para los que se desea averiguar su posi-ción en la ruta:

cat,x,y1,12,142,42,443,63,514,42,445,35,676,34,257,68,22

El comando utilizado para importar en Grass la información de estospuntos sería:

1.9. Referencias Lineales 47

Page 52: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

v.in.ascii in=coords.txt out=coords \columns='cat int,x int,y int' cat=1 x=2 y=3 \fs=',' skip=1 --overwrite

La referencia inversa producirá varias líneas de texto con la informa-ción de los eventos en la ruta, por lo que se puede usar el direcciona-miento (>) para escribir estos datos a un archivo:

v.lrs.where points=coords rstable=rutas thresh=1 >→˓rutasP.txt

El conjunto de datos de salida (rutasP.txt), se muestra a continuación:

1|1|1.000000+0.0000002|1|4.000000+0.0000003|1|5.000000+0.0000004|1|4.000000+0.0000005|2|2.000000+0.0000006|1|3.000000+0.0000007|3|2.000000+0.000000

Análisis de Redes

GRASS provee capacidades para análisis de redes vectoriales. La di-rección de los vectores son definidas por la dirección de digitaliza-ción. Ambas direcciones son permitidas, los módulos de red proveenparámetros para asignar columnas de atributos de las direcciones ha-cia adelante y hacia atrás.

Mantenimiento de la red

El comando v.net es utilizado para el mantenimiento de la red vecto-rial. Este comando informa sobre el estado del grafo que define la red.Este comando también permite insertar nodos perdidos y conectar no-dos desconectados al grafo dentro de una distancia dada.

48 Capítulo 1. Contenidos

Page 53: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

El parámetro operation define el tipo de operación a ejecutar sobre lared. Cuatro opciones están disponibles:

nodes: crea la red asignando un punto en cada nodo (final deuna línea) si este no existe.

connect: conecta puntos aún cuando no estén conectados a lared y agrega líneas. El parámetro thresh es requerido para defi-nir el radio de conexión.

Por ejemplo, considere las siguientes líneas utilizadas para definir unared de calles:

L 2 113 5890 661 1

L 2 113 4390 521 2

L 2 113 2690 351 3

L 2 127 7830 131 4

L 2 143 7945 381 5

L 4 159 8263 1746 1547 61 6

L 2 176 27

1.10. Análisis de Redes 49

Page 54: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

73 831 7

La importación y posterior separación en segmentos de calle, se puederealizar mediante los comandos:

v.in.ascii input=lineas.txt output=calles_temp→˓format=standard \

-n --overwrite

v.clean input=calles_temp output=calles tool=break→˓--overwrite

Se creará ahora el campo de costos tomando como base la categoríade los segmentos:

v.db.addtable callesv.db.addcol calles col="adelante double, atras→˓double,

velocidad double, largo double"v.db.update calles col=velocidad val=40 where=→˓"cat=1 or cat=3"v.db.update calles col=velocidad val=60 where=→˓"cat=2 or cat=4"v.db.update calles col=velocidad val=50 where=→˓"cat=5 or cat=7"v.db.update calles col=velocidad val=70 where=→˓"cat=6"v.db.update calles col=atras val=99999v.to.db map=calles option=length col=largov.db.update calles col=adelante qcol="largo/→˓velocidad"

Por último se crea la red de calles permitiendo que el sistema definanodos en cada intersección y final de línea:

v.net input=calles out=red operation=nodes --→˓overwrite

50 Capítulo 1. Contenidos

Page 55: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Distancia más corta

El cálculo de la ruta más corta puede ser ejecutado mediante el co-mando v.net.path. Los costos pueden ser el largo de la línea, o atribu-tos guardados en una tabla de la base de datos. Los valores de estosatributos son tomados como los costos del segmento completo. Si loscostos son leídos desde la tabla ellos pueden ser diferentes en ambasdirecciones. Las rutas más corta es escrita a una mapa vectorial juntocon una tabla de atributos asociados.

La sintaxis para definir los puntos es:

id categoría_punto_inicio categoría_punto_final

o bien, si se utilizan coordenadas para definir los puntos:

id x_punto_inicial y_punto_inicial x_punto_final y_→˓punto_final

Si los puntos son especificados por categoría, estos deben ser exacta-mente los mismos que los nodos de la red, mientras que cuando sonespecificados por coordenadas se utiliza el nodo más cercano al parde coordenadas.

El comando permite utilizar los campos afcol y abcol que determinanla columna de costo cuando se avanza hacia adelante y hacia atrás,respectivamente. También se puede utilizar el campo ncol para espe-cificar la columna de costo para los nodos. Si no se especifican estoscampos, entonces el largo de los segmentos de la red es utilizado y uncosto en cero es asumido en cada nodo.

Cuando se usan atributos, el largo de los segmentos no es utilizado.Para obtener resultados mas precisos, el largo debe ser tomado encuenta indirectamente por los atributos. Por ejemplo, para obtener elcamino más rápido se necesitaría tener columnas como max_speed ylength. El camino más rápido correcto puede ser obtenido especifi-cando afcol=length/max_speed. Si es necesario, el largo de la líneapuede ser calculado y escrito a la tabla de atributos mediante el co-mando v.to.db.

1.10. Análisis de Redes 51

Page 56: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Por ejemplo, el siguiente archivo llamado puntos.txt define las coorde-nadas del punto de inicio y punto final de la ruta que se desea obtener:

1 13 58 47 6

Se puede ejecutar el cálculo de ruta más corta sin utilizar los costos:

v.net.path input=red output=ruta1 file=puntos.txt -→˓-overwrite

O bien, se puede ejecutar el cálculo de la misma ruta pero utilizandolos campos de costos:

v.net.path input=red output=ruta2 file=puntos.txt -→˓-overwrite \

afcol=adelante abcol=atras

Mediante este comando también se puede ejecutar el cálculo para vi-sitar muchos sitios en un orden predefinido. Por ejemplo, considereel siguiente archivo llamado puntosParadas.txt que lista una serie depuntos de inicio y final:

1 19 58 43 692 43 69 66 633 66 63 53 474 53 47 28 355 28 35 62 25

El comando para ejecutar el análisis con varios puntos es el mismoutilizado para calcular con solo un punto:

v.net.path input=red output=ruta2→˓file=puntosParadas.txt \

--overwrite afcol=adelante abcol=atras→˓dmax=2

52 Capítulo 1. Contenidos

Page 57: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Agente viajero

Para crear un ciclo que conecte una secuencia de nodos dados, se uti-liza el comando v.net.salesman. Este comando calcula la ruta óptimapara visitar los nodos en la red vectorial. Al igual que el cálculo de laruta más corta, este comando puede incluir costos para cada segmentode la red.

A diferencia del comando v.net.path, al realizar el cálculo del agen-te viajero solo se puede especificar un campo acol que determina elnombre de la columna representando el costo para los arcos en ambasdirecciones. Este comando, no permite especificar el costo para losnodos.

Para realizar el cálculo del agente viajero es necesario que las dife-rentes paradas sean incorporadas a los datos de la red. Es decir, nohay forma de pasar como parámetro, al comando v.net.salesman, lasposiciones de las paradas.

Por ejemplo, considere el siguiente archivo llamado paradas.txt paradefinir las coordenadas de los diferentes nodos a visitar:

cat,x,y1,19,582,43,693,66,634,53,475,28,356,62,25

En primer lugar, los datos deben ser importados en Grass, medianteel comando:

v.in.ascii in=paradas.txt out=paradas columns='cat→˓int,x \int,y int' cat=1 x=2 y=3 fs=',' skip=1 --overwrite

Luego, se crea una nueva red de calles que solo incorpore estos nodosmediante el comando:

1.10. Análisis de Redes 53

Page 58: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

v.net input=calles red points=paradas out=red2→˓op=connect \

thresh=1 --overwrite

Ahora, se puede realizar el cálculo del agente viajero simplementeejecutanto el comando:

v.net.salesman red2 out=rutaViajero1 ccats=1-6 --→˓overwrite

De igual forma, se puede utilizar los costos al hacer el cálculo delagente viajero:

v.net.salesman red2 out=rutaViajero1 acol=adelante→˓ccats=1-6 \

--overwrite

Red de servicio

El comando v.net.alloc asigna una sub red a los centros más cercanos.Los nodos utilizados como centros deben ser abiertos (costos >= 0).Los costos de los nodos centrales son usados para el cálculo. El algo-ritmo permite costos asignados a los arcos y nodos de la red. Tambiénse pueden definir diferentes costos en ambas direcciones de una lí-nea vectorial. Para áreas los costos serán calculados entre las líneasfrontera.

Por ejemplo, el comando para calcular la red de servicio, sin utilizarcostos, para los nodos 1,5 y 6 sería:

v.net.alloc red2 output=servicio1 ccats=1,5,6 --→˓overwrite \

Para realizar el mismo cálculo, pero usando los costos asociados a losarcos, se utilizaría el siguiente comando:

54 Capítulo 1. Contenidos

Page 59: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

v.net.alloc red2 output=servicio2 ccats=1,5,6 --→˓overwrite \

afcol=adelante abcol=atras

Áreas de servicio

Para separar la red mediante isolíneas de costo se cuenta con el co-mando v.net.iso. Este comando separa la red en bandas entre las isolí-neas de costos (dirección desde el centro). El nodo de centro debe serabierto (costos>=0). Los costos de los nodo de centro son usados enlos cálculos. Este algoritmo también soporta asignación de costos alos arcos y los nodos, y también en ambas direcciones de un segmen-to.

Por ejemplo, para establecer el área de servicio de los nodos 2 y 4; adistancias de 10,20,30 y más allá; se utilizaría el comando:

v.net.alloc red2 output=servicio1 ccats=2,4→˓costs=10,20,30 \

--overwrite

Para calcular las áreas de servicio pero utilizando los costos de cadaarco, se utilizaría el comando:

v.net.alloc red2 output=servicio1 ccats=2,4→˓costs=1,2,3 \

afcol=adelante abcol=atras --overwrite

Bases de datos

En GRASS un mapa vectorial puede estar enlazado con uno o másSABD (sistemas administradores de bases de datos). El conjunto decomandos *db.** proveen soporte SQL general para administraciónde tablas y atributos, mientras los comandos *v.db.** operan especí-ficanmente con tablas asociadas a mapas vectoriales.

1.11. Bases de datos 55

Page 60: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Comandos generales

El comando db.connect permite establecer la conexión de la base dedatos para el mapa actual. Estos parámetros son luego usados comovalores por omisión por los siguientes comandos y así el usuario norequiere entrar parámetros para cada comando. Por ejemplo, el si-guiente comando establece una conexión mediante archivos dbase:

db.connect driver=dbf database='$GISDBASE/→˓$LOCATION_NAME/$MAPSET/dbf/'

Si se desea conocer todos los diferentes drivers que soporta el sistema,se puede utilizar el comando db.drivers -p. Para probar la conexióncon la base de datos, una vez que ha sido establecida, se utiliza elcomando db.test.

Lectura y exportación de tablas

Una tabla puede ser importada desde un archivo CSV mediante elcomando db.in.ogr. Opcionalmente una columna llave (ID) puede seragregada a la tabla. Un archivo de datos en formato CSV puede lucirde la siguiente forma:

ID,Salary,Name,Comments132,55000.0,John Walker,"The ""big"" cheese."133,11000.0,Jane Lake,Cleaning Staff

Por ejemplo, el siguiente comando permite leer la tabla de atributosmostrada anteriormente:

db.in.ogr dsn=datos.csv output=empleados

Para facilitar el reconocimiento de los tipos de las columnas, se pue-de crear un archivo adicional que defina dicha estructura. Este archi-vo tiene el mismo nombre del archivo original pero con la extensiónCSVT. Por ejemplo, para el archivo de datos su archivo datos.csvt severía de la siguiente forma:

56 Capítulo 1. Contenidos

Page 61: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

"Integer(3)","Real(2)","String(10)","String(20)"

Cualquier tabla puede ser exportada a múltiples formatos utilizandoel comando db.out.ogr. Los formatos válidos (parámetro format) sonCSV, DBF, GML, MySQL, PostgreSQL y SQLite. Por ejemplo, latabla anterior puede ser exportada a formato DBASE mediante el si-guiente comando:

v.out.ogr input=empleados dsn=C:/datos/empleados.→˓dbf format=DBF

Consultando la estructura

Para listar todas las tablas que forman parte de la base de datos seutiliza el comando db.tables -p. Para listar todas las columnas de unatabla dada se utiliza el comando db.columns, por ejemplo el siguientecomando lista las columnas de la tabla llamada poligonos1:

db.columns table=poligonos1

Existe un comando alternativo que permite mostrar la informaciónsobre la tabla en detalle, este comando es db.describe. Si se utilizael parámetro -c solo los nombres de las columnas se muestran, enlugar de una descripción completa. Por ejemplo, el siguiente comandomuestra una descripción detallada de la tabla poligonos1:

db.describe -c table=poligonos1

Consultando los datos

El comando db.select selecciona datos desde una tabla de atributos(ejecuta una consulta SQL). Este comando imprime el resultado dela selección desde la base de datos utilizando una consulta SQL. Laconsulta puede ser dada mediante la entrada estandar o mediante unarchivo (utilizando el parámetro input). La salida será mostrada en lapantalla o puede ser almacenada en un archivo utilizando el parámetro

1.11. Bases de datos 57

Page 62: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

output. Si no se proporciona el parámetro input se imprimirán todoslos datos de la tabla.

Administrando la base de datos

El comando db.droptable remueve una tabla de una base de datos exis-tente, y el comando db.dropcol permite eliminar una columna de unatabla específica. Es importante notar que si una tabla ya se encuentra“conectada” con un mapa vectorial, este comando no la eliminará amenos que se especifique la opción -f.

El comando db.copy permite copiar una tabla entre dos bases de datosque pueden ser distintas. Las bases de datos pueden ser conectadas através de diferentes drivers. Por ejemplo, el siguiente comando copiauna tabla en formato dbase a una base de datos sqlite:

db.copy from_driver=dbf from_database=C:/mapas/→˓mapa1/dbf \from_table=lineas1 to_driver=sqlite \to_database=C:/mapas/mapa2/mysqlite.db to_→˓table=lineasA

Tablas en mapas vectoriales

El número de categoría es el ID del vector. Este es usado para enlazaratributos con objetos vectoriales. Un objeto vectorial puede tener ce-ro, una, o más categorías. Los números de categoría son almacenadosen el archivo vectorial y dentrol de las tablas de atributos para cadaobjeto vectorial (generalmente la columna cat). Usando el comandov.category, los números de categoría puede ser impresos o adminis-tradas.

Es posible enlazar objetos en un mapa vectorial a una o más tablas.Cada enlace a una tabla de atributos diferente es llamada una capa. Unenlace define que driver de base de datos, base de datos y tabla es usa-da. Cada número de categoría es el archivo geométrico corresponde

58 Capítulo 1. Contenidos

Page 63: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

a una fila en la tabla de atributos (la columna cat realiza este enla-ce). Utilizando el comando v.db.connect las capas pueden ser listadasy administradas. Este comando recibe dos parámetros principales, elnombre de la tabla a asociar (table) y el nombre del mapa destino(map). También es necesario especificar (mediante el parámetro key)el campo que servirá de llave entre la tabla y el mapa.

Cuando se crean mapas vectoriales desde cero, en general una tablade atributos debe ser creada (mediante el comando v.db.addtable) y latabla debe ser rellenada con una fila por categoría (usando el comandov.to.db).

Creación de tablas

Al crear una tabla (usando el comando v.db.addtable) se pueden espe-cificar los nombres y tipos de las diferentes columnas a través del pa-rámetro columns. Los tipos válidos son VARCHAR(),INT,DOUBLEPRECISION y DATE. Si el mapa vectorial aún no ha sido enlazadoa alguna tabla, un nuevo enlace a la base de datos es establecido conbase en lo establecido por el comando db.connect. Por ejemplo, el si-guiente comando crea una tabla para la capa 2 del mapa vectorial decarreteras:

v.db.addtable carreteras columns="tipo varchar(10),→˓ carriles int" layer=2

Luego se pueden agregar nuevas columnas mediante el comandov.db.addcol. Para eliminar una tabla de un mapa se usa el coman-do v.db.droptable. Es importante ejecutar el comando anterior siem-pre que se borre un mapa vectorial mediante el comando g.removevect=mapa, pues este comando no necesariamente borra todas las ta-blas asociadas al mapa.

Rellenando los valores de la tabla

Para “copiar”, a una tabla, los valores de categoría desde un mapaexistente se utiliza el método v.to.db.

1.11. Bases de datos 59

Page 64: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

Este comando también puede copiar otros valores tomados desde elmapa vectorial, entre ellos: el área, perímetro, largo, contador, y coor-denadas. Por ejemplo, el siguiente comando llena la tabla asociada almapa lineas con los largos de la líneas:

v.to.db map=lineas option=length type=line→˓col=linelength units=me

El comando v.db.update también permite actualizar los valores de unacolumna en la tabla de atributos asociada a un mapa dado. En forma,alternativa los valores pueden ser copiados a otra columna en la tabla.

Consulta de datos

El comando v.db.select imprime los valores de los atributos asocia-dos a un mapa vectorial. La salida de dicha consulta sería mostradaen la pantalla pero se puede redirigir a un archivo utilizando el pará-metro file. Mediante el parámetro columns se puede especificar unalista de aquellas columnas que se quieren mostrar. También es posiblemediante el parámetro where escribir una condición tipo SQL parafiltrar dichos atributos. Por ejemplo, el siguiente comando guarda enun archivo los valores de los atributos asociados al mapa lineas1:

v.db.select map=lineas1 file=C:/salida.txt

Por otra parte el comando v.extract permite seleccionar objetos vec-toriales de una mapa vectorial existente y crear un nuevo mapa conte-niendo solo los objetos seleccionados. Las tablas asociadas pueden serconsultadas mediante instrucciones SQL, si existe una conexión esta-blecida. El parámetro list permite especificar una lista de los valores(de las categorías) de aquellos elementos a seleccionar. El parámetrowhere permite especificar la consulta SQL que filtrará los elementos aseleccionar. Por ejemplo, el siguiente comando permite crear un nue-vo mapa con aquellos elementos cuyos atributos cumplen la condiciónSQL especificada:

60 Capítulo 1. Contenidos

Page 65: Aprendiendo GRASS - media.readthedocs.org · queden asociadas a la misma tabla, ... Otra forma de definir polígonos en Grass es utilizar el concepto de fronteras (boundaries) y

Aprendiendo GRASS, Versión

v.extract input=mapa.shp output=mapa2 where=→˓"(VEGTYPE = 'Wi') \

or (VEGTYPE = 'PS') or (PRIME_TYPE='Wi')"

1.11. Bases de datos 61