瀏覽代碼

tx=-55,n=3.3

zachary 4 年之前
父節點
當前提交
f45b525e20
共有 2 個文件被更改,包括 33 次插入41 次删除
  1. 21 41
      components/map-sense/map-sense.js
  2. 12 0
      utils/util.js

+ 21 - 41
components/map-sense/map-sense.js

@@ -18,7 +18,7 @@ const STATUS_PIC = {
 const TXPOWER = -55
 
 // 距离经验值(调试所得)
-const N = 4
+const N = 3.3
 
 
 let AveLength = 10
@@ -148,55 +148,35 @@ Component({
               // dataArr.push(classfiy[key].length)
               
             })
-            // console.log('10001',classfiy['10001'])
-            // console.log('10002',classfiy['10002'])
-            // console.log('10003',classfiy['10003'])
-            // console.log(classfiy)
+
             
             // 筛选器,筛选出配对的一组信标
-            let aveAccuracys = new Map()                  //信标的平均距离,用于判断是否在范围内
-            let matchSigns = []                   //匹配的信号
-            let prologue = ['1000110002']         //序厅
-            let annexHall = ['1000310004']                    //附厅
-            let mainHall = ['1000510006']                     //主厅
-            let area = [prologue,annexHall,mainHall]
-            const R = 3                         //设定范围半径
+            let signSelect = [0,0,0];           //记录各组的信标出现数量,投票选择最多的,以此是prologue,annexHall,mainHall
+            let prologue = ['10001','10002']         //序厅
+            let annexHall = ['10003','10004']                    //附厅
+            let mainHall = ['10005','10006']                     //主厅
+            const R = 6                         //设定范围半径
             Object.keys(accuracyList).forEach(key=>{
               let aveAccuracy = BeaconUtils.arrayAverage(accuracyList[key])
               // console.log(key,aveAccuracy)
-              let record = {'id':'10001','distance':aveAccuracy}
-              json.push(record)
-              if(json.length == 500){
-                console.log(JSON.stringify(json))
-              }
+              // let record = {'id':'10001','distance':aveAccuracy}
+              // json.push(record)
+              // if(json.length >= 350){
+              //   console.log(JSON.stringify(json))
+              // }
               if(aveAccuracy < R){
-                aveAccuracys.set(key,aveAccuracy)
-              }
-            })
-            //理想情况下只有两个信标的信号,刚好匹配为一组
-            //判断编号是奇数偶数
-            let result = ''
-            for(let key of aveAccuracys.keys()){
-              let num = parseInt(key)
-              if(num % 2 == 0){
-                if(aveAccuracys.has(String(num - 1))){
-                  num--
-                  result = key + num
-                  break
+                if(prologue.includes(key)){
+                  signSelect[0] += 1;
+                }else if(annexHall.includes(key)){
+                  signSelect[1] += 1;
+                }else if(mainHall.includes(key)){
+                  signSelect[2] += 1;
                 }
-              }else if(aveAccuracys.has(String(num + 1))){
-                num++
-                result = key + num
-                break
               }
-              
-            }
+            })
+            //对小于预设半径的信号进行数量投票
+            let result = BeaconUtils.maxIndex(signSelect);
             console.log('result',result);
-            for(let i = 0; i < area.length; ++i){
-              if(area[i].includes(result)){
-                console.log(i)
-              }
-            }
             this.setData({
               classfiy,
               status:'2'

+ 12 - 0
utils/util.js

@@ -113,6 +113,18 @@ getOneGuassionArray: function(size, kerR, sigma) {
     let r = (R - d) / 2
     let h = r + d
     return 2*Math.pow((R*R - h*h),0.5)
+  },
+
+  //返回数组中最大值的下标
+  maxIndex:function(arr){
+    let index = -1,max = arr[0];
+    for(let i = 0;i < arr.length; i++){
+      if(arr[i] >= max){
+        index = i;
+        max = arr[i];
+      }
+    }
+    return index;
   }
 }