sql - 使用 PGAdmin4 v5 中的触发器来获取 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
推荐阅读
- javascript - javascript:检查复杂对象中是否存在大于给定值的值
- c# - .NET / C# Usb 通信库
- c# - ASP Net Core - 如何在多个级别上进行路由继承?
- ubuntu - 操作系统从 16.04 升级到 20.04 后,在戴尔笔记本电脑上未检测到网络摄像头
- uipath - Uipath-Studio,如何数据抓取产品列表?
- python - 使用 YAML 和过滤器登录 python
- matlab - 如何在 MATLAB 中为 ode15s 中的选项结构编写自定义“输出函数”以存储解向量的历史?
- javascript - 从字符串中删除某些重复出现的字符
- flutter - 使用 Dart 进行实时语音转录
- python - 如何使用 Telethon 获取传入电报消息的聊天或群组名称?