Script de bash para copiar columnas de tablas externas con db.execute (GRASS-QGIS)

En el artículo pasado se consideró la elaboración de un script de bash para determinar raíces cuadradas (extensible a otras funciones especiales como logaritmos o trigonométricas) en registros de tablas atributivas con db.execute (GRASS-QGIS). La razón de esta búsqueda fue que no se pueden realizar este tipo de operaciones con el previsible v.db.update desde el entorno de GRASS-QGISS (el driver dbf no lo soporta; ni siquiera para los comandos UPDATE de SQL). Las raíces cuadradas aparecen en la fórmula de la distancia y los logaritmos en las funciones “p” para manejar concentraciones muy pequeñas; entre otras. Aunque la calculadora de campos de QGIS funciona bien en las determinaciones con funciones especiales lo ideal sería hacer todas las operaciones dentro de GRASS y no externamente para no tener que, posteriormente, importar los vectoriales al formato de GRASS con la eventual pérdida de tiempo y evitar la posibilidad de automatizar procesos repetitivos mediante scripts en ambiente de GRASS.

Por otra parte, una dificultad que también había tenido era la de hacer join a tablas externas o de otros vectoriales en el ambiente de GRASS, con v.db.join, porque siempre se advertía que el driver dbf no estaba soportado. En realidad v.db.join es un front-end para db.execute lo que permite un uso más fácil. El manual de GRASS señala que para el join las tablas atributivas vectoriales deberían ser almacenadas en una database SQL (SQLite, PostgreSQL, MySQL, ODBC, …) y ratifica que el DBF backend no está soportado. Teniendo esto presente y el script propuesto en el artículo pasado para determinar raíces cuadradas en registros de tablas atributivas con db.execute, se vislumbra que la copia o join de columnas de tablas externas se puede lograr con este último script simplemente prescindiendo de las operaciones de cálculo intermedias. Incluso, con db.connect se puede tener acceso a otras bases de datos de otros mapasets.

Para probar el procedimiento previsto se modificó el script ya mencionado para que de manera interactiva solicite primero las databases disponibles en el mapaset de trabajo y el nombre de la database de la cual copiar. Luego, las columnas disponibles en la database elegida y el nombre de la columna a copiar. Finalmente, el nombre de la database destino. Con esta información se creará en la database destino el campo a copiar (con el mismo nombre que en la database fuente) y se procederá con su sustitución con base en el cat. Este es el script propuesto:

#! /bin/bash
clear
echo "Este script hace join de campos de databases"; echo
echo "Databases disponibles en este mapaset"; echo
db.tables -p; echo
read -p "Nombre de la database de la cual copiar = ? " database1; echo
echo "Columnas disponibles en la database elegida "; echo 
db.columns table=$database1;echo
read -p "Nombre de la columna a copiar= ? " columna; echo
temp=(`v.db.select map=$database1 col=$columna | grep -oE '[0-9.-]*'`)
length=$(expr `echo ${#temp[*]}` - 1)
read -p "Nombre de la database destino = ? " database2; echo
limite=$(expr $length + 1)
v.db.addcol map=$database2 columns="$columna double precision"
for i in $(seq 1 $limite)
do
echo "UPDATE $database2 SET $columna="${temp[$i-1]}" WHERE cat=$i"| db.execute
done

Se grabó como script_join, se le dió permisos de ejecución con chmod +x script_join y se ejecutó con ./script_join. Su ejecución interactiva se observa en la siguiente imagen:

Los resultados, comparando las tablas atributivas destino y fuente, permiten visualizar que fue el esperado:

En cuenca_intercepto se creó la inicialmente inexistente columna distancia y se copió íntegramente el contenido desde cuenca_intercepto2.

About these ads
Esta entrada fue publicada en GRASS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

3 respuestas a Script de bash para copiar columnas de tablas externas con db.execute (GRASS-QGIS)

  1. Pingback: Script de bash para copiar columnas de tablas externas con db.execute (GRASS-QGIS) | Geoprocessing - Geoprocessamento | Scoop.it

  2. Pingback: Db | TagHall

  3. Pingback: Script de python para introducir resultados de operaciones complejas en registros de tablas (driver dbf) con db.execute (GRASS-QGIS) |

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s