PostGis从多个表格中找到一定距离内的点。

问题描述 投票:0回答:2

我有三张表,分别是 "线","点_a","点_b".我想从两张表中找到距离 "线 "1.5米范围内的所有点。

从一个表中找到点是没有问题的,但我不知道如何添加第二个表中的点。

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

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

sql postgresql postgis
2个回答
0
投票

只有当它们在两个缓冲区中时,你才会得到它们,原因是你使用内部连接来创建这个查询--这将排除任何一个 ON 子句为假。

你可以将CTE(或子查询)中的点汇总,然后JOIN。

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)

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)

问候,Bjarni

© www.soinside.com 2019 - 2024. All rights reserved.