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

问题描述 投票:1回答:1

使用PostGIS数据库,我希望从一系列点(以几何形式存储在表中)中筛选出最接近传递给查询的某个点的点。我已经尝试过ST_3DClosestPoint,但他们总是谈论直线上的一点。如何过滤列表,以便仅确定最接近给定点的点云的3D点? PostGIS(2.5版)是否有可能这样做?

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

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是该查询的结果。

sql postgresql 3d postgis closest-points
1个回答
0
投票

你真的很亲密。

考虑到您的示例,您正在做很多SRS转换来创建表。因此,最终存储的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)

如果已经可以在SRS ST_Transform中为ST_Transform提供坐标,则可以避免使用ST_3DDistance。>

© www.soinside.com 2019 - 2024. All rights reserved.