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) }