开发者社区 > 博文 > 【JUSTQL Reference】DAL介绍之轨迹操作
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

【JUSTQL Reference】DAL介绍之轨迹操作

  • 京东城市JUST团队
  • 2021-01-26
  • IP归属:未知
  • 107480浏览

1.1.1 轨迹操作

1.1.1.1 轨迹插值

支持三种轨迹插值方法,分别为为启发式插值、自由欧式空间插值和map match插值

1.1.1.1.1 自由欧式空间插值

语法

1.   select ST_FreespaceInterpolation(item, timeInterval) from <viewName> 

功能

          给定轨迹以及固定的时间间隔,根据原始轨迹点,对轨迹进行插值,保证插值后的每个轨迹点的时间间隔为传入的固定时间间隔

参数:

          item 轨迹列名

          timeInterval 时间间隔(Double

示例:

1.   select  

2.     ST_FreespaceInterpolation(item, 30)  

3.   from  

4.     trajectory_query_test  

1.1.1.1.2 启发式插值

语法

1.   select ST_HeuristicInterpolation(item, WKTString) from <viewName>  

功能

          预知某段轨迹必定经过某些点,将这些点插入到轨迹中

参数

          item 轨迹列名

          wktString 轨迹会经过的点组成的LineStringWKTString

示例

1.   select  

2.     ST_HeuristicInterpolation(  

3.       item,  

4.       'LineString(120.835533 32.0177333, 120.857647 32.016444, 120.799461 32.046056, 120.7994972 32.05144769)'  

5.     )  

6.   from  

7.     interpolation_traj  

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.            -- 由分段的位置点组成的lineStringWKT

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.     启发式过滤方法:即根据相邻两个GPS点的时间和距离计算轨迹的瞬时速度。a)若瞬时速度大于某给定阈值(如100/秒),则认为该点是轨迹异常点,将被直接删除;b)若轨迹长度小于某给定阈值,则直接该条轨迹直接被删除

1.   --启发式过滤方法  

2.   {  

3.     "@type""HEURISTIC_FILTER",     --方法名    

4.     "maxSpeedMeterPerSecond": 100.0, --每秒最大速度,超过的算异常值    

5.     "minTrajLengthInKM": 1   --最小轨迹长度,若轨迹长度小于该值,直接删除   

6.   }  

3.     过滤方法

1.   {  

2.     "@type""ST_MBR_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.   "minTrajLengthInKM": 1    --最小轨迹长度,若轨迹长度小于该值,直接删除    

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.  select ST_TrajMapMatchtoRoute(item, jsonStr) from <viewName> 

Output输出

          oidtidtimeend_timestart_position, end_position与原始轨迹保持一致,geom列变成了包含地图匹配后的轨迹经过所有的路段的polygon 新增一列routes(地图匹配后的轨迹经过的所有的route合集,每一个route对应一个路段,以及进入和离开该路段的时间)

为方便用户将toRoute地图匹配后的完整行驶路径提取出来,JUST还内置了方法:st_extractRoute(),支持routeOfTrajectory表中routes映射到路网形成一条完整行驶路径的LinsString,可选择其他列一起返回

语法:

1.  select st_extractRoute(item, rnTableName, col1, col2,... ) FROM viewName/tableName

参数

          itemrouteOfTrajectory字段名,必填

          rntableNamemap match得到routeOfTrajectory的路网表名

          col1, col2,col3,...routeOfTrajectory表其他列名(可选)

示例

1.  select st_extractRoute(item, 'longgang_rn', oid, tid, time ) FROM routeTable

1.1.1.4.2 ST_TrajMapMatchtoProjection(item,jsonStr)

ST_TrajMapMatchtoProjection将原始轨迹地图匹配到路网上,并返回每个映射点到原始轨迹的距离及路网相关信息

1.   select ST_TrajMapMatchtoProjection(item, jsonStr) from <viewName>   

Output输出

          与轨迹表保持一致,geom列变成了地图匹配后的点组成的LineStringst_series中分别有原始点的时间,原始点的lng,原始点的lat,原始点映射到对应路段的路段ID,映射点所在的match index(映射点在映射路段上的区间的index),原始点到映射点的垂直距离和映射点到映射路段起点的距离

参数:

          item 轨迹字段名

          rnTableName 要进行地图匹配的轨迹对应路网表名字

          viewName 查询视图名

          json 使用json格式来传入地图匹配的一些参数

Json参数解释:

          mapMatcher两个参数必选,mapMatcher目前提供ivmmtihmm两种算法选项,其他可选参数均为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.       SELECT

2.           st_trajMapMatchtoProjection(item,

3.           'beijing_rn',

4.           {"mapMatcher": "tihmm"})

5.       FROM

6.           trajectory_query_test

1.1.1.4.3 自定义路网属性进行地图匹配

语法

          在原本地图匹配的Json中多传入一个graphWeight参数

功能

          将用来地图匹配的路网对象中权重改为用户指定的字段

参数

          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

功能

          route of trajectory表(map match to route的结果)进行转换,提取出所有route组成的linestring,同时用户可添加route of trajectory表中的其他字段

参数

          Item route of trajectory 字段名

          rnTableName 得到route of trajectory对应路网表名字

          col1, col2…. 用户想要与route组成路径一起返回的原始route of trajectory的其他字段

示例

2.   SELECT st_extractRoute( (item, 'longgang_rn'', oid, tid) FROM chemical_mm_traj  

Output输出

          第一列: ‘path’ 所有route组成的lineString

          第二列: ‘oid’, 原始route of trajectory表中的oid字段

          第三列: ‘tid’ , 原始route of trajectory表中的tid字段

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.   SELECT st_st_contactDetector(ID, k, startTime, endTime,timeInterval, geohashLength, lambda, geom, Json)   

功能

          从一个用户ID,起始时间段,时间间隔,空间索引属性,相似度的一些参数,返回特定相似的用户

参数

1.   st_contactdetector(  

2.              sourceID, --用户ID  

3.              k, --相似度入参,取值范围[0,1]。值越小相似度越低,返回结果数越多  

4.              startTime, --开始时间  

5.              endTime, --结束时间  

6.              timeInterval, --时间间隔,单位为分钟  

7.              hashLength, -- geohash长度,建议采用geohash7  

8.              lambda, --相似度计算入参,取值范围[0,1]。相似度计算与接触次数cnt以及接触时间time相关。取值与接触次数权重成正比,与接触时间成反比  

9.              geom, --地理位置取值,枚举类型。仅支持byPoint | byGeoHash两类  

10.            jsonParams -- json字符串  

11. )  

12. -- jsonParams是一个json字符串,用于指定入参列名。非必填参数,不设置则使用默认字段名  

13. {  

14.            "sourceID": sourceID, --用户ID  

15.            "pointFieldName": point, -- geom指定列,byPoint时指定  

16.            "geohashFieldName": geohash, --geom自定列,byGeohash时指定  

17.            "startTName": startTime, --开始时间  

18.            "endTName": endTime, --结束时间  

19.            "time"time--接触时间  

20.            "cntTName": cnt -- 接触次数  

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:距离算法常量,目前支持dtwfarfetch以及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

共0条评论