miércoles, septiembre 09, 2009

Migrando capas shape (.shp) a postgis

El tema de pasar capas .shp a postgis, no sé sí será una manía, pero el tema de acceso a bases de datos contra el acceso a archivos no lo creo...

Resulta que en el trabajo, hay un poco de gente haciendo capas y capas de mapas en software propietario... alguna vez pregunté (en pasillo) sí se habían puesto de acuerdo sobre algunas normas para hacer esas capas y me miraron como sí gubiera hablado en húngaro! y pensé... coño!

No me equivoqué... cuando me dieron la tarea de montar un servidor de mapas y empecé a pedir las capas, empezaron mis dolores de cabeza... ahora, me toca ver cómo hacer, y escribir (acá) para que la cosa funcione...

Vale decir que no tengo conocimientos en el tema de cartografía... por ahora...

Existen varias formas, una de ellas es con el comando shp2pgsql, otra con QGis y otra con gvSIG (esas son las que yo conozco)...

shp2pgsql: debería funcionar con algo parecido a esto
shp2pgsql -W UTF-8 .shp <schema>.<tablename> ><filename>.sql
pero yo obtuve un mensaje de error por la codificación en la que está hecha la capa, o la mala norma de los atributos

Finalmente amprendí algo sobre el estándar a seleccionar para que la cosa funcione. No significa que haya entendido, pero lo aprendí. Existe algo que se llama Sistema de Coordenadas Proyectadas y Sistema de Coordenadas Geográficas, ambas tienen como Sistema de Coordenadas de Referencia WGS84, pero la primera utiliza UTM y al segunda no, de manera que para la región Los Andes (Venezuela) sería para el primer caso SRC: EPSG 32619 que tiene WGS84 / UTM 19N y para el segundo caso SRC: EPSG 4326. De manera que es importante recordar este detalle para las propiedades de los proyectos y capas...

QGis:
  • verifico en las propiedades del proyecto que el Sistema de Referencia de Coordenadas (SRC) esté en WGS 84 (EPSG 4326 o 32619 según sea el caso)
  • Añado la capa vectorial (.shp)
  • verifico las propiedades de la capa que tenga el datum WGS 84
Importando la capa (.shp) a PostGIS:
  • Deseleccionar la opción Usar SRID por omisión o especificar aquí (que trae por defecto -1)
  • cambiar el -1 por 4326 (o el que corresponda)
  • añadir la capa
  • ok
gvSIG:
  • Agragar una vista nueva
  • Verificar en Propiedades la Proyección Actual, que por defecto viene en 23030 (España), con lo cual seleccionamos 4326 o 32619 (u otra, según sea el caso)
  • Click al botón Abrir, para añadir una capa .shp
  • Al seleccionar la opción de añadir una capa, verificamos que tenga en Proyección Actual, el mismo valor que hemos puesto a la vista. Añadios la capa
  • Seleccionada la capa a exportar, menú -> capa -> exportar -> postgis
  • llenamos los datos que nos solicitan (nombre de la tabla, datos para la conexión con la BD) y listo!
En todo esto, seguro hay algunas otras consideraciones a tomar en cuenta. Sí algiuen las sabe, paselas, sino, esperémos a descubrirlas...

2 comentarios:

Javi dijo...

Llego aquí buscando otra cosa, pero te diré que WGS84 es uno de los geoides que se utiliza para el cálculo en los sistemas de coordenadas (muy utilizado ya que es el que se emplea en el sistema GPS).

Los sistemas de coordenadas geográficos utilizan unidades de medida angulares (de ahí que se expresen en grados, minutos y segundos o bien la fórmula grados "coma" loquesea) y tienen en cuenta la forma esférica de la tierra, mientras que los sistemas de coordenadas proyectados son, como su definición dice, sistemas proyectados, de ahí que se puedan utilizar medidas lineales, ya que lo que se hace es pasar de un sistema 3D (la superficie de la tierra) a un sistema 2D (el plano "proyectado"), lo que incorpora una distorsión en la proyección obtenida.

Para ampliar información sobre epsg (European Petroleum Survey Group) se puede consultar este enlace.

Unknown dijo...

Hola,

estoy trabajando con quantum gis y estoy intentando añadir una capa. Mi problema es que al insertar la capa da el siguiente error:

Problemas al insertar objetos espaciales del archivo:
C:\Documents and Settings\user\Escritorio\pruebas\vias_ave_en_servicio\fichero_p.shp
La base de datos dio un error mientras ejecutaba esta SQL:
INSERT INTO "public"."fichero_p" VALUES(0,' 110000',I','0','471.649',NULL,NULL,NULL,'0',... (cortado el resto de la SQL)
El error fue:
ERROR: new row for relation "fichero_p" violates check constraint "enforce_dims_the_geom"

Alguien me puede ayudar?.

Muchas gracias.

Laura