01 Dic 2014 Cómo importar una geometría concreta de OpenStreetMap a una base de datos PostgreSQL/PostGIS
En este artículo vamos a ver cómo podemos extraer una geometría concreta de la base de datos de OpenStreetMap en formato EWKT (Extended Well Know Text) para su posterior importación a una base de datos PostgreSQL/PostGIS.
Localizar la geometría a importar dentro de OpenStreetMap
Accediendo al sitio http://www.openstreetmap.org buscamos la geometría que deseamos importar a nuestra base de datos. En nuestro ejemplo, vamos a importar la geometría que define la ciudad de Barcelona.
De todos los resultados obtenidos para “Barcelona” seleccionamos la “ciudad” de Cataluña, España.
Tras pinchar sobre el resultado deseado, accedemos a otra pantalla como la que podemos ver en la siguiente imagen:
Extraer la geometría en formato EWKT
Entre la información que nos muestra la imagen anterior aparece el identificador de la relación Barcelona cuyo valor es 347950. Los polígonos dentro de OpenStreetMap se tratan como relaciones. Este valor identifica la geometría de la ciudad de Barcelona dentro de la base de datos de OpenStreetMap. Nos apuntamos ese valor y accedemos al sitio http://polygons.openstreetmap.org donde lo introducimos tal y como se muestra a continuación.
Al pulsar sobre “Submit Query” nos aparece una nueva pantalla donde podemos seleccionar el formato en el que deseamos obtener la geometría. Seleccionamos WKT (Well Known Text) y obtenemos nuestra geometría en un formato legible donde se indica el sistema de referencia (SRID=4326), el tipo de geometría (MULTIPOLYGON) y un listado con todas las coordenadas que componen esa geometría.
Ahora que conocemos las coordenadas de nuestra geometría, podemos utilizar la función de PostGIS St_GeomFromEWKT para insertar esa geometría a nuestra base de datos PostgreSQL/PostGIS. St_GeomFromEWKT recibe como parámetro de entrada una geometría en formato EWKT y retorna un objeto binario de tipo geometry que posteriormente podemos insertar en nuestra base de datos.
Suponiendo que disponemos de una tabla llamada barcelona con una columna geom que contiene datos de tipo geometry, podemos insertar nuestra geometría del siguiente modo:
INSERT INTO barcelona (geom)
VALUES (‘St_GeomFromEWKT (‘SRID=4326;MULTIPOLYGON(((2.0547371 41.4140393……
………..’);
Y si queremos generar la geometría, sin importarla, podemos utilizar la sentencia SQL:
SELECT St_GeomFromEWKT(‘SRID=4326;MULTIPOLYGON(((2.0547371 41.4140393……
………..
‘);