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.
-hcorresponde al host-pal puerto-d(database) al nombre de base de datos-Ual 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