1.1.1 轨迹操作
1.1.1.1 轨迹插值
支持三种轨迹插值方法,分别为为启发式插值、自由欧式空间插值和map match插值
1.1.1.1.1
自由欧式空间插值
语法:
1.
功能:
•
给定轨迹以及固定的时间间隔,根据原始轨迹点,对轨迹进行插值,保证插值后的每个轨迹点的时间间隔为传入的固定时间间隔
参数:
•
item 轨迹列名
•
timeInterval 时间间隔(Double)
示例:
1.1.1.1.2 启发式插值
语法:
1. select ST_HeuristicInterpolation(item, WKTString) from <viewName>
功能:
•
预知某段轨迹必定经过某些点,将这些点插入到轨迹中
参数:
•
item 轨迹列名
•
wktString 轨迹会经过的点组成的LineString的WKTString
示例:
2.
3.
4.
5.
6.
7.
1.1.1.1.3 Map Match 插值
语法:
1. select ST_MapMatchInterpolation(item, rnTableName, timeInterval) from <viewName>
功能:
•
地图匹配后的轨迹,按照某一个时间间隔进行插值,保证插入的点也在路网上
参数:
•
item 轨迹列名
•
rnTableName 轨迹对应的路网表名
•
timeInterval 时间间隔(Double)
示例1:
1. create view temp_view as
2. select
3. st_trajMapMatchToProjection(item, 'beijing_rn', { "mapMatcher": "tihmm" })
4. from
5. trajectory_query_test;
示例2:
1. select
2. ST_MapMatchInterpolation(item, 'beijing_rn', 60)
3. from
4. temp_view;
1.1.1.2 轨迹分段
语法:
1. select ST_TrajSegmentation(item, jsonStr) from viewName/tableName
功能:
•
将一条很长的轨迹分解成多条短的子轨迹
参数:
•
item: 轨迹字段名
•
viewName : 查询视图名
•
json : 使用json格式来表示的分段参数(可选参数)
实例:
1. -- jsonStr是一个json字符串,用于指定轨迹分段方法。引擎目前提供四种方法:
2. -- 基于时间间隔的分段方法:即若两个相邻的GPS点的时间间隔大于给定时间阈值,则这两个GPS点属于不同的子轨迹
3. {
4. "segmenterType": "TIME_INTERVAL_SEGMENTER",
5. "maxTimeIntervalInMinute": 60.0, --最大时间间隔
6. "minTrajLengthInKM": 1.0 --最小分段长度
7. }
8. --基于经典驻留点的分段方法
9. {
10. "segmenterType": "ST_CLASSIC_SEGMENTER",
11. "maxStayDistInMeter": 100.0,
12. "minStayTimeInSecond": 600.0,
13. "minTrajLengthInKM": 1.0 --最小分段长度
14. }
15. --基于密度驻留点的分段方法
16. {
17. "segmenterType": "ST_DENSITY_SEGMENTER",
18. "maxStayDistInMeter": 100.0,
19. "minStayTimeInSecond": 600.0,
20. "minTrajLengthInKM": 1.0 --最小分段长度
21. }
22. --混合的分段方法,默认分段方法
23. {
24. "segmenterType": "HYBRID_SEGMENTER",
25. "maxTimeIntervalInMinute": 60.0,
26. "minTrajLengthInKM": 1.0,
27. "maxStayDistInMeter": 100.0,
28. "minStayTimeInSecond": 600.0
29. }
30. -- 基于位置的轨迹分段
31. {
32. "MBRLength": 2500,
33. -- 单位为m,基于分段点扩展MBR的长度
34. "locationsWKT": "LineString(110.99
21.57, 113.47 23.15)",
35. -- 由分段的位置点组成的lineString的WKT
36. "segmenterType": "LOCATION_SEGMENTER"
37. -- 新增的分段方法对应的参数名字
38. }
1.1.1.3 轨迹去噪
语法:
1. SELECT ST_TrajNoiseFilter(item, json) FROM viewName/tableName
功能
•
对轨迹进行去噪处理
参数:
•
item 轨迹字段名
•
viewName/tableName 查询视图名或者表名
•
json :使用json格式来表示的降噪参数(可选参数)
Json参数解释:
•
是一个json字符串,用于指定轨迹去噪方法。引擎目前提供四种方法,如下:
1. 复合过滤方法
1. {
2. "@type": "COMPLEX_FILTER", --方法名
3. "mbr": { --不在这个mbr内部的视为异常值
4. "lowerLeft": {
5. "lng": -180,
6. "lat": -90
7. },
8. "upperRight": {
9. "lng": 180,
10. "lat": 90
11. }
12. },
13. "startTime": "
0000-01-01T00:00:00+08:00", --不在这个时间范围内的视为异常值
14. "endTime": "9999-12-31T00:00:00+08:00",
15. "maxSpeedMeterPerSecond": 100.0, --每秒最大速度,超过的算异常值
16. "segmenterParams": { --轨迹过滤包括轨迹分段的过程,具体参见分段部分
17. "maxTimeIntervalInMinute": 60,
18. "maxStayDistInMeter": 100,
19. "minStayTimeInSecond": 600,
20. "minTrajLengthInKM": 1,
21. "segmenterType": "HYBRID_SEGMENTER"
22. }
23. }
2.
1. --启发式过滤方法
2. {
3. "@type": "HEURISTIC_FILTER", --方法名
4. "maxSpeedMeterPerSecond": 100.0, --每秒最大速度,超过的算异常值
5. "minTrajLengthInKM": 1 --最小轨迹长度,若轨迹长度小于该值,直接删除
6. }
3.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
4.
1. { "@type":
"HYBRID_FILTER",--方法名
2. "mbr": { "lowerLeft": { "lng": -180, --不在这个mbr内部的视为异常值
3. "lat": -90 },
4. "upperRight": { "lng" :180,
5. "lat" :90 } },
6. "startTime":
"0000-01-01T00:00:00+08:00",--不在这个时间范围内的视为异常值
7. "endTime":
"9999-12-31T00:00:00+08:00",
8. "maxSpeedMeterPerSecond": 100, --最大速度,超过该速度的点视为异常值
9. "minTrajLengthInKM": 1 }--最小轨迹长度,若轨迹长度小于该值,直接删除
1.1.1.4 轨迹的地图匹配
1.1.1.4.1 ST_TrajMapMatchtoRoute(item,jsonStr)
ST_TrajMapMatchtoRoute:将原始轨迹地图匹配到路网上的route,每一个route对应路网上的一个路段以及进入和离开路段的时间,并返回每个映射点到原始轨迹的距离及路网相关信息
1.
Output输出:
•
oid,tid,time,end_time,start_position, end_position与原始轨迹保持一致,geom列变成了包含地图匹配后的轨迹经过所有的路段的polygon, 新增一列routes(地图匹配后的轨迹经过的所有的route合集,每一个route对应一个路段,以及进入和离开该路段的时间)
为方便用户将toRoute地图匹配后的完整行驶路径提取出来,JUST还内置了方法:st_extractRoute(),支持将routeOfTrajectory表中routes映射到路网形成一条完整行驶路径的LinsString,可选择其他列一起返回。
语法:
1.
参数:
•
item:routeOfTrajectory字段名,必填
•
rntableName:map match得到routeOfTrajectory的路网表名
•
col1, col2,col3,...:routeOfTrajectory表其他列名(可选)
示例:
1.
1.1.1.4.2 ST_TrajMapMatchtoProjection(item,jsonStr)
ST_TrajMapMatchtoProjection:将原始轨迹地图匹配到路网上,并返回每个映射点到原始轨迹的距离及路网相关信息
1. select ST_TrajMapMatchtoProjection(item, jsonStr) from <viewName>
Output输出:
•
与轨迹表保持一致,geom列变成了地图匹配后的点组成的LineString,st_series中分别有原始点的时间,原始点的lng,原始点的lat,原始点映射到对应路段的路段ID,映射点所在的match index(映射点在映射路段上的区间的index),原始点到映射点的垂直距离和映射点到映射路段起点的距离
参数:
•
item 轨迹字段名
•
rnTableName 要进行地图匹配的轨迹对应路网表名字
•
viewName 查询视图名
•
json 使用json格式来传入地图匹配的一些参数
Json参数解释:
•
mapMatcher两个参数必选,mapMatcher目前提供ivmm和tihmm两种算法选项,其他可选参数均为ivmm算法参数,ivmm算法目前效率较低,不建议使用。
Json参数示例:
1. {
2. "cityName": "guiyang_test ", --路网对应城市名
3. "beta(optional)": 4000.0, --(可选参数)
4. "candidateNumber": 8.0, --(可选参数)
5. "gpsErrorMean(optional)": 5.0, --(可选参数)
6. "gpsErrorStd(optional)": 15.0, --(可选参数)
7. "speedConstraint(optional)": true, --(可选参数)
8. "mapMatcher": "ivmm"
9. }
示例
1.
2.
3.
4.
5.
6.
1.1.1.4.3
自定义路网属性进行地图匹配
语法:
•
功能:
•
将用来地图匹配的路网对象中权重改为用户指定的字段
参数:
•
weight为路网表中的字段,默认做地图匹配时构建的路网对象权重是路段的长度。
示例:
1. SELECT st_trajMapMatchtoProjection(item, 'longgang_expand_rn'',{"mapMatcher": "tihmm","graphWeight": "weight"}) FROM chemical_mm_traj
1.1.1.4.4
提取 map match to route的信息
语法:
1. select
st_extractRoute(item,
rnTableName, col1, col2.... )
from viewName/tableName
功能:
•
参数:
•
•
•
示例:
2.
Output输出:
•
•
•
1.1.1.5 轨迹的驻留点检测
语法:
1. SELECT st_trajStayPoint(item, *json) FROM viewName
功能:
•
对轨迹驻留点进行检测
参数:
•
stayPointType:CLASSICDEFECTOR|DENSITYDEFECTOR ,默认为经典驻留点检测方法
•
maxStayDistInMeter:最大停留距离
•
minStayTimeInSecond:最短停留时间
1. select st_trajStayPoint(item, jsonStr)
2. from <trajectoryView>
3.
4. -- jsonStr是一个json字符串,用于指定驻留点检测方法。引擎目前提供两种方法:
5. -- 经典驻留点检测方法,默认方法
6. {
7. "stayPointType": "CLASSIC_DETECTOR",
8. "maxStayDistInMeter": 100, --最大停留距离
9. "minStayTimeInSecond": 600.0 --最短停留时间
10. }
11. -- 基于密度的驻留点检测方法
12. {
13. "stayPointType": "DENSITY_DETECTOR",
14. "maxStayDistInMeter": 15, --最大停留距离
15. "minStayTimeInSecond": 60.0 --最短停留时间
16. }
Output输出:
字段名 |
注释 |
id |
驻点的ID(命名规则根据原始轨迹ID + increment) |
tid |
原始轨迹ID |
oid |
原始轨迹Object ID |
start_time |
驻留点起始时间 |
end_time |
驻留点终止时间 |
convex_hull |
所有驻留点组成的凸包,几何形状,可能是点(如果只有一个驻留点),可能是LineString(所有驻留点没有闭合,组成的是一条线),可能是polygon) |
centroid |
所有驻留点组成凸包的中心 |
points_number |
为驻留点的gps点数量 |
1.1.1.6 关联查询
语法:
1.
功能:
•
从一个用户ID,起始时间段,时间间隔,空间索引属性,相似度的一些参数,返回特定相似的用户
参数:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
示例:
1. select
2. st_contactDetector('["zhongwang13331165660"]',
3. 0,
4. '2020-01-16
20:05:50',
5. '2020-02-06
20:05:50',
6. 60,
7. 7,
8. 0.5,
9. 'byGeohash')
10. from
11. epidemic_stat_china2
1.1.1.7 轨迹相似查询
语法:
1. select * from <trajectory_table> where item in st_trajSimilarity (st_maketrajectory(<wktSting>), <distanceMeasure>, <maxDistance>)
功能:
•
从轨迹表中查询出与给定轨迹对象最相似的所有轨迹
参数:
•
st_maketrajectory(<wktSting>):根据WKT字符串创建一条轨迹对象
•
distanceMeasure:距离算法常量,目前支持dtw、farfetch以及hausdorff
•
maxDistance:相似计算最大间隔距离
1.1.1.8 伴随关系查询
功能:
•
从一个用户ID,起始时间段,时间间隔,空间索引属性,相似度的一些参数,返回特定相似的用户的具体报点信息
示例
1. SELECT st_accompanyrelationship( '["952874","952847"]', 5, '2018-10-01 00:00:00', '2018-10-15 00:00:00', 60, 5, 0.5, 'byPoint', { "limit": 5, "geoHashFieldName" :"geohash7" } ) FROM fake_epid_table
1.1.1.9 轨迹表转点表
功能:
•
将轨迹表转为点表返回
语法:
1. SELECT st_TrajectoryToPoint() FROM viewName/tableName
示例
1. SELECT st_TrajectoryToPoint() FROM guiyangtraj