PostGis находит точки из нескольких таблиц на определенном расстоянии от линии - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть три таблицы с геометрией "линии", "точки_а", "точки_b". Я пытаюсь найти все точки из двух таблиц, которые находятся на расстоянии 1,5 м от «линий»

поиск точек из одной таблицы не является проблемой:

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

но я не могу понять, как добавить вторую таблицу с точками. когда я добавляю следующее соединение, я получаю: очки, которые находятся в одной строке, когда только один из них является буфером, я не получаю их

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Причина, по которой вы получаете их только тогда, когда они находятся в обоих буферах, заключается в том, что вы используете внутренние объединения для создания этого запроса - это исключит строки, в которых любое из условий ON является ложным.

Вы можете агрегировать точки в 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)
0 голосов
/ 22 апреля 2020

Что-то в этих строках сделает свое дело:

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

...