package ruleserver
|
|
import (
|
"basic.com/pubsub/protomsg.git"
|
"ruleprocess/cache"
|
"basic.com/valib/logger.git"
|
"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)
|
}
|