ST_LineLocatePoint — Renvoie l'emplacement fractionnaire du point le plus proche d'un point sur une ligne.
float8 ST_LineLocatePoint(geometry a_linestring, geometry a_point);
float8 ST_LineLocatePoint(geography a_linestring, geography a_point, boolean use_spheroid = true);
Renvoie un flottant compris entre 0 et 1 représentant l'emplacement du point le plus proche du point donné sur une LineString, en tant que fraction de la ligne 2D longueur.
Vous pouvez utiliser l'emplacement renvoyé pour extraire un point (ST_LineInterpolatePoint) ou une sous-ligne (ST_LineSubstring).
Cette méthode est utile pour calculer approximativement le nombre d'adresses
Disponibilité : 1.1.0
Modifié : 2.1.0. Jusqu'à la version 2.0.x, cette fonction était appelée ST_Line_Locate_Point.
This example approximates the street number of a house by locating the closest point on a street line. The subquery generates sample house and street data, and ST_DWithin excludes houses that are too far from the street.
SELECT ST_AsText(house_loc) As as_text_house_loc,
startstreet_num +
CAST( (endstreet_num - startstreet_num)
* ST_LineLocatePoint(street_line, house_loc) As integer) As street_num
FROM
(SELECT ST_GeomFromText('LINESTRING(1 2, 3 4)') As street_line,
ST_Point(x*1.01,y*1.03) As house_loc, 10 As startstreet_num,
20 As endstreet_num
FROM generate_series(1,3) x CROSS JOIN generate_series(2,4) As y)
As foo
WHERE ST_DWithin(street_line, house_loc, 0.2);
as_text_house_loc | street_num -------------------+------------ POINT(1.01 2.06) | 10 POINT(2.02 3.09) | 15 POINT(3.03 4.12) | 20
This example finds the closest point on a line to a point or other geometry.
SELECT ST_AsText(ST_LineInterpolatePoint(
foo.the_line,
ST_LineLocatePoint(foo.the_line, ST_GeomFromText('POINT(4 3)'))))
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo;
POINT(3 4)
ST_DWithin, ST_Length2D, ST_LineInterpolatePoint, ST_LineSubstring