ST_3DClosestPoint — 返回 g1 上距离 g2 最近的 3D 点。这是 3D 最短线的第一个点。
geometry ST_3DClosestPoint(geometry g1, geometry g2);
返回 g1 上距离 g2 最近的 3 维点。这是 3D 最短线的第一个点。3D 最短线的 3D 长度是 3D 距离。
             此函数支持 3d,并且不会丢弃 z 索引。
 此函数支持 3d,并且不会丢弃 z 索引。
             此函数支持多面体表面。
 此函数支持多面体表面。
可用性: 2.0.0
变更:2.2.0 - 如果输入 2 个 2D 几何图形,则返回一个 2D 点(而不是旧行为假设缺失 Z 为 0)。在 2D 和 3D 的情况下,对于缺失的 Z,不再假设 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)
             
 |