ST_ClosestPoint — Gibt den 2D-Punkt auf g1 zurück, der g2 am nächsten ist. Dies ist der erste Punkt der kürzesten Linie von einer Geometrie zur anderen.
geometry ST_ClosestPoint(geometry geom1, geometry geom2);
geography ST_ClosestPoint(geography geom1, geography geom2, boolean use_spheroid = true);
Gibt den 2-dimensionalen Punkt auf geom1 zurück, der geom2 am nächsten liegt. Dies ist der erste Punkt der kürzesten Linie zwischen den Geometrien (wie von ST_ShortestLine berechnet).
|
|
|
Falls es sich um eine 3D-Geometrie handelt, sollten Sie ST_3DClosestPoint vorziehen. |
Verbessert: 3.4.0 - Unterstützung für Geographie.
Verfügbarkeit: 1.5.0
Der nächstgelegene Punkt für einen Point und einen LineString ist der Punkt selbst. Der nächstgelegene Punkt für einen LineString und einen Punkt ist ein Punkt auf der Linie.
SELECT ST_ClosestPoint(pt, line) AS cp_pt_line, 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)
Find the closest point on polygon A to polygon B.
WITH source AS (
SELECT 'POLYGON ((190 150,20 10,160 70,190 150))'::geometry AS a,
ST_Buffer('POINT(80 160)'::geometry, 30) AS b
)
SELECT b AS polygon_b,
ST_ClosestPoint(a, b) AS closest_point
FROM source;
POLYGON((110 160,109.424 154.147,107.716 148.519,104.944 143.333,101.213 138.787,96.667 135.056,91.481 132.284,85.853 130.576,80 130,74.147 130.576,68.519 132.284,63.333 135.056,58.787 138.787,55.056 143.333,52.284 148.519,50.576 154.147,50 160,50.576 165.853,52.284 171.481,55.056 176.667,58.787 181.213,63.333 184.944,68.519 187.716,74.147 189.424,80 190,85.853 189.424,91.481 187.716,96.667 184.944,101.213 181.213,104.944 176.667,107.716 171.481,109.424 165.853,110 160)) | POINT(131.59149149528952 101.89887534906195)
ST_3DClosestPoint, ST_Distance, ST_LongestLine, ST_ShortestLine, ST_MaxDistance