PostGis从距线一定距离的多个表中查找点

时间:2020-04-22 17:18:57

标签: sql postgresql postgis

我有三个表,这些表的几何形状为“线”,“ points_a”,“ points_b”。 我想做的是从两个表中找到所有位于“直线” 1.5 m范围内的点。

从一个表中查找点不是问题:

SELECT * from lines l 
JOIN points_a a ON (ST_DWithin(l.geom, a.geom, 1.5)

但是我不知道如何添加第二张表。 当我添加下一个Join时,我得到:都位于同一行中的点,当其中只有一个是缓冲区时,我没有得到它们

2 个答案:

答案 0 :(得分:0)

这些行中的东西可以解决问题:

SELECT * from (select * from lines union all select * from lines2) l
JOIN points_a a ON (ST_DWithin(l.geom, a.geom, 1.5)

SELECT * from lines l1
JOIN points_a a ON (ST_DWithin(l1.geom, a.geom, 1.5)
union all
SELECT * from lines l2
JOIN points_a a ON (ST_DWithin(l2.geom, a.geom, 1.5)

最好的问候,
比尼亚尼

答案 1 :(得分:0)

仅在它们同时位于两个缓冲区中时才得到它们的原因是,您正在使用内部联接来创建此查询-这将排除其中任何ON子句为false的行。

您可以在CTE(或子查询)中汇总点,并在其上加入:

WITH points AS (
  SELECT geom FROM points_a
  UNION ALL
  SELECT geom FROM points_b
)
SELECT
  *
FROM
  lines l 
JOIN
  points p ON ST_DWithin(l.geom, p.geom, 1.5)