触发器中的混合 SRID 阻止 qgis 提交更改



我有一个触发器,它获取一条线,获取其strongtartPoint和ST_EndPoint,然后获取离这些端点最近的点,并为列分配node_id。这个Fiddle显示了触发器以及一些示例数据。当运行这个触发器时,我在QGIS上得到一个错误,说明如下:

Could not commit changes to layer pipes
Errors: ERROR: 1 feature(s) not added.

Provider errors:
PostGIS error while adding features: ERROR:  Operation on mixed SRID geometries
CONTEXT:  SQL statement "SELECT 
j.node_id,
i.node_id
FROM ST_Dump(ST_SetSRID(NEW.geom,2346)) dump_line,
LATERAL (SELECT s.node_id,(ST_SetSRID(s.geom,2346)) 
FROM structures s
ORDER BY ST_EndPoint((dump_line).geom)<->s.geom 
LIMIT 1) j (node_id,geom_closest_downstream),
LATERAL (SELECT s.node_id,(ST_SetSRID(s.geom,2346))
FROM structures s
ORDER BY ST_StartPoint((dump_line).geom)<->s.geom 
LIMIT 1) i (node_id,geom_closest_upstream)"
PL/pgSQL function sewers."Up_Str"() line 3 at SQL statement

我试图通过编辑触发器来解决这个问题,但这并没有解决问题。任何想法都将不胜感激。

线路ORDER BY ST_EndPoint((dump_line).geom)<->s.geom(以及起点的类似线路(可能是故障线路。

您可以再次声明s.geom的CRS。注意,通过这样做,structures上的任何空间索引都不会被使用,它必须在ST_SetSRID(geom,2346)上创建

干净的方法是在structures表的列级别设置CRS

alter table structures alter column geom TYPE geometry(point,2346) using st_setSRID(geom,2346);

最新更新