此问题的后续解答:ST_3DClosestPoint returning multiple points
1)我有一个xyz目标点存储为geom,我想将3Ddistance的行更新到另一个表中最接近的obs点。因此,找到最近的观测点,然后用距离更新目标点。
目标点的预期结果: id | geom | 3Ddistance_To_Nearest_Point_In_Obs_Table
obs表: id | geom 例如100条记录
2)为了使事情复杂化,我还想从obs表中选择n个邻居(例如说10个),并计算平均距离并更新目标表。
预期目标结果: id | geom | average_3Ddistance
我一直在尝试改变前面的示例,但是不高兴,有什么想法吗?
谢谢
答案 0 :(得分:0)
如果集合是静态的,那么您可以CTAS(作为选择创建表)结果,而不是对其进行更新。
create table new_table as
select t2.id, t2.geom, min(3ddistance) min_3DDistance, avg(3ddistance) avg_3ddistance
from target t2,
lateral (select t.id, st_3ddistance(o.geom, t.geom) 3ddistance
from obs o, target t
where t2.id=t.id
order by st_3ddistance(o.geom, t.geom) limit 10) a
group by t2.id, t2.geom;
或者如果您想更新
update target
set (average_3ddistance, min_3ddistance)=(
from (select id, min(3ddistance) min_3DDistance, avg(3ddistance) avg_3ddistance
from (select t.id, st_3ddistance(o.geom, t.geom) 3ddistance
from obs o, target t
where t2.id=t.id
order by st_3ddistance(o.geom, t.geom) limit 10) a
group by id) b
where b.id=t.id;