|
@@ -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({
|