This topic describes the ST_CurveRecognize function. This function recognizes a curve of a trajectory and the curvature radius.
Syntax
Syntax 1
SETOF trpeak ST_CurveRecognize (trajectory traj, float8 radius_threshold, float8 angle_threshold, float8 angle_compress_threshold default 0);
Syntax 2
SETOF trpeak ST_CurveRecognize (trajectory traj, float8 radius_threshold, float8 angle_threshold, float8 expansion_radius1, float8 expansion_radius2,float8 angle_compress_threshold default 0);
Parameters
Parameter | Description |
traj | The original trajectory. |
radius_threshold | The curvature radius that is specified to recognize the center point of a curve. The function recognizes all consecutive points of a curve whose curvature radius is smaller than the value of the radius_threshold parameter, and then selects the point with the smallest curvature radius from these points as the center point of the curve. |
angle_threshold | The rotation angle. If the rotation angle of the boundary point on the curve is smaller than the value of this parameter, the boundary point is removed. As a result, the curve is divided into two parts at the removed boundary point. This ensures that the rotation angle of all points on each part of the divided curve is greater than the value of this parameter. |
expansion_radius1 | The curvature radius of the curve at a point. |
expansion_radius2 | The average curvature radius of the curve from the specified point to the center point. |
angle_compress_threshold | If the rotation angle of the curve at a point is less than the value of this parameter, sampling is not performed. This reduces the sampling density to prevent the curve from being unrecognizable due to excess sampling. |
Response parameters:
Parameter | Description |
loc | The center point of the curve, which indicates the serial number of the turning point on the trajectory. For example, if the loc parameter is set to n, the center point of the curve is the (n + 1)th turning point of the trajectory. |
height | The curvature radius of the center point on the curve. A positive value indicates a clockwise curvature, and a negative value indicates a counterclockwise curvature. |
startloc | The start point of the curve. |
endloc | The end point of the curve. |
Description
The following list describes the implementation of curve recognition:
The function recognizes all consecutive points of a curve whose curvature radius is smaller than the value of the radius_threshold parameter, and then selects the point with the smallest curvature radius from these points as the center point of the curve.
The function selects the adjacent center points of the curves on the trajectory as the points of a trajectory based on the expansion_radius1 and expansion_radius2 parameters. The selected points must meet the following requirements:
The curvature radius of each point is smaller than the value of the expansion_radius1 parameter.
The average curvature radius of the curve from the specified point to the center point is smaller than the value of the expansion_radius2 parameter.
NoteIf you do not specify the expansion_radius1 and expansion_radius2 parameters, you can use Syntax 1. In this case, the default settings
expansion_radius1 = radius_threshold * 2
andexpansion_radius2 = radius_threshold * 4
are used.The function determines whether to remove the boundary point of the curve based on the value of the angle_threshold parameter. This ensures that the rotation angle of the boundary point on the curve is greater than the value of the angle_threshold parameter. If the rotation angle of the original boundary point on the curve is greater than the specified threshold, the boundary of the curve is expanded towards both sides. If the rotation angle of the original boundary point on the curve is smaller than the specified threshold, the boundary of the curve shrinks towards the interior of the hull.
Examples
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)