panlei
2019-11-13 1d9804998f955e7d713d24ae719c757c0be73993
algorithm/static/static.go
@@ -113,12 +113,17 @@
      return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
   } else {
      flag := "false"
      // 以之前静止的对象为主判断是否静止
      tars := []*structure.Arg{}
      for _, tar := range structure.StaticMap[am.AreaId].Targets {
         singleResult := SingleStatic(tar,am,lable,90)
         singleResult,arg := SingleStatic(tar,am,lable,90)
         if singleResult {
            flag = "true"
            tars = append(tars,arg)
         }
      }
      // 把满足条件的目标放进areaMap中
      am.AlarmObj = tars
      // 更新数据,把新来的数据写入缓存
      objs := []*structure.Obj{}
      for _, tar := range am.FilterData {
@@ -153,11 +158,13 @@
}
// 判断一个目标是否静止了指定时间
func SingleStatic(person *structure.Obj, am *structure.AreaMap,lable *structure.Others, argValue float64) bool{
func SingleStatic(person *structure.Obj, am *structure.AreaMap,lable *structure.Others, argValue float64) (bool,*structure.Arg){
   flag := false
   var o *structure.Arg = nil
   for _, obj := range am.FilterData {
      if person.Id == obj.Id {
         coincidenceDegree := PgsInterPercent(Rect2Point(person.Location), obj.Location, 1, 1)
         o = obj
         if coincidenceDegree >= argValue {
            flag = true
         }
@@ -166,13 +173,13 @@
   if flag { // 有一个对象保持静止(id相等并且重合度高于阈值)
      flagTime := TimerAlarm(lable,person,flag,am.AreaId)
      if flagTime == "10" || flagTime == "11" {
         return flag
         return flag,o
      } else {
         return false
         return false,o
      }
   } else {
      TimerAlarm(lable,person,flag,am.AreaId)
      return flag
      return flag,o
   }
}
var rw sync.RWMutex