QGIS3.16自带Spatialite:如何将Polygon插入Multipolygon几何列?
解决Spatialite中MULTIPOLYGON表插入混合几何类型数据的问题
你用QGIS 3.16自带的Spatialite创建了parkings_combinés_lycées表,几何列类型设为MULTIPOLYGON,建表语句如下:
CREATE TABLE parkings_combinés_lycées ( identifiant_lycée VARCHAR(10), surface_totale_m² FLOAT, "%_emprise_dans_parcelles_lycées" FLOAT );
执行INSERT INTO .. SELECT ..插入数据时,出现错误:
parkings_combinés_lycées.geom violates Geometry constraint [geom-type or SRID not allowed]
原因是源数据中同时存在POLYGON和MULTIPOLYGON两种几何类型,与表的MULTIPOLYGON约束冲突。
以下是两种解决方案:
方案一:统一转换几何类型为MULTIPOLYGON(推荐)
无需修改表结构,用ST_Multi()函数将所有几何转换为MULTIPOLYGON类型,该函数会自动把单个POLYGON包装成MULTIPOLYGON,原MULTIPOLYGON数据保持不变。示例INSERT语句:
INSERT INTO parkings_combinés_lycées (identifiant_lycée, surface_totale_m², "%_emprise_dans_parcelles_lycées", geom) SELECT identifiant_lycée, surface_totale_m², "%_emprise_dans_parcelles_lycées", ST_Multi(geom) AS geom FROM 你的源表名称;
这种方式能保证表中几何类型统一,避免后续数据处理时出现类型不一致的问题。
方案二:修改表的几何约束,允许混合类型
如果确实需要保留两种几何类型,可以修改表的几何列约束,支持POLYGON和MULTIPOLYGON:
-- 先禁用原几何列约束 SELECT DisableGeometryColumn('parkings_combinés_lycées', 'geom'); -- 重新启用几何列,指定允许的类型(替换你的SRID值,如4326、3857) SELECT EnableGeometryColumn('parkings_combinés_lycées', 'geom', 你的SRID值, 'POLYGON,MULTIPOLYGON', 'XY');
也可以直接指定为GEOMETRY类型,允许所有几何类型,但这种方式约束性较弱,不推荐除非有特殊需求。
内容的提问来源于stack exchange,提问作者Darth Kangooroo
相关产品推荐
相关产品推荐

