ST_3DClosestPoint返回多个点

时间:2018-10-04 12:18:43

标签: postgresql postgis

数据

我有2张桌子  -3D点几何(obs.geom),n = 10  -一个3D点(target.geom),n = 1

问题-第1部分

当我运行以下代码时,它将列出所有10种obs geoms,而不仅仅是最接近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 :(得分:1)

我们不能使用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

如果您想要更多,那么只需增加一个最接近的点即可。