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.:)