我正在尝试通过SPIT将一些多边形shapefile导入QGIS中的Postgis。其中之一无法导入并返回此错误:

错误:几何类型(多边形)与列类型(MultiPolygon)不匹配

我尝试更改从MULTIPOLYGON到POLYGON的SPIT widnow表中的“特征类”属性,但是什么也没发生。 multipolygon?
我已经在Windows中尝试过QGIS 2.0.1,在ArchLinux中已经尝试过QGIS 2.3。

#1 楼

无需维护吐痰,不建议再使用。我建议使用处理工具箱并选择“导入PostGIS”算法。使用该例程使我更加幸运。需要注意的几件事:


数据库(连接名称)参数必须与您在“添加PostGIS层”对话框中为数据库连接命名的名称匹配。
该模式必须已经存在-不会自动创建


#2 楼

我使用ogr2​​ogr自动将shapefile提取到PostGIS数据库中。
关于该问题,请使用以下选项:

-nlt PROMOTE_TO_MULTI


这将迫使ogr2ogr进行将POLYGON几何形状升级为MULTIPOLYGON,避免出现错误。一个非常简单的示例:

ogr2ogr -f "PostgreSQL" PG:"dbname='<my_db>'" -nlt PROMOTE_TO_MULTI <shapefile>


我省略了pgsql主机/身份验证的详细信息。要批处理多个shapefile,您可以执行以下操作:

find ./ -name *.shp | xargs -n1 ogr2ogr <ogr2ogr args omitting the shapefile>


#3 楼

这似乎是一个无法解决的已知问题:请参阅http://hub.qgis.org/issues/5328

如果需要解决方法,请尝试将表格的几何列类型更改为通用的“几何形状”:

ALTER TABLE my_table ALTER COLUMN geom SET DATA TYPE geometry;


完成导入后,您可以恢复为MultiPolygon

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


或者,尝试使用ogr2​​ogr加载数据。

#4 楼

尽管我确实尝试使用“导入PostGis”算法来解决该问题,但并没有成功(我的数据库未出现在列表中-我正在使用QGIS 2.10)。相反,我使用了shp2pgsql,一个简单的命令提示符任务,如下所述:

(以管理员身份)打开命令提示符
转到PostgreSQL / bin文件夹,其外观应如下所示:C:\Program Files\PostgreSQL.4\bin>

只需将您的.shp文件复制并粘贴到此目录中即可。 (我复制了我的整个文件夹和.shp文件。显然要对要转换的所有文件执行此操作,这些文件将保存在当前目录中(在我的情况下为shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sql

然后只需将SQL文件复制并粘贴到PLSQL中数据库。此外,关于MyShpDir的另一件很酷的事情是,您只需在命令中添加MySHPFile.shp参数即可立即在表中创建索引,如下所示:
MYSQLFile

#5 楼

是的,可以通过向表中添加以下约束来告诉PostGIS接受任何几何类型(多边形,多边形,点,线串等)。

对于PostGIS 2.x(使用通用Geometry typemod)

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


上一个答案(用于使用约束的PostGIS 1.x)

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


评论


CONSTRAINT或附近的语法错误。我尝试过SET CONSTRAINTS,但是相反,在CHECK附近我遇到了相同的错误。

– dmh126
2014年4月30日15:26



您使用的是哪个版本的Postgis?

– sfletche
2014年4月30日15:35

PostgreSQL 9.3的Postgis 2.1

– dmh126
2014年4月30日15:40在

尝试使用force_geotype_geom而不是force_geometry_type。让我知道是否可行,如果可行,我将对其进行编辑。

– sfletche
2014年4月30日15:44



没用同样的错误。

– dmh126
2014年4月30日15:54

#6 楼

我尝试了“导入PostGIS”算法解决方案,但发现该方法也不起作用。我找到的最简单的解决方案是转到“数据库”>“数据库管理器”,导航到数据库,然后单击“导入层/文件”(向下箭头)按钮。