use*_*127 1 postgis point distance line
我有一条路线(如LINESTRING)和两辆有位置的车辆(如POINT)。我需要计算两个点之间的距离过的路线。
另外一个困难是,我认为在车辆此时不在路线上的情况下,还需要测量从该点到直线上最近点的距离。
我正在使用它来查找路线上的最近点:
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;
Run Code Online (Sandbox Code Playgroud)
在查询中有可能吗?
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;
Run Code Online (Sandbox Code Playgroud)
距离length_m,到point_on_line和from_point_on_line的距离。:)