用存儲過程判斷某我的員在一天的行進軌跡中是否有超過指定時間的停留

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處: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/

                                                                                            若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                      

相關文章
相關標籤/搜索