13 Oct 2016 ¿Cómo dar dimensión geográfica a los datos?
Las bases de datos espaciales, igual que las bases de datos convencionales, se caracterizan por organizar y estructurar un conjunto de datos con el objetivo de optimizar su gestión. La principal diferencia radica en el modelo de datos que son capaces de almacenar. Entre los principales tipos de datos, se encuentran los datos numéricos (enteros, reales, etc.), variables de tipo texto, datos de fecha u hora, datos compuestos, etc. A la vez que permiten almacenar datos de carácter espacial, como son las geometrías de punto, línea o polígono propias de los sistemas de información geográfica.
Hoy en día, las bases de datos espaciales están muy evolucionadas y permiten múltiples funcionalidades. Tanto desde el punto de vista del manejo de los datos (crear nuevos datos, modificarlos y consultarlos) como desde el punto de vista de la importación y exportación de datos existentes a partir de nuestras bases de datos.
En este post vamos a ver, a modo de tutorial, cómo importar el contenido de un fichero de texto plano (escuelas.csv) a una base de datos espacial escuelas_db con PostgreSQL/PostGIS con el fin de geolocalizar todas las escuelas de Cataluña. Los datos son procedentes de OpenStreetMap. Descarga el fichero aquí.
La siguiente imagen muestra parcialmente el contenido del fichero escuelas.csv
Para nuestro propósito utilizaremos pgAdminIII como interfaz gráfica para la gestión de bases de datos PostgreSQL y para la ejecución de sentencias SQL. Estos son los pasos que vamos a seguir:
1.- Crear una tabla dentro de la base de datos escuelas_db.
2.- Importar el contenido del fichero escuelas.csv a la tabla creada.
3.- Añadir una nueva columna a nuestra tabla para agregar la nueva geometría.
4.- Crear la geometría POINT de cada escuela a partir de los atributos latitud y longitud.
1.-Creación de la tabla escuela
La tabla que vamos a crear debe contener los mismos atributos (o columnas) que el fichero escuelas.csv: id, latitud, longitud y nombre. Por lo tanto debemos crear mediante una sentencia SQL y dentro de la base de datos escuelas_db, una tabla con los mismos atributos.
CREATE TABLE escuela ( id integer primary key, latitud float, longitud float, nombre character varying(150) );
Sin entrar demasiado en detalles, la sentencia anterior crea una tabla escuela que contiene cuatro columnas llamadas id, latitud, longitud y nombre. Donde id es el identificador numérico de cada escuela (clave primaria), latitud y longitud contienen datos de tipo float (números reales) y nombre contiene datos de tipo texto hasta un máximo de 150 caracteres.
Ejecutamos la sentencia SQL desde pgAdminIII, seleccionando la base de datos escuelas_db y pulsando sobre el icono SQL (tal y como se aprecia en la imagen).
2.- Importación de datos a la tabla escuela
Una vez creada la tabla debemos importar el contenido del fichero escuelas.csv mediante la sentencia SQL ‘COPY’. En nuestro caso el fichero escuelas.csv está ubicado en la carpeta C:\Temp. Tecleamos la siguiente sentencia y la ejecutamos.
COPY escuela FROM 'C:\Temp\escuelas.csv';
Para visualizar el contenido de la tabla, podemos utilizar la sentencia SQL ‘SELECT’.
SELECT * FROM escuela;
3.- Agregar una nueva columna para almacenar el valor de la geometría
Siguiendo con las sentencias SQL, llegados a este punto vamos a utilizar el comando ‘ALTER TABLE’ para añadir una nueva columna de nombre geom. Esta columna, tipo GEOMETRY, contendrá las geometrías que crearemos, en el siguiente paso, para cada escuela.
ALTER TABLE escuela ADD COLUMN geom GEOMETRY;
4.- Crear la geometría tipo POINT para cada escuela e insertarla en la columna geom
Para crear las geometrías, utilizaremos la función espacial de PostGIS St_MakePoint(X,Y) que requiere de dos parámetros; latitud (Y) y longitud (X). La sentencia ‘UPDATE’ nos servirá para insertar los valores en la nueva columna geom del siguiente modo:
UPDATE escuela SET geom = St_MakePoint(longitud, latitud);
Finalmente podemos comprobar la ubicación de las escuelas conectando cualquier SIG de escritorio (QGIS, gvSIG, OpenJump, etc.) a la base de datos y mostrar el resultado de la tabla escuela.
+ info: Curso de especialización en base de datos espaciales
Artículos relacionados:
Nubes de puntos. Análisis de densidades con PostGIS y visualización
Cómo importar una geometría concreta de OpenStreetMap a una base de datos PostgreSQL/PostGIS