zachary 4 éve
szülő
commit
46ee814726
2 módosított fájl, 66 hozzáadás és 16 törlés
  1. 55 15
      components/map-sense/map-sense.js
  2. 11 1
      utils/util.js

+ 55 - 15
components/map-sense/map-sense.js

@@ -92,7 +92,7 @@ Component({
             // classfiy = {10003:[{},{},···],10002:[{},{},···],10001:[{},{},···]}
             // console.log('all',all)
             let classfiy = BeaconUtils.classification(all,'major')
-            let accuaryList = {}         // 存放处理后的accuary
+            let accuracyList = {}         // 存放处理后的accuary
             // let dataArr = []    //记录各信标的信号收集数目
             Object.keys(classfiy).forEach(key=>{
               //每个major的AveLength个元素数组,元素为rssi
@@ -126,27 +126,67 @@ Component({
               }
               // console.log('rssiArr',rssiArr);
               //时间加权后求rssi平均值
-              let aveOnTime = BeaconUtils.arrayAverage(rssiArr.slice(Math.floor(0,rssiArr.length / 2)).concat(rssiArr));
+              let aveOnTime = BeaconUtils.arrayAverage(rssiArr.slice(Math.floor(0,rssiArr.length / 5)).concat(rssiArr));
               // console.log('aveOnTime',aveOnTime)
               //测距
             
               classfiy[key].forEach(item=>{
                   item.accuracy = BeaconUtils.calculateAccuracy(TXPOWER,aveOnTime,N)
-                  if(!accuaryList[key]){
+                  if(!accuracyList[key]){
                     //如果还没有对应的“信标号”
-                    accuaryList[key] = [item.accuracy]
+                    accuracyList[key] = [item.accuracy]
                   }
-                  accuaryList[key].push(item.accuracy)
+                  accuracyList[key].push(item.accuracy)
                   // console.log('item',item)
               })
               
               // dataArr.push(classfiy[key].length)
               
             })
-            console.log(classfiy['10001'])
-            console.log(classfiy['10002'])
-            console.log(classfiy['10003'])
+            // console.log(classfiy['10001'])
+            // console.log(classfiy['10002'])
+            // console.log(classfiy['10003'])
             
+            // 筛选器,筛选出配对的一组信标
+            let aveAccuracys = new Map()                  //信标的平均距离,用于判断是否在范围内
+            let matchSigns = []                   //匹配的信号
+            let prologue = ['1000110002']         //序厅
+            let annexHall = ['1000310004']                    //附厅
+            let mainHall = ['1000510006']                     //主厅
+            let area = [prologue,annexHall,mainHall]
+            const R = 3.8                         //设定范围半径
+            Object.keys(accuracyList).forEach(key=>{
+              let aveAccuracy = BeaconUtils.arrayAverage(accuracyList[key])
+              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
+                }
+              }else if(aveAccuracys.has(String(num + 1))){
+                num++
+                result = key + num
+                break
+              }
+              
+            }
+            console.log('result',result);
+            for(let i = 0; i < area.length; ++i){
+              if(area[i].includes(result)){
+                console.log(i)
+              }
+            }
+
+
             // 计算方差
             //计算平均数
             // let x = BeaconUtils.arrayAverage(dataArr)
@@ -157,13 +197,13 @@ Component({
             // 定位
             // 将三个信标构成直角三角形,其中10002号信标为直角,10001号为基点
             // 根据挡位设定相邻顶点信标的距离,5档,设边长为10m
-            let sideLength = 5
-            let distance1,distance2,distance3      //分别对应游客到信标10001,1002,10003的距离
-            distance1 = BeaconUtils.arrayAverage(accuaryList['10001'])
-            distance2 = BeaconUtils.arrayAverage(accuaryList['10002'])
-            distance3 = BeaconUtils.arrayAverage(accuaryList['10003'])
-            let px = (Math.pow(2.8,2) - Math.pow(distance2,2) + Math.pow(distance1,2)) / (2.8 * 2)
-            let py = (Math.pow(5.6,2) - Math.pow(distance3,2) + Math.pow(distance2,2)) / (5.6 * 2)
+            // let sideLength = 5
+            // let distance1,distance2,distance3      //分别对应游客到信标10001,1002,10003的距离
+            // distance1 = BeaconUtils.arrayAverage(accuracyList['10001'])
+            // distance2 = BeaconUtils.arrayAverage(accuracyList['10002'])
+            // distance3 = BeaconUtils.arrayAverage(accuracyList['10003'])
+            // let px = (Math.pow(2.8,2) - Math.pow(distance2,2) + Math.pow(distance1,2)) / (2.8 * 2)
+            // let py = (Math.pow(5.6,2) - Math.pow(distance3,2) + Math.pow(distance2,2)) / (5.6 * 2)
             // console.log('px',px,' py',py)
 
             this.setData({

+ 11 - 1
utils/util.js

@@ -103,7 +103,17 @@ getOneGuassionArray: function(size, kerR, sigma) {
   //js实现字符串重复的repeat函数
   repeat:function(src, n) {
     return (new Array(n + 1)).join(src);
-}
+  },
+
+  //计算椭圆长度
+  //R是预设的有效范围半径
+  //L是椭圆长度
+  getLR:function(R,L){
+    let d = L - R 
+    let r = (R - d) / 2
+    let h = r + d
+    return 2*Math.pow((R*R - h*h),0.5)
+  }
 }
 
 module.exports = {