[英]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.