Skip to content

Datos geográficos en formato ASCII

Base de datos GRASS GIS

Una base de datos de GRASS GIS es simplemente un conjunto de directorios y archivos con cierta estructura con la que GRASS GIS trabaja eficientemente. Location es un directorio con datos asociados con una ubicación geográfica o un proyecto. Todos los datos dentro de un Location tienen la misma proyección cartográfica. Un Location contiene Mapsets y cada Mapset contiene datos asociados con una tarea específica, un usuario o un proyecto más pequeño. Dentro de cada localización, existe un Mapset PERMANENT obligatorio que puede contener datos de uso común dentro de una localización, como los mapas base. El PERMANENT Mapset también contiene metadatos relacionados con el Location como la proyección. Cuando GRASS GIS se inicia se conecta a una Base de Datos, Location y Mapset especificados por el usuario, o bien, una base de datos temporal.

Una vez que se ejecuta GRASS, se puede crear un directorio desde la consola para la base de datos de GRASS y un directorio para todos los archivos de datos que se crearán:

mkdir GrassData
mkdir GisData
cd GisData

Posteriormente, se utiliza la opción del menú de Grass: Settings>Grass Working Environment>Create New Location. Esto provocará que se muestre una caja de diálogo en donde se solicitará el nombre de la nueva location y el directorio en donde debe ser creada, que para este caso sería el directorio que se acaba de crear: GrassData. Luego en la siguiente pantalla se solicita seleccionar un CRS (Coordinate Reference System). Para los siguientes ejemplos se puede utilizar la opción: Create a generic cartesian coordinate system (XY). Por último, Grass automáticamente creará un mapset llamado PERMANENT. Nota: recuerde actualizar la pestaña de DATA para ver los cambios reflejados.

Datos Vectoriales

Un "mapa vectorial" es una capa de datos consistente de una serie de elementos dispersos en el espacio geográfico. Estos pueden ser datos puntuales (sitios de perforación), líneas (carreteras), polígonos (límites de parques), volúmenes (estructuras CAD en 3D) o alguna combinación de ellos. Normalmente, cada elemento en el mapa estará asociado a un conjunto de atributos de la capa almacenados en una base de datos (nombres de calles, identificador del sitio, el tipo geológico, etc.). Como una regla general, estos pueden existir en el espacio 2D 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 solo las capas de datos vectoriales se debe utilizar el parámetro type de la 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ámetro name indica el nombre de la capa de datos a eliminar. En ocasiones es necesario usar el parámetro -f para forzar el borrado del archivo. Por ejemplo, para borrar una capa vectorial de puntos (en el caso que exista) se podría utilizar un comando como:

g.remove type=vect name=puntos -f

Información de la capa

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

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

Por ejemplo, el siguiente comando muestra las operaciones aplicadas a una capa lineas que podría existir en la base de datos:

v.info -h map=lineas

Extensión de la región

El comando g.region permite determinar cuál es la extensión de la región actual sobre la que se está procesando. Muchos comandos realizan su procesamiento únicamente sobre dicha región. Para determinar la extensión de la región se utiliza el comando:

g.region -p

Resulta recomendable que siempre que se empieza a procesar un mapa vectorial (o raster) se establezca una nueva región que abarque la extensión de dicho mapa. Por ejemplo, esto se puede realizar de la siguiente forma, dependiendo del tipo de mapa a procesar:

g.region vector=lineas
g.region raster=imagen

Manejo geométricos en formato ASCII

Los módulos v.in.ascii y v.out.ascii permiten el ingreso/exportación de 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 puntual (point) cada fila del archivo contendrá las coordenadas X,Y de un punto junto con algunos otros atributos asociados. Los valores pueden estar separados por un delimitador (parámetro separator) que seleccione el usuario. Si no se definen los nombres de las columnas (parámetro columns) entonces se utilizan nombres por omisión. También existen parámetros para especificar el número de la columna en donde aparece 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 especificar todos los vértices (uno por fila) que componen un elemento geográfico. Además, se utiliza un código para identificar el tipo de elemento: (P) punto, (L) línea, (A) área, (B) frontera, (C) centroide, etc. Este formato no incluye atributos asociados dentro del mismo archivo, estos residen en otro archivo aparte y son asociados mediante un identificador o categoría (cat) común a ambos archivos. Un archivo en formato vectorial puede contener una mezcla de elementos de diferentes tipos, sin embargo, es conveniente intentar mantener únicamente elementos del mismo tipo en cada archivo.

El separador de datos (parámetro separator) puede ser un caracter cualquiera; o la palabra tab, space, comma ó un espacio en blanco. El formato de 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,5103481
1664473,5095782
1664273,5101919
1663427,5105234
1663709,5102614

Para importar este archivo en Grass se debe utilizar el siguiente comando (note que podría ser necesario indicar toda la ruta del archivo de coordenadas si no se encuentra en el directorio actual):

v.in.ascii separator=',' input=coords.txt output=coords

Aún cuando este comando crea un mapa de coordenadas, dicho mapa no tiene asociada una tabla de datos. Esto puede ser verificado mediante el comando:

v.info map=coords -c

Por lo anterior, se presenta otro archivo llamado points.txt que incluirá atributos y el identificador en forma explícita:

1,1664619,5103481,studna
2,1664473,5095782,kadibudka
3,1664273,5101919,hruska
4,1663427,5105234,mysi dira
5,1663709,5102614,mineralni pramen

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

v.in.ascii separator=',' input=points.txt output=points x=2 y=3 cat=1 columns="cat int,x double precision,y double precision,label varchar(20)"

Nuevamente, para verificar la existencia de la tabla de datos asociada se puede utilizar el comando:

v.info map=points -c

La información de la tabla puede desplegarse en la consola utilizando el siguiente comando:

v.db.select map=points

En el momento que se requiera volver a exportar estos datos en formato ASCII, se utilizará el siguiente comando (el orden de los campos puede variar en la salida):

v.out.ascii separator=',' input=points output=points.txt columns=label

Ejemplo datos lineales

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

L  6 1
 5958812 3400828
 5958957 3400877
 5959021 3400930
 5959048 3400973
 5959069 3401032
 5958812 3400828
 1  5
L  4  1
 5959010 3401338
 5959096 3401370
 5959091 3401450
 5959010 3401338
 1  7

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

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

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

Sin embargo, aún falta importar los datos sobre los atributos asociados. El archivo linesAttr.csv muestra algunos atributos asociados al archivo de líneas en formato CSV:

num,label
5,St.Paul Park
7,Central Park

El comando utilizado para importar el archivo de atributos en una tabla de GRASS, es el siguiente:

db.in.ogr input=linesAttr.csv output=linesAttr

Mediante el siguiente comando se puede verificar que la tabla fue correctamente importada en GRASS:

db.tables

Ahora es necesario conectar este archivo de datos con el archivo de geometrías, esto se realiza mediante el siguiente comando:

v.db.connect map=lines table=linesAttr key=num

Como antes se pueden listar en la consola los datos asociados al mapa de líneas, utilizando el comando:

v.db.select map=lines

Ejemplo datos poligonales

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

A 6 1
 5958812 3400828
 5958957 3400877
 5959021 3400930
 5959048 3400973
 5959069 3401032
 5958812 3400828
 1 5
A 4 1
 5959010 3401338
 5959096 3401370
 5959091 3401450
 5959010 3401338
 1 7

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

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

En GRASS resulta necesario crear los centroides asociadas a los polígonos para que el sistema los reconozca como tales. Para eso se ejecuta el comando v.centroids sobre dicho mapa:

v.centroids input=areas output=areas2

De igual forma que antes, es necesario asociar este mapa con su respectiva tabla de atributos. En este caso se utiliza el comando 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=areas2 table=linesAttr key=num

Ejemplo datos poligonales con fronteras

Otra forma de definir polígonos en Grass es almacenar las fronteras (boundaries) y centroides del polígono en el mismo archivo. En este caso se deben definir dos elementos por cada polígono, la frontera del mismo (similar al elemento "área" visto anteriormente) y las coordenadas de un punto cualquiera dentro del polígono (el centroide). El siguiente archivo de ejemplo, llamado polygons.txt, muestra los datos utilizando este otro método:

B 6
 5958812 3400828
 5958957 3400877
 5959021 3400930
 5959048 3400973
 5959069 3401032
 5958812 3400828
C 1 1
 5958952 3400918
 1 5
B 4
 5959010 3401338
 5959096 3401370
 5959091 3401450
 5959010 3401338
C 1 1
 5959063 3401386
 1 7

Para importar este nuevo archivo se utiliza el mismo comando utilizando anteriormente, pues realmente es el sistema internamente el que determina el tipo de geometría a crear.

v.in.ascii input=polygons.txt output=polygons -n format=standard

Aquí es importante resaltar que cada frontera (boundary) debe ser seguida por su respectivo centroide. La información de la capa y el identificador (categoría) del polígono se especifica en el centroide. En el caso anterior ambos polígonos aparecen únicamente en la capa 1, el primer polígono tiene el identificador de 5 y el segundo polígono de 7. Al igual que antes se puede asociar el archivo de atributos mediante el comando v.db.connect:

v.db.connect map=polygons table=linesAttr key=num

Ejercicios

  1. Con base en el mapa que se muestra más abajo cree tres archivos de datos llamados puntos.txt, lineas.txt y poligonos.txt. Note que los polígonos deben ser reconocidos como áreas cerradas. Asuma que dicho mapa se encuentra entre las coordenadas (0,0) y (200,200). Adicionalmente enlace cada elemento con su respectiva etiqueta almacenada en una tabla de datos. Por último exporte las tres capas del mapa a archivos en formato GeoJSON mediante el comando v.out.ogr