Postgis расстояние между двумя точками на линии

У меня есть маршрут (как LINESTRING) и две машины с позицией (как ТОЧКА). Мне нужно рассчитать расстояние между двумя точками по маршруту.

В качестве дополнительной трудности я думаю, что мне также нужно измерить расстояние от точки до ближайшей точки на линии в случае, если транспортное средство не находится на маршруте в данный момент.

Я использую это, чтобы найти ближайшую точку на маршруте:

SELECT ST_AsText(ST_ClosestPoint(pt,line)) AS cp_pt_line, 
    ST_AsText(ST_ClosestPoint(line,pt)) As cp_line_pt
FROM (SELECT 'POINT(100 100)'::geometry As pt, 
    'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry As line
) As foo;

Это возможно в запросе?

1 ответ

Решение
SELECT     ST_Length(ST_GeographyFromText(ST_AsText(ST_Line_Substring(line,ST_Line_Locate_Point(line,ST_ClosestPoint(line,fpt)),ST_Line_Locate_Point(line,ST_ClosestPoint(line,tpt)))))) As length_m,
                                                                   ST_Distance(ST_ClosestPoint(line,tpt)::geography, tpt::geography) as to_point_to_line_m,
                                                                   ST_Distance(ST_ClosestPoint(line,fpt)::geography, fpt::geography) as from_point_to_line_m,
                                                                   ST_AsText(ST_ClosestPoint(line,tpt)) as to_point_on_line,
                                                                   ST_AsText(ST_ClosestPoint(line,fpt)) as from_point_on_line,
                                                                   ST_AsText(tpt) as to_point,
                                                                   ST_AsText(fpt) as from_point
                                           FROM ( SELECT 'SRID=4326;POINT(1)'::geometry As tpt,
                                                                                          'SRID=4326;POINT(2)'::geometry As fpt,
                                                                                          ST_Segmentize('SRID=4326;LINESTRING(123)'::geometry,  0.00001) As line
                                                       ) As foo;

Расстояние length_m, расстояние до_point_on_line и from_point_on_line.:)

Другие вопросы по тегам