在 PGAdmin 4 v5 中使用触发器获取在 QGIS 中生成的线的几何形状
Using Triggers in PGAdmin4 v5 to get the geom of a line being generated in QGIS
所以我有一个在 qgis 中可视化编码的管道数据库。我的目标是向 PGAdmin4 v5 添加一个触发器,该触发器使用 ST_StartPoint() 和 ST_EndPoint() 在输入时获取折线(管道)的端点。然后,我打算使用这个几何图形来获取最近的结构(一个点)并使用相应的数据自动完成两列。我有工作代码可以获取现有管道的端点并找到最近的结构,但我想使用新创建的线(管道)在将表单输入数据库时自动完成表单。
工作代码:
SELECT p.id,
dump_line.geom,
st_endpoint(dump_line.geom) AS downstream,
j.geom_closest_downstream,
st_startpoint(dump_line.geom) AS upstream,
i.geom_closest_upstream
FROM sewers.pipes p,
LATERAL st_dump(st_setsrid(p.geom, 2965)) dump_line(path, geom),
LATERAL ( SELECT s.geom
FROM sewers.structures s
ORDER BY (st_endpoint(dump_line.geom) <-> s.geom)
LIMIT 1) j(geom_closest_downstream),
LATERAL ( SELECT s.geom
FROM sewers.structures s
ORDER BY (st_startpoint(dump_line.geom) <-> s.geom)
LIMIT 1) i(geom_closest_upstream);
我需要弄清楚如何从更新中获取数据(向 qgis 添加条目)并使用它的几何形状而不是现有管道的几何形状。
只需将此查询放入函数中..
CREATE OR REPLACE FUNCTION insert_pipe() RETURNS TRIGGER AS $$
BEGIN
SELECT
j.geom_closest_downstream,
i.geom_closest_upstream
INTO NEW.geom_closest_downstream, NEW.geom_closest_upstream
FROM ST_Dump(NEW.geom) dump_line,
LATERAL (SELECT s.geom
FROM structures s
ORDER BY ST_EndPoint((dump_line).geom)<->s.geom
LIMIT 1) j (geom_closest_downstream),
LATERAL (SELECT s.geom
FROM structures s
ORDER BY ST_StartPoint((dump_line).geom)<->s.geom
LIMIT 1) i (geom_closest_upstream);
RETURN NEW;
END; $$ LANGUAGE plpgsql;
并为其附加一个触发器,例如BEFORE INSERT OR UPDATE
触发器:
CREATE TRIGGER t_insert_pipe
BEFORE INSERT OR UPDATE ON pipes FOR EACH ROW EXECUTE PROCEDURE insert_pipe();
此演示可能会给您一些提示:db<>fiddle
所以我有一个在 qgis 中可视化编码的管道数据库。我的目标是向 PGAdmin4 v5 添加一个触发器,该触发器使用 ST_StartPoint() 和 ST_EndPoint() 在输入时获取折线(管道)的端点。然后,我打算使用这个几何图形来获取最近的结构(一个点)并使用相应的数据自动完成两列。我有工作代码可以获取现有管道的端点并找到最近的结构,但我想使用新创建的线(管道)在将表单输入数据库时自动完成表单。
工作代码:
SELECT p.id,
dump_line.geom,
st_endpoint(dump_line.geom) AS downstream,
j.geom_closest_downstream,
st_startpoint(dump_line.geom) AS upstream,
i.geom_closest_upstream
FROM sewers.pipes p,
LATERAL st_dump(st_setsrid(p.geom, 2965)) dump_line(path, geom),
LATERAL ( SELECT s.geom
FROM sewers.structures s
ORDER BY (st_endpoint(dump_line.geom) <-> s.geom)
LIMIT 1) j(geom_closest_downstream),
LATERAL ( SELECT s.geom
FROM sewers.structures s
ORDER BY (st_startpoint(dump_line.geom) <-> s.geom)
LIMIT 1) i(geom_closest_upstream);
我需要弄清楚如何从更新中获取数据(向 qgis 添加条目)并使用它的几何形状而不是现有管道的几何形状。
只需将此查询放入函数中..
CREATE OR REPLACE FUNCTION insert_pipe() RETURNS TRIGGER AS $$
BEGIN
SELECT
j.geom_closest_downstream,
i.geom_closest_upstream
INTO NEW.geom_closest_downstream, NEW.geom_closest_upstream
FROM ST_Dump(NEW.geom) dump_line,
LATERAL (SELECT s.geom
FROM structures s
ORDER BY ST_EndPoint((dump_line).geom)<->s.geom
LIMIT 1) j (geom_closest_downstream),
LATERAL (SELECT s.geom
FROM structures s
ORDER BY ST_StartPoint((dump_line).geom)<->s.geom
LIMIT 1) i (geom_closest_upstream);
RETURN NEW;
END; $$ LANGUAGE plpgsql;
并为其附加一个触发器,例如BEFORE INSERT OR UPDATE
触发器:
CREATE TRIGGER t_insert_pipe
BEFORE INSERT OR UPDATE ON pipes FOR EACH ROW EXECUTE PROCEDURE insert_pipe();
此演示可能会给您一些提示:db<>fiddle