33 votos

El tipo de geometría de PostGIS no coincida con el tipo de columna en QGIS

Estoy intentando importar algunos shapefiles de polígonos a Postgis en QGIS a través de SPIT. Uno de ellos no se puede importar y devuelve este error:

ERROR: El tipo de geometría (Polígono) no coincide con el tipo de columna (MultiPolígono)

He intentado cambiar el atributo "Clase de entidad" en esa tabla en la ventana de SPIT, de MULTIPOLYGO a POLÍGONO, pero no pasó nada.

¿Hay alguna forma de hacer que PostGIS acepte ambos tipos (polígono y multipolígono) o puedo convertir la geometría del shapefile de polígono a multipolígono?

He probado con QGIS 2.0.1 en Windows y QGIS 2.3 en ArchLinux.

28voto

Rob Puntos 51

Utilizo ogr2ogr para automatizar la ingestión de shapefiles en una base de datos PostGIS. Específicamente con respecto a la pregunta, utiliza la opción:

-nlt PROMOTE_TO_MULTI

Esto obligará a ogr2ogr a promover las geometrías POLYGON a MULTIPOLYGON, evitando el error. Un ejemplo muy simple:

ogr2ogr -f "PostgreSQL" PG:"dbname=''" -nlt PROMOTE_TO_MULTI 

He omitido los detalles de host/auth de pgsql. Para procesar varios shapefiles, podrías hacer algo como:

find ./ -name *.shp | xargs -n1 ogr2ogr

26voto

MBCook Puntos 8316

Este parece ser un problema conocido que no será solucionado: ver http://hub.qgis.org/issues/5328

Si necesitas una solución alternativa, intenta cambiar el tipo de columna de geometría de tu tabla a 'geometry' genérico:

ALTER TABLE my_table ALTER COLUMN geom SET DATA TYPE geometry;

Después de que hayas importado tus datos, puedes volver a MultiPolygon:

ALTER TABLE my_table ALTER COLUMN geom 
    SET DATA TYPE geometry(MultiPolygon) USING ST_Multi(geom);

Alternativamente, intenta cargar tus datos usando ogr2ogr.

15voto

John Feminella Puntos 123

Spit ya no se mantiene y ya no se recomienda. Sugiero usar la caja de herramientas de procesamiento y elegir el algoritmo "Importar en PostGIS". He tenido mucho más éxito usando esa rutina. Algunas cosas a tener en cuenta:

  • El parámetro de base de datos (nombre de conexión) debe coincidir con el nombre de la conexión de la base de datos que has nombrado en el diálogo "Agregar capa PostGIS".
  • El esquema ya debe existir, no se creará automáticamente.

5voto

Aunque intenté resolverlo con el algoritmo "Importar a PostGis", no tuve éxito (mi base de datos no aparecía en la lista - estoy usando QGIS 2.10).

En cambio, utilicé shp2pgsql, que era una tarea sencilla de la Línea de Comandos como se describe a continuación:

  • Abrir la Línea de Comandos (como administrador)
  • Ir a la carpeta PostgreSQL/bin que debería lucir algo así: C:\Program Files\PostgreSQL\9.4\bin>
  • Simplemente copiar y pegar tus archivos .shp a este directorio. (Yo copié toda mi carpeta con mis archivos .shp.)
  • En la Línea de Comandos, escribir lo siguiente: shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sql donde MyShpDir es tu directorio, 4326 es el SRID de WGS84, así que cámbialo si estás utilizando un SSID diferente, MySHPFile.shp tu archivo particular (MYSQLFile se creará automáticamente). Obviamente, hacer esto para todos los archivos que desees convertir. Los archivos se guardarán en tu directorio actual (C:\Program Files\PostgreSQL\9.4\bin en mi caso).

Luego simplemente copiar y pegar los archivos SQL en tu Base de Datos PLSQL.

Además, algo genial adicional sobre shp2pgsql es el hecho de que puedes crear instantáneamente un índice en tu tabla simplemente añadiendo el parámetro I en el comando, así:

shp2pgsql -s 4326 -I MyShpDir/MySHPFile.shp> MYSQLFile.sql

3voto

Brian Vallelunga Puntos 3209

Sí, puedes indicarle a PostGIS que acepte cualquier tipo de geometría (polígono, multipolígono, punto, línea, etc.) agregando la siguiente restricción a tu tabla.

Para PostGIS 2.x (usando el tipo de geometría genérica)

ALTER TABLE my_table ALTER COLUMN geom TYPE geometry(Geometry,4326);

Respuesta anterior (para PostGIS 1.x usando restricciones)

CONSTRAINT enforce_geometry_type CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geometrytype(geom) = 'POLYGON'::text OR geom IS NULL)

0 votos

Error de sintaxis en o cerca de CONSTRAINT. He intentado SET CONSTRAINTS pero en su lugar obtuve el mismo error cerca de CHECK.

0 votos

¿Qué versión de postgis estás usando?

0 votos

Postgis 2.1 para PostgreSQL 9.3

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X