程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 用存儲過程判斷某個人員在一天的行進軌跡中是否有超過指定時間的停留

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

編輯:Oracle教程

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


用存儲過程判斷某個人員在一天的行進軌跡中是否有超過指定時間的停留   1.問題描述   在某項目中,巡更人員的手持GPS會每隔固定時間將此時人員所在位置上報至總數據庫中。現在,我們需要知道指定人員在規定的時間內,是否有在某個點處停留超過20分鐘的行為。   2.分析   首先,停留並不能理解為兩點完全重合為停留。GPS坐標本身會有偏移和誤差;並且在某個范圍內無意義的移動也不能理解為有效的移動。   其次,代碼上應該盡量提高通用度,將距離容差范圍、時間容差范圍、查詢人員、查詢時間段均應該設置為可控參數。   最後,作為統計需求,在無法進行每次上報位置時就進行實時判斷的情況下,寫成存儲過程效率會比較高些。   3.具體實現

4.優化   以上方案,是屬於後發型統計行為,試想如果我要統計一周的情況,一個人員一周能上報幾十萬個軌跡點,在最壞的情況下,統計一個人員的循環遍歷次數就要超過幾十萬次。   如果選擇優化,優化的方向可以是將壓力分散到每次上報時就進行判斷。   我們以需要統計一周的停留超過預定時間人員來假設,具體思路如下:   A.建立一張每周定時情況的表,表名叫做tchumanweekstaycheck。此表可以包含兩個字段:humanID和checked。用來記錄這一周內哪些人員是的軌跡是不符合需求的。建立時,將所有人員編號均錄入到此表,並且所有checked字段均是true。   B.上報軌跡點時,首先去tchumanweekstaycheck表中尋找該humanID對應的checked是否為false。   如果是,表示該人員已經有不符合規定的停留出現了,然後將該人員手持設備中的判斷停留參數設置為false,下次上報案卷時不再進行停留判斷,提高效率(判斷已無意義)。   如果否,表示該人員一直合乎要求,然後將此坐標與之前的該人員坐標進行判斷,如果有停留,記錄停留時間。如果沒停留,不記錄停留時間。整個邏輯,和上面存儲過程描述的邏輯相似。   C.當某個人員上報位置時,進行了停留判斷,並且判斷出此點出現了超過預設時間的停留,則將tchumanweekstaycheck表中對應的humanID的checked值變為false。   D.查看tchumanweekstaycheck即可知道哪些人員出現了超出停留時間。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved