[postgis-users] Find LineString segment index containing closest point?

Bruce Rindahl bruce.rindahl at gmail.com
Wed Aug 5 08:46:24 PDT 2020


My two cents:
Since you are computing the distance, why not return it?  Also make the
index zero based like most of the other st_ functions.

CREATE OR REPLACE FUNCTION ST_LineLocateN( line geometry, pt geometry )
RETURNS table(index integer, dist double precision)
AS $$
    SELECT i - 1, dist FROM (
    SELECT i, ST_Distance(
        ST_MakeLine( ST_PointN( line, s.i ), ST_PointN( line, s.i+1 ) ),
        pt) AS dist
      FROM generate_series(1, ST_NumPoints( line )-1) AS s(i)
      ORDER BY dist
    ) AS t LIMIT 1;
$$
LANGUAGE sql STABLE STRICT;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20200805/7e1773aa/attachment.html>


More information about the postgis-users mailing list