From 0d5aa709503ad0cb03c0c71a5fc23b5174f4fb50 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 19 十一月 2019 11:51:53 +0800
Subject: [PATCH] ---
---
ruleserver/geoPolygon.go | 24 +++++++++---------------
1 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go
index 7421add..bb74b6c 100644
--- a/ruleserver/geoPolygon.go
+++ b/ruleserver/geoPolygon.go
@@ -20,12 +20,6 @@
return num1
}
-//Point 鍧愭爣鐐�
-type Point struct {
- X float64 `json:"x"`
- Y float64 `json:"y"`
-}
-
//Rect 妫�娴嬬洰鏍�
type Rect struct {
X float64
@@ -43,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++ {
@@ -73,17 +67,17 @@
}
//GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉�
-func getLocation(rect structure.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)
}
}
@@ -92,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 {
@@ -106,18 +100,18 @@
}
//PgsInterPercent calculate percent of two polygon intersection 璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮
-func PgsInterPercent(pgpts []Point, box structure.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 {
--
Gitblit v1.8.0