ST_3DClosestPoint возвращает несколько точек - PullRequest
0 голосов
/ 04 октября 2018

Данные

У меня есть 2 таблицы - геометрия 3D-точек (obs.geom), n = 10 - одна 3D-точка (target.geom), n = 1

Проблема - часть 1

Когда я запускаю следующий код, он перечисляет все 10 объектов obs, а не только самую близкую точку к target.geom.Кто-нибудь может дать мне несколько указателей?

SELECT ST_3DClosestPoint(target.geom, obs.geom)
FROM target, obs

Часть 2

Затем я хочу добавить в Distance3D

SELECT ST_3DDistance(ST_3DClosestPoint(target.geom, obs.geom) as dist_closest, obs.geom) as distance
FROM target, obs
where dist_closest > 1.5

1 Ответ

0 голосов
/ 11 октября 2018

Мы не можем использовать оператор knn (он работает только с 2D), поэтому нам придется немного поработать.Для отдельной точки в таблице целей это будет выглядеть так:

select * , st_distance(o.geom, t.geom), st_3ddistance(o.geom, t.geom)
  from obs o, target t
 order by st_3ddistance(o.geom, t.geom) limit 1

Но это не сработает, если вы хотите получить результаты для нескольких целей одновременно.Если вы хотите найти самые близкие точки для многих целей, тогда мы должны использовать боковое соединение

select t2.*, a.*
  from target t2,
  lateral (select o.*
             from obs o, target t
            where t2.id=t.id
            order by st_3ddistance(o.geom, t.geom) limit 1) a

Если вам нужно больше одной ближайшей точки, просто увеличьте предел.

...