【问题标题】:Mixed SRID's in trigger stopping qgis from committing changes混合 SRID 触发阻止 qgis 提交更改
【发布时间】:2023-03-30 15:10:01
【问题描述】:

我有一个触发器,它获取一条线,获取其 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),
      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
   

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

【问题讨论】:

    标签: postgresql qgis pgadmin-4 postgresql-triggers


    【解决方案1】:

    ORDER BY ST_EndPoint((dump_line).geom)&lt;-&gt;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);

    【讨论】:

    • 这正是我所需要的。谢谢。
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2019-02-15
    • 2016-12-30
    • 2017-12-12
    • 2021-02-04
    • 2013-09-06
    相关资源
    最近更新 更多