該函數用於識別軌跡中的彎道、轉彎半徑。
文法
文法一:
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.1023796041628637 | 4 | 8
10 | 5.70087712549569 | 10 | 10
12 | 2.1023796041628637 | 12 | 15
3 | -1.1785113019775793 | 3 | 3
11 | -1.1785113019775793 | 11 | 11
(6 rows)