Los join a la tabla atributiva de vectoriales en GRASS no es posible porque no está soportado para el driver dbf. Sin embargo, es posible copiar columnas de otras databases en la tabla atributiva de vectoriales a través de la ejecución del módulo db.execute con la opción UPDATE de SQL. No obstante, si se requiere usar los valores de una tabla externa no es necesario el join en el modo “clásico”. En GRASS, cada espacio de trabajo tiene asignado un directorio dbf donde se almacenan las tablas atributivas de los vectoriales y cualquier tabla externa con este driver que tengamos a bien alojar allí. Si cualquiera de esas tablas externas es requerida para su uso con un vectorial simplemente se conecta con ella a través de v.db.connect.
Para poblar con databases externas los directorios dbf de los espacios de trabajo se puede hacer uso del módulo db.in.ogr. Los formatos aceptados por el driver ogr son DBF, CSV, PostgreSQL, SQLite, MySQL, ODBC; entre otros. Para probar el uso del comando se va a considerar la tabla en formato *.csv de este artículo:
Hacer join a tablas externas en QGIS
que corresponde a (tabla_join.csv):
ID,a,b,c 1,5.01,2.33,2.33 2,5.01,2.33,2.33 3,5.01,2.33,2.33 4,5.01,2.33,2.33 5,5.01,2.33,2.33
con su respectivo *.csvt asociado:
Integer,Real,Real,Real
La ejecución del siguiente código en python:
#!/usr/bin/env python
# -*- coding: utf-8
import grass.script as grass
from os import system
system("clear")
print "Archivos *.csv y *.csvt\n"
path1="/home/zeito/Desktop/PRUEBAS_QGIS/"
system("cd "+path1+"; ls *.csv*")
print
file=str(raw_input("Nombre del archivo csv = ? "))
path2=path1+file
salida=str(raw_input("Nombre del archivo de salida = ? "))
grass.run_command("db.in.ogr",
dsn=path2,
output=salida,
overwrite="true")
produce esta salida; donde se integra el uso del comando db.select para corroborar que la importación fue exitosa.
Archivos *.csv y *.csvt tabla_join.csv tabla_join.csvt Nombre del archivo csv = ? tabla_join.csv Nombre del archivo de salida = ? datos Imported table <datos> with 5 rows zeito@debian:~$ db.select datos ID|a|b|c 1|5.01|2.33|2.33 2|5.01|2.33|2.33 3|5.01|2.33|2.33 4|5.01|2.33|2.33 5|5.01|2.33|2.33 zeito@debian:~$

Pingback: Cómo importar archivos *.csv (comma separated values) en GRASS mediante un script de python | #Geoprocessamento em Foco | Scoop.it
Pingback: Cómo conectar bases de datos externas en GRASS a archivos vectoriales |