该函数用于识别轨迹中的弯道、转弯半径。
语法
语法一:
SETOF trpeak ST_CurveRecognize (trajectory traj, float8 radius_threshold, float8 angle_threshold, float8 angle_compress_threshold default 0);
语法二:
SETOF trpeak ST_CurveRecognize (trajectory traj, float8 radius_threshold, float8 angle_threshold, float8 expansion_radius1, float8 expansion_radius2,float8 angle_compress_threshold default 0);
参数
参数 | 描述 |
traj | 原始轨迹。 |
radius_threshold | 在识别弯道中心点时,需要设置一个转动半径。 根据参数radius_threshold,寻找所有转动半径小于radius_threshold参数值的点,在每一段连续的点中,将转动半径最小的点作为弯道中心。 |
angle_threshold | 用于设置一个转向角,与弯道边界点的转向角进行比较,去除小于此参数值的点。 |
expansion_radius1 | 弯道点所需的转动半径。 |
expansion_radius2 | 弯道点到弯道中心路径上所需的平均转动半径。 |
angle_compress_threshold | 如果弯道点的转向角度小于此参数值,则不采样,用于简化采样密度,防止采样密度过高导致弯道无法识别。 |
返回值说明:
参数 | 描述 |
loc | 指弯道中心位置,表示弯道中心点是轨迹中的第几个折点。 例如,如果loc为n,则弯道中心点是轨迹的第n+1个折点。 |
height | 弯道中心的转动半径。正值表示顺时针,负值表示逆时针。 |
startloc | 弯道起始点。 |
endloc | 弯道终止点。 |
描述
弯道识别主要分为如下步骤:
根据参数radius_threshold,寻找所有转动半径小于radius_threshold参数值的点,在每一段连续的点中,将转动半径最小的点作为弯道中心。
每个弯道中心,根据参数expansion_radius1和expansion_radius2,选取其邻接的点作为轨迹的组成点。选取的点需要满足如下条件:
转动半径值小于expansion_radius1参数值。
从弯道中心点到此点的转动半径均值小于expansion_radius2参数值。
说明如果不指定expansion_radius1和expansion_radius2,则可以使用语法一,默认
expansion_radius1 = radius_threshold * 2
,expansion_radius2 = radius_threshold * 4
。根据angle_threshold对弯道的边界进行修剪,使弯道边界点的转角大于angle_threshold参数值。当原有的边界转角较大时,边界会向两侧扩张,否则,则会向内收缩。
示例
SELECT (ST_CurveRecognize('{"trajectory":{"version":1,"type":"STPOINT","leafcount":16,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-16 00:00:00","spatial":"LINESTRING(0 0,1 1,2 2,4 3,3 4,5 7,8 8,7 4,0 0,1 1,2 2,4 3,3 4,5 7,8 8,7 4)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00","2000-01-05 00:00:00","2000-01-06 00:00:00","2000-01-07 00:00:00","2000-01-08 00:00:00","2000-01-09 00:00:00","2000-01-10 00:00:00","2000-01-11 00:00:00","2000-01-12 00:00:00","2000-01-13 00:00:00","2000-01-14 00:00:00","2000-01-15 00:00:00","2000-01-16 00:00:00"]}}', 15, 1)).*;
loc | height | startloc | endloc
-----+-------------------+----------+--------
2 | 5.70087712549569 | 2 | 2
4 | 2.10237960416286 | 4 | 8
10 | 5.70087712549569 | 10 | 10
12 | 2.10237960416286 | 12 | 15
3 | -1.17851130197758 | 3 | 3
11 | -1.17851130197758 | 11 | 11
(6 rows)