错误:几何类型(多边形)与列类型(MultiPolygon)不匹配
我尝试更改从MULTIPOLYGON到POLYGON的SPIT widnow表中的“特征类”属性,但是什么也没发生。 multipolygon?
我已经在Windows中尝试过QGIS 2.0.1,在ArchLinux中已经尝试过QGIS 2.3。
#1 楼
无需维护吐痰,不建议再使用。我建议使用处理工具箱并选择“导入PostGIS”算法。使用该例程使我更加幸运。需要注意的几件事:数据库(连接名称)参数必须与您在“添加PostGIS层”对话框中为数据库连接命名的名称匹配。
该模式必须已经存在-不会自动创建
#2 楼
我使用ogr2ogr自动将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);
或者,尝试使用ogr2ogr加载数据。
#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