No voy a entrar en muchos detalles sino que asumo que esta entrada es del interés de las personas que tienen ya conocimiento previo.

Si sos nuevo en lo que a sistemas de información georeferenciales se refiera y tenés interés en aprender, por favor leé mi artículo Básicos. El SIG (Sistema de Información Geográfica)

Conceptos básicos

  • El Esri Shapefile o simplemente shapefile es un popular fomato de datos de vectores geoespaciales para sistemas GIS. Es desarrollado y regulado (la mayor parte) por Esri como su especificación abierta para la interoperabilidad de datos entre ESRI y otros productos de software. Las extensiones para un archivo son .shp, .shx, .dbf
  • PostGIS es un programa de software de código abierto que añade soporte para objetos geográficos a la base de datos objeto-relacional PostgreSQL. PostGIS sigue las características simples para la especificación de SQL del Open Geospatial Consortium (OGC). La extensión sería por supuesto un .sql

Conversión automatizada por medio de Bash Scripting

Escribí 2 archivos ejecutables distintos para esta migración

  • autoShp2Psql: se encarga de transformar todos los archivos shapefile a archivos SQL
  • autoExecSql: se encarga de ejecutar uno por uno los archivos SQL

El script para autoShp2Psql sería el siguiente:

#!/bin/bash

DIR_MAPAS="/directorio/de/los/mapas"

# BASE DE DATOS
SCHEMA="public"
DBNAME="NombreBaseDeDatos"

# PROYECCION
SRID="4326"

OUTPUTDIR="/directorio/de/salida"

TEMPFILE="$OUTPUTDIR/$SCHEMA.t"
OUTPUTFILE="$OUTPUTDIR/import-$SCHEMA.sh"

echo -e "#! /bin/bash\n#`date`" > $OUTPUTFILE

find $SEARCHDIR -nowarn -name *.shp > $TEMPFILE
cat $TEMPFILE | while read line
do
SINESPACIO=`echo ${line} | tr ' ' '_'`
echo "shp2pgsql -W \"ISO8859-1\" -s $SRID \"${line}\" $SCHEMA.`basename $SINESPACIO .shp` > `basename $SINESPACIO .sql`" >> "$OUTPUTDIR/import-$SCHEMA.sh"
done

chmod +x $OUTPUTFILE
rm $TEMPFILE

exit 0

Con esto tenemos creados todos nuestros archivos SQL listos para ser ejecutados en nuestra base de datos.

El segundo script, autoExecSql, es muy simple:

#!/bin/bash

# LOOP EN EL DIRECTORIO ACTUAL DE 
# TODOS LOS ARCHIVOS CON EXTESION .sql
for i in ./*.sql; do
	psql -h 127.0.0.1 -p 5432 -d NombreBaseDeDatos -U Usuario -f $i
done

El comando psql debe ser adaptado según la configuración de la base de datos.

  • -h corresponde al host
  • -p al puerto
  • -d (database) al nombre de base de datos
  • -U al usuario de base de datos
  • Si se requiere contraseña utilizarían la opción -W

Fin

Voilà! Ya han hecho la migración =)

Si tienen alguna duda acerca del funcionamiento dejen un comentario