You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:00:48