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

问题描述

我有一个触发器,它占用一条线,抓取它的 ST_StartPoint 和 ST_EndPoint,然后抓取离这些端点最近的点,并将 node_id 分配给一列。 This 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),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
   

我已尝试通过编辑触发器 to this解决该问题,但这并没有解决问题。任何想法将不胜感激。

解决方法

线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);