【发布时间】:2020-01-23 08:15:57
【问题描述】:
使用 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 是此查询的结果。
【问题讨论】:
-
能否添加 1) 示例数据 2) 表结构和 3) 确切的预期结果?
-
添加了一些示例数据。
-
这就是您要找的东西吗?
SELECT id, ST_Distance(geom,ST_SetSRID(ST_MakePoint(4571547, 5800297, -246,0312),3857)) as dist FROM points_list ORDER BY dist LIMIT 1目前无法测试 -
应该是这样的。我将
ST_Distance替换为ST_3DDistance,因为z 维度也很重要。不幸的是,我总是得到距离为 3293614.81946199 的示例数据的第 6 点,即使我将查询中的坐标设置为示例数据的第二个点的值。
标签: sql postgresql 3d postgis closest-points