全部產品
Search
文件中心

ApsaraDB RDS:ST_CurveRecognize

更新時間:Feb 28, 2024

該函數用於識別軌跡中的彎道、轉彎半徑。

文法

  • 文法一:

    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

彎道終止點。

描述

彎道識別主要分為如下步驟:

  1. 根據參數radius_threshold,尋找所有轉動半徑小於radius_threshold參數值的點,在每一段連續的點中,將轉動半徑最小的點作為彎道中心。

  2. 每個彎道中心,根據參數expansion_radius1expansion_radius2,選取其鄰接的點作為軌跡的組成點。選取的點需要滿足如下條件:

    1. 轉動半徑值小於expansion_radius1參數值。

    2. 從彎道中心點到此點的轉動半徑均值小於expansion_radius2參數值。

    說明

    如果不指定expansion_radius1expansion_radius2,則可以使用文法一,預設expansion_radius1 = radius_threshold * 2expansion_radius2 = radius_threshold * 4

  3. 根據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)