ST_3DClosestPoint — 傳回 g1 上距離 g2 最近的 3D 點。這是 3D 最短線的第一個點。
geometry ST_3DClosestPoint(
geometry g1, geometry g2)
;
傳回 g1 上距離 g2 最近的 3 維點。這是 3D 最短線的第一個點。3D 最短線的 3D 長度就是 3D 距離。
此函數支援 3D,且不會捨棄 Z 索引。
此函數支援多面體表面。
可用性:2.0.0
變更:2.2.0 - 如果輸入兩個 2D 幾何圖形,則會傳回一個 2D 點(而不是舊行為假設遺失的 Z 為 0)。在 2D 和 3D 的情況下,遺失的 Z 不再假設為 0。
線字串和點 -- 3d 和 2d 最近點 SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt, ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt FROM (SELECT 'POINT(100 100 30)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line ) As foo; cp3d_line_pt | cp2d_line_pt -----------------------------------------------------------+------------------------------------------ POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(73.0769230769231 115.384615384615)
|
線字串和多點 -- 3d 和 2d 最近點 SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt, ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line ) As foo; cp3d_line_pt | cp2d_line_pt -----------------------------------------------------------+-------------- POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(50 75)
|
多線字串和多邊形 -- 3d 和 2d 最近點 SELECT ST_AsEWKT(ST_3DClosestPoint(poly, mline)) As cp3d, ST_AsEWKT(ST_ClosestPoint(poly, mline)) As cp2d FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly, ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1), (1 10 2, 5 20 1))') As mline ) As foo; cp3d | cp2d -------------------------------------------+-------------- POINT(39.993580415989 54.1889925532825 5) | POINT(20 40)
|