PostGIS:从 3D 点列表中找到最近的点

PostGIS: Find nearest point from a list of 3D points

使用 PostGIS 数据库,我想从点列表(存储为 table 中的几何图形)中筛选出最接近传递给查询的特定点的点。
我已经试过了ST_3DClosestPoint,但是他们说的总是一条线上的一个点
如何过滤我的列表,以便仅确定最接近给定点的点云的 3D 点?有机会用 PostGIS(2.5 版)做到这一点吗?

编辑 table 结构和一些示例数据:

CREATE TABLE points_list (id SERIAL PRIMARY KEY, name VARCHAR(64), geom GEOMETRY(POINTZ, 3857));

INSERT INTO points_list (geom) VALUES (ST_TRANSFORM(ST_SetSRID(ST_MakePoint(4571450, 5800300, -246.028076), 31468), 3857));
INSERT INTO points_list (geom) VALUES (ST_TRANSFORM(ST_SetSRID(ST_MakePoint(4571550, 5800300, -246.033478), 31468), 3857));
INSERT INTO points_list (geom) VALUES (ST_TRANSFORM(ST_SetSRID(ST_MakePoint(4571650, 5800300, -246.040100), 31468), 3857));
INSERT INTO points_list (geom) VALUES (ST_TRANSFORM(ST_SetSRID(ST_MakePoint(4571750, 5800300, -246.062714), 31468), 3857));
INSERT INTO points_list (geom) VALUES (ST_TRANSFORM(ST_SetSRID(ST_MakePoint(4571850, 5800300, -246.104797), 31468), 3857));
INSERT INTO points_list (geom) VALUES (ST_TRANSFORM(ST_SetSRID(ST_MakePoint(4571950, 5800300, -246.162323), 31468), 3857));

然后,查询应该询问传递给查询的最近点,例如 4571547, 5800297, -246,0312。我希望示例值的第 2 个条目是此查询的结果。

你们真的很亲密。

考虑到数据样本,您正在执行大量 SRS 转换来填充您的 table。因此,存储的 SRS 也需要与查询中使用的 SRS 相匹配。

SELECT id, 
  ST_3DDistance(
    geom,
    ST_Transform(
      ST_SetSRID(
        ST_MakePoint(4571547, 5800297, -246,0312),31468),3857)) AS dist
FROM points_list
ORDER BY dist LIMIT 1;

 id |       dist        
----+-------------------
  2 | 6.936250729464996
(1 Zeile)

您可以避免将 ST_Transform if you already can provide ST_3DDistance 与 SRS 3857 中的坐标一起使用。