Appearance
Bases de datos
En GRASS un mapa vectorial puede estar enlazado con uno o más SABD (sistemas administradores de bases de datos). El conjunto de comandos db.* proveen soporte SQL general para administración de tablas y atributos, mientras los comandos v.db.* operan específicanmente con tablas asociadas a mapas vectoriales.
Comandos generales
El comando db.connect permite establecer la conexión de la base de datos para el mapa actual. Estos parámetros son luego usados como valores por omisión por los siguientes comandos y así el usuario no requiere entrar parámetros para cada comando. Por ejemplo, el siguiente 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ón con la base de datos, una vez que ha sido establecida, se utiliza el comando db.test.
Lectura y exportación de tablas
Una tabla puede ser importada desde un archivo CSV mediante el comando db.in.ogr. Opcionalmente una columna llave (ID) puede ser agregada a la tabla. Un archivo de datos en formato CSV puede lucir de la siguiente forma:
ID,Salary,Name,Comments
132,55000.0,John Walker,"The ""big"" cheese."
133,11000.0,Jane Lake,Cleaning StaffPor ejemplo, el siguiente comando permite leer la tabla de atributos mostrada anteriormente:
$ db.in.ogr dsn=datos.csv output=empleados
Para facilitar el reconocimiento de los tipos de las columnas, se puede crear un archivo adicional que defina dicha estructura. Este archivo tiene el mismo nombre del archivo original pero con la extensión CSVT. Por ejemplo, para el archivo de datos su archivo datos.csvt se vería de la siguiente forma:
"Integer(3)","Real(2)","String(10)","String(20)"Cualquier tabla puede ser exportada a múltiples formatos utilizando el comando db.out.ogr. Los formatos válidos (parámetro format) son CSV, DBF, GML, MySQL, PostgreSQL y SQLite. Por ejemplo, la tabla anterior puede ser exportada a formato DBASE mediante el siguiente 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 se utiliza el comando db.tables -p. Para listar todas las columnas de una tabla dada se utiliza el comando db.columns, por ejemplo el siguiente comando lista las columnas de la tabla llamada poligonos1:
$ db.columns table=poligonos1
Existe un comando alternativo que permite mostrar la información sobre la tabla en detalle, este comando es db.describe. Si se utiliza el parámetro -c solo los nombres de las columnas se muestran, en lugar de una descripción completa. Por ejemplo, el siguiente comando muestra 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 de la selección desde la base de datos utilizando una consulta SQL. La consulta puede ser dada mediante la entrada estandar o mediante un archivo (utilizando el parámetro input). La salida será mostrada en la pantalla o puede ser almacenada en un archivo utilizando el parámetro output. Si no se proporciona el parámetro input se imprimirán todos los datos de la tabla.
Administrando la base de datos
El comando db.droptable remueve una tabla de una base de datos existente, y el comando db.dropcol permite eliminar una columna de una tabla específica. Es importante notar que si una tabla ya se encuentra "conectada" con un mapa vectorial, este comando no la eliminará a menos que se especifique la opción -f.
El comando db.copy permite copiar una tabla entre dos bases de datos que pueden ser distintas. Las bases de datos pueden ser conectadas a través de diferentes drivers. Por ejemplo, el siguiente comando copia una 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 enlazar atributos con objetos vectoriales. Un objeto vectorial puede tener cero, una, o más categorías. Los números de categoría son almacenados en el archivo vectorial y dentrol de las tablas de atributos para cada objeto vectorial (generalmente la columna cat). Usando el comando v.category, los números de categoría puede ser impresos o administradas.
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. Un enlace define que driver de base de datos, base de datos y tabla es usada. Cada número de categoría es el archivo geométrico corresponde a una fila en la tabla de atributos (la columna cat realiza este enlace). Utilizando el comando v.db.connect las capas pueden ser listadas y administradas. Este comando recibe dos parámetros principales, el nombre 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 tabla de atributos debe ser creada (mediante el comando v.db.addtable) y la tabla debe ser rellenada con una fila por categoría (usando el comando v.to.db).
Creación de tablas
Al crear una tabla (usando el comando v.db.addtable) se pueden especificar los nombres y tipos de las diferentes columnas a través del parámetro columns. Los tipos válidos son VARCHAR(),INT,DOUBLE PRECISION y DATE. Si el mapa vectorial aún no ha sido enlazado a alguna tabla, un nuevo enlace a la base de datos es establecido con base en lo establecido por el comando db.connect. Por ejemplo, el siguiente comando crea una tabla para la capa 2 del mapa vectorial de carreteras:
$ v.db.addtable carreteras columns="tipo varchar(10), carriles int" layer=2
Luego se pueden agregar nuevas columnas mediante el comando v.db.addcol. Para eliminar una tabla de un mapa se usa el comando v.db.droptable. Es importante ejecutar el comando anterior siempre que se borre un mapa vectorial mediante el comando g.remove vect=mapa, pues este comando no necesariamente borra todas las tablas asociadas al mapa.
Rellenando los valores de la tabla
Para "copiar", a una tabla, los valores de categoría desde un mapa existente se utiliza el método v.to.db.
Este comando también puede copiar otros valores tomados desde el mapa vectorial, entre ellos: el área, perímetro, largo, contador, y coordenadas. Por ejemplo, el siguiente comando llena la tabla asociada al mapa 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 una columna 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 asociados a un mapa vectorial. La salida de dicha consulta sería mostrada en la pantalla pero se puede redirigir a un archivo utilizando el parámetro file. Mediante el parámetro columns se puede especificar una lista de aquellas columnas que se quieren mostrar. También es posible mediante el parámetro where escribir una condición tipo SQL para filtrar dichos atributos. Por ejemplo, el siguiente comando guarda en un 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 vectoriales de una mapa vectorial existente y crear un nuevo mapa conteniendo solo los objetos seleccionados. Las tablas asociadas pueden ser consultadas mediante instrucciones SQL, si existe una conexión establecida. El parámetro list permite especificar una lista de los valores (de las categorías) de aquellos elementos a seleccionar. El parámetro where permite especificar la consulta SQL que filtrará los elementos a seleccionar. Por ejemplo, el siguiente comando permite crear un nuevo mapa con aquellos elementos cuyos atributos cumplen la condición SQL especificada:
$ v.extract input=mapa.shp output=mapa2 where="(VEGTYPE = 'Wi') or (VEGTYPE = 'PS') or (PRIME_TYPE='Wi')"