触发器中的混合 SRID 阻止 qgis 提交更改
Mixed SRID's in trigger stopping qgis from committing changes
我有一个触发器,它接受一条线,获取它的 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 来解决问题,但这并没有解决问题。任何想法将不胜感激。
第 ORDER BY ST_EndPoint((dump_line).geom)<->s.geom
行(以及起点的相似行)可能是错误的。
您可以再次声明 s.geom
的 CRS。请注意,通过这样做,将不会使用 structures
上的任何空间索引,必须在 ST_SetSRID(geom,2346)
上创建它
干净的方法是在 structures
table
的列级别设置 CRS
alter table structures alter column geom TYPE geometry(point,2346) using st_setSRID(geom,2346);
我有一个触发器,它接受一条线,获取它的 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 来解决问题,但这并没有解决问题。任何想法将不胜感激。
第 ORDER BY ST_EndPoint((dump_line).geom)<->s.geom
行(以及起点的相似行)可能是错误的。
您可以再次声明 s.geom
的 CRS。请注意,通过这样做,将不会使用 structures
上的任何空间索引,必须在 ST_SetSRID(geom,2346)
干净的方法是在 structures
table
alter table structures alter column geom TYPE geometry(point,2346) using st_setSRID(geom,2346);