---
panlei
2019-11-26 2a9fb82298812743d13e7e590aa08ec94ac9c085
ruleserver/pushPolygonForTrack.go
New file
@@ -0,0 +1,116 @@
package ruleserver
import (
   "basic.com/pubsub/protomsg.git"
   "ruleprocess/cache"
   "ruleprocess/logger"
   "ruleprocess/structure"
   "github.com/kirinlabs/HttpRequest"
   "strconv"
)
type CameraPolygon struct {
   CameraId string
   CameraAddr string
   Rtsp string
   Area []Polygon
}
type Polygon struct {
   CameraId string
   CameraAddr string
   Polygon []structure.Point
}
var camps []CameraPolygon
func Handle () {
   taskRules := cache.GetCameraTaskRulesAll()
   for _,taskRule := range taskRules {
      for _,groupRule := range taskRule.GroupRules {
         for _,rule := range groupRule.Rules {
            camp := GetCameraPolygon(rule,groupRule)
            camps = append(camps,*camp)
         }
      }
   }
}
func GetCameraPolygon(rule *protomsg.Rule,groupRule *protomsg.GroupRule) *CameraPolygon{
   if rule.SdkId == "标定算法的id" {
      // 得到标定算法的区域
      cameraPolygon := new(CameraPolygon)
      polygon := cache.GetPolygonsById(rule.PolygonId)
      cameraPolygon.CameraId = rule.CameraId
      camera,err := cache.GetCameraById(rule.CameraId)
      if err != nil {
         logger.Error("查询摄像机信息失败!",err)
      }
      cameraPolygon.CameraAddr = camera.Addr
      cameraPolygon.Rtsp = camera.Rtsp
      if rule.SdkArgAlias == "全景摄像机" { // 塞的是自己的区域
         polygon1 := new(Polygon)
         polygon1.Polygon = Json2points(polygon.Polygon)
         polygon1.CameraId = rule.CameraId
         polygon1.CameraAddr = camera.Addr
         cameraPolygon.Area = append(cameraPolygon.Area,*polygon1)
      } else { // 塞的是与之相关的全景摄像机的区域
         for _,rule := range groupRule.Rules {
            if rule.SdkArgAlias == "全景摄像机" {
               polygon1 := new(Polygon)
               polygon1.Polygon = Json2points(polygon.Polygon)
               polygon1.CameraId = rule.CameraId
               polygon1.CameraAddr = camera.Addr
               cameraPolygon.Area = append(cameraPolygon.Area,*polygon1)
            }
         }
      }
      return cameraPolygon
   } else {
      return nil
   }
}
func Struct2JsonString(camps []CameraPolygon) string{
   str := "["
   for index,cam := range camps {
      str1 := "{\"CameraId\":\""+cam.CameraId+"\",\"CameraAddr\":"+cam.CameraAddr+"\",\"Rtsp\":\""+cam.Rtsp+"\",\"Area\":\"["
      for j,ar := range cam.Area {
         str2 := "{\""+ar.CameraId+"\": {\"area\": ["
         for i,point := range ar.Polygon {
            str3 := ""
            if i < len(ar.Polygon) - 1 {
               str3 = "{\"coordinate\": {\"x\": \""+strconv.FormatFloat(point.X, 'f', -1, 64)+"\",\"y\": \""+strconv.FormatFloat(point.Y, 'f', -1, 64)+"\"}},"
            } else { // 最后一个结构体不加逗号
               str3 = "{\"coordinate\": {\"x\": \""+strconv.FormatFloat(point.X, 'f', -1, 64)+"\",\"y\": \""+strconv.FormatFloat(point.Y, 'f', -1, 64)+"\"}}"
            }
            str2 += str3
         }
         if j < len(cam.Area) - 1{
            str2 += "]}},"
         } else {
            str2 += "]}}"
         }
         str1 += str2
      }
      str += str1
      if index < len(camps) - 1{
         str += "]},"
      } else {
         str += "]}"
      }
   }
   str += "]"
   return str
}
func PushPolygon() string{
   Handle()
   param := Struct2JsonString(camps)
   req := HttpRequest.NewRequest()
   res,err := req.JSON().Post("http://192.168.20.109:7011/tracking/get_region",param)
   body,err := res.Body()
   if err != nil {
      return "请求失败"+err.Error()
   }
   return string(body)
}