From fe090f3f0d4d135622d631f1798b9414d6bd81cf Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期三, 20 十一月 2019 16:35:50 +0800 Subject: [PATCH] 事件推送改造 --- ruleserver/geoPolygon.go | 29 ++++++++++++----------------- 1 files changed, 12 insertions(+), 17 deletions(-) diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go index 0fe02db..bb74b6c 100644 --- a/ruleserver/geoPolygon.go +++ b/ruleserver/geoPolygon.go @@ -2,6 +2,7 @@ import ( "math" + "ruleprocess/structure" ) func min(num1 float64, num2 float64) float64 { @@ -17,12 +18,6 @@ return num2 } return num1 -} - -//Point 鍧愭爣鐐� -type Point struct { - X float64 `json:"x"` - Y float64 `json:"y"` } //Rect 妫�娴嬬洰鏍� @@ -42,7 +37,7 @@ //PintIsInPolygon 鍒ゆ柇鐐规槸鍚﹀湪澶氳竟褰㈠唴閮� //point涓鸿鍒ゆ柇鐨勫潗鏍囩偣 //polygon鏄杈瑰舰鍚勭偣鏁扮粍 -func pintIsInPolygon(point Pointfloat, polygon []Point, widthScale float64, heightScale float64) bool { +func PintIsInPolygon(point structure.Pointfloat, polygon []structure.Point, widthScale float64, heightScale float64) bool { var nCross int = 0 for i := 0; i < len(polygon); i++ { @@ -72,17 +67,17 @@ } //GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉� -func getLocation(rect Rect, n int) ([]Pointfloat, float64) { +func GetLocation(rect structure.Rect, n int) ([]structure.Pointfloat, float64) { xArr := make([]float64, n) // 鐢ㄥ垏鐗囦笉鐢ㄦ暟缁勶紝鏁扮粍涓嶈兘鐢ㄥ彉閲忓畾涔夐暱搴� yArr := make([]float64, n) - pointArr := make([]Pointfloat, 0, n*n) + pointArr := make([]structure.Pointfloat, 0, n*n) for i := 0; i < n; i++ { xArr[i] = rect.X + (rect.Width/float64(2*n))*float64(2*i+1) yArr[i] = rect.Y + (rect.Height/float64(2*n))*float64(2*i+1) } for i := 0; i < n; i++ { for j := 0; j < n; j++ { - point := Pointfloat{X: xArr[i], Y: yArr[j]} + point := structure.Pointfloat{X: xArr[i], Y: yArr[j]} pointArr = append(pointArr, point) } } @@ -91,7 +86,7 @@ } //ComputePolygonArea 璁$畻浠绘剰澶氳竟褰㈤潰绉� -func computePolygonArea(polygon []Point) float64 { +func ComputePolygonArea(polygon []structure.Point) float64 { pointNum := len(polygon) var s float64 = 0 if pointNum < 3 { @@ -105,22 +100,22 @@ } //PgsInterPercent calculate percent of two polygon intersection 璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮 -func PgsInterPercent(pgpts []Point, box Rect, widthScale float64, heightScale float64) (percent float64) { +func PgsInterPercent(pgpts []structure.Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { - areapts, areaBox := getLocation(box, 10) + areapts, areaBox := GetLocation(box, 10) var count = 0 for _, pts := range areapts { - if pintIsInPolygon(pts, pgpts, widthScale, heightScale) { + if PintIsInPolygon(pts, pgpts, widthScale, heightScale) { count++ } } perInterBox := float64(count) / float64(len(areapts)) // 閲嶅悎闈㈢Н鍗犵煩褰㈢殑姣斾緥 areaInter := perInterBox * areaBox - areaPg := computePolygonArea(pgpts) + areaPg := ComputePolygonArea(pgpts) perInterPg := areaInter / areaPg // 閲嶅悎闈㈢Н鍗犲杈瑰舰鍖哄煙鐨勬瘮渚� // 鍝釜鍗犵殑姣斾緥澶ф寜鍝釜璁$畻 if perInterBox > perInterPg { - return perInterBox + return (perInterBox*100) } - return perInterPg + return (perInterPg*100) } -- Gitblit v1.8.0