名称

ST_ClosestPoint — 返回 g1 上距离 g2 最近的 2D 点。这是从一个几何体到另一个几何体的最短线的第一个点。

语法

geometry ST_ClosestPoint(geometry geom1, geometry geom2);

geography ST_ClosestPoint(geography geom1, geography geom2, boolean use_spheroid = true);

描述

返回 geom1 上距离 geom2 最近的 2 维点。这是几何体之间最短线的第一个点(由 ST_ShortestLine 计算)。

[Note]

如果您有 3D 几何体,您可能更愿意使用 ST_3DClosestPoint

增强:3.4.0 - 支持地理。

可用性:1.5.0

示例

点和线字符串的最接近点是点本身。线字符串和点之间的最接近点是线上的一个点。

SELECT ST_AsText( ST_ClosestPoint(pt,line)) AS cp_pt_line,
       ST_AsText( ST_ClosestPoint(line,pt)) AS cp_line_pt
    FROM (SELECT 'POINT (160 40)'::geometry AS pt,
                 'LINESTRING (10 30, 50 50, 30 110, 70 90, 180 140, 130 190)'::geometry AS line ) AS t;

   cp_pt_line   |                cp_line_pt
----------------+------------------------------------------
 POINT(160 40)  | POINT(125.75342465753425 115.34246575342466)

多边形 A 到多边形 B 上的最接近点

SELECT ST_AsText( ST_ClosestPoint(
		'POLYGON ((190 150, 20 10, 160 70, 190 150))',
		ST_Buffer('POINT(80 160)', 30)	)) As ptwkt;
------------------------------------------
 POINT(131.59149149528952 101.89887534906197)

另请参见

ST_3DClosestPoint, ST_Distance, ST_LongestLine, ST_ShortestLine, ST_MaxDistance