Estoy tratando de importar algunos archivos de forma de polígono a Postgis en QGIS a través de SPIT. Uno de ellos no se puede importar y devuelve este error:
ERROR: Geometry type (Polygon) does not match column type (MultiPolygon)
Traté de cambiar el atributo "Clase de entidad" en esa tabla en SPIT widnow, de MULTIPOLYGON a POLYGON, pero no pasó nada.
¿Hay alguna forma de hacer que Postgis acepte ambos tipos (polígono y multipolígono)? ¿O tal vez de alguna manera puedo convertir la geometría del archivo de forma de polígono a multipolígono? ¿Algunas ideas?
He probado Qgis 2.0.1 en Windows y Qgis 2.3 en ArchLinux.
Este parece ser un problema conocido que no se solucionará: consulte http://hub.qgis.org/issues/5328
Si necesita una solución alternativa, intente cambiar el tipo de columna de geometría de su tabla a una 'geometría' genérica:
Después de que haya importado, puede volver a
MultiPolygon
:Alternativamente, intente cargar sus datos usando ogr2ogr .
fuente
Utilizo ogr2ogr para automatizar la ingesta de archivos de forma en una base de datos PostGIS. Específicamente con respecto a la pregunta, use la opción:
Esto obligará a ogr2ogr a promover las geometrías POLYGON a MULTIPOLYGON, evitando el error. Un ejemplo muy simple:
He omitido los detalles de host / autenticación pgsql. Para agrupar múltiples archivos de forma, puede hacer algo como:
fuente
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, usé shp2pgsql , que era una tarea simple del símbolo del sistema como se describe a continuación:
C:\Program Files\PostgreSQL\9.4\bin>
.shp
archivos en este directorio. (Copié toda mi carpeta con mis.shp
archivos.shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sql
dondeMyShpDir
su directorio, 4326 es el SRID de WGS84, cambie si está usando un SSID diferente,MySHPFile.shp
su archivo particular (MYSQLFile
se creará automáticamente). Obviamente, haga esto para todos los archivos que desea convertir. Los archivos se guardarán en su directorio actual (C:\Program Files\PostgreSQL\9.4\bin
en mi caso)Luego, simplemente copie y pegue los archivos SQL en su base de datos PLSQL.
Además, una cosa interesante adicional
shp2pgsql
es el hecho de que puede crear instantáneamente un índice en su tabla simplemente agregando elI
parámetro en el comando, así:shp2pgsql -s 4326 -I MyShpDir/MySHPFile.shp> MYSQLFile.sql
¡Lucro! :)
fuente
Sí, puede decirle a PostGIS que acepte cualquier tipo de geometría (polígono, multipolígono, punto, cadena lineal, etc.) agregando la siguiente restricción a su tabla.
Para PostGIS 2.x (usando Geometry typemod genérico)
Respuesta anterior (para PostGIS 1.x usando restricciones)
fuente
enforce_geotype_geom
lugar deenforce_geometry_type
. avíseme si eso funciona, y editaré mi respuesta si es así.Intenté la solución del algoritmo 'Importar en PostGIS' pero descubrí que tampoco funcionaba. La solución más fácil que encontré fue ir a Base de datos > Administrador de bases de datos , navegar a su base de datos y hacer clic en el botón Importar capa / archivo (la flecha hacia abajo) .
fuente