我在 pgAdmin4 中有一个触发函数,它可以在 QGIS 中抓取最接近线的起点和终点的对象。但是,我不仅要获取最近对象的 id,而且仅在对象在 20' 半径内且对象的 id 不为 null 时才获取该 id。
这个小提琴有我的工作触发器(触发器的副本也可以在下面找到)以及一些示例数据。我知道我需要将 ST_DWithin 添加到函数中,但我不确定如何去做。
下面是触发代码:
CREATE OR REPLACE FUNCTION insert_pipe() RETURNS TRIGGER AS $$
BEGIN
SELECT
j.node_id,
i.node_id
INTO NEW.dwn_str, NEW.up_str
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)<->(ST_SetSRID(s.geom,2346))
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)<->(ST_SetSRID(s.geom,2346))
LIMIT 1) i (node_id,geom_closest_upstream);
RETURN NEW;
END; $$ LANGUAGE plpgsql;
CREATE TRIGGER t_insert_pipe
BEFORE INSERT OR UPDATE ON pipes FOR EACH ROW EXECUTE PROCEDURE insert_pipe();