用存储过程判断某我的员在一天的行进轨迹中是否有超过指定时间的停留

文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/数据库

1.问题描述

在某项目中,巡更人员的手持GPS会每隔固定时间将此时人员所在位置上报至总数据库中。如今,咱们须要知道指定人员在规定的时间内,是否有在某个点处停留超过20分钟的行为。微信

2.分析

首先,停留并不能理解为两点彻底重合为停留。GPS坐标自己会有偏移和偏差;而且在某个范围内无心义的移动也不能理解为有效的移动。优化

其次,代码上应该尽可能提升通用度,将距离容差范围、时间容差范围、查询人员、查询时间段均应该设置为可控参数。blog

最后,做为统计需求,在没法进行每次上报位置时就进行实时判断的状况下,写成存储过程效率会比较高些。get

3.具体实现

     

    

                          

4.优化

以上方案,是属于后发型统计行为,试想若是我要统计一周的状况,一我的员一周能上报几十万个轨迹点,在最坏的状况下,统计一我的员的循环遍历次数就要超过几十万次。博客

若是选择优化,优化的方向能够是将压力分散到每次上报时就进行判断。效率

咱们以须要统计一周的停留超过预约时间人员来假设,具体思路以下:循环

A.创建一张每周定时状况的表,表名叫作tchumanweekstaycheck。此表能够包含两个字段:humanID和checked。用来记录这一周内哪些人员是的轨迹是不符合需求的。创建时,将全部人员编号均录入到此表,而且全部checked字段均是true。遍历

B.上报轨迹点时,首先去tchumanweekstaycheck表中寻找该humanID对应的checked是否为false。im

若是是,表示该人员已经有不符合规定的停留出现了,而后将该人员手持设备中的判断停留参数设置为false,下次上报案卷时再也不进行停留判断,提升效率(判断已无心义)。

若是否,表示该人员一直合乎要求,而后将此坐标与以前的该人员坐标进行判断,若是有停留,记录停留时间。若是没停留,不记录停留时间。整个逻辑,和上面存储过程描述的逻辑类似。

C.当某我的员上报位置时,进行了停留判断,而且判断出此点出现了超过预设时间的停留,则将tchumanweekstaycheck表中对应的humanID的checked值变为false。

D.查看tchumanweekstaycheck便可知道哪些人员出现了超出停留时间。

 

                                                                                   -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                                            若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                      

相关文章
相关标签/搜索