簡體   English   中英

PostGIS:從 3D 點列表中查找最近的點

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

使用 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 個條目是此查詢的結果。

你真的很親近。

考慮到數據樣本,您正在執行大量 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)

在此處輸入圖片說明

如果您已經可以為ST_3DDistance提供 SRS 3857的坐標,則可以避免使用ST_Transform

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM