Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
F
fpbuilder_ble
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jaehyu
fpbuilder_ble
Commits
bdc2aec4
Commit
bdc2aec4
authored
Dec 05, 2016
by
jaehyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implementing of building of fp_ble_data table (fingerprinting) is done.
parent
d28bc3ca
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
143 additions
and
91 deletions
+143
-91
src/main/java/com/skt/ehs/mbs/db/maria/dao/FPBLEBuildDAO.java
...main/java/com/skt/ehs/mbs/db/maria/dao/FPBLEBuildDAO.java
+1
-1
src/main/java/com/skt/ehs/mbs/fpbuilder/BLEFPBuilder.java
src/main/java/com/skt/ehs/mbs/fpbuilder/BLEFPBuilder.java
+129
-77
src/main/resources/db/maria/mapper/FPBLEBuildMapper.xml
src/main/resources/db/maria/mapper/FPBLEBuildMapper.xml
+13
-13
No files found.
src/main/java/com/skt/ehs/mbs/db/maria/dao/FPBLEBuildDAO.java
View file @
bdc2aec4
...
...
@@ -22,6 +22,6 @@ public interface FPBLEBuildDAO {
@Param
(
"ble_cell_coordi_x2"
)
int
ble_cell_coordi_x2
,
@Param
(
"ble_cell_coordi_y2"
)
int
ble_cell_coordi_y2
);
void
insertFpBle
Data
(
Map
<
String
,
Object
>
map
);
void
listInsertFPBLE
Data
(
Map
<
String
,
Object
>
map
);
void
deleteFpBleData
(
int
cell_id
);
}
\ No newline at end of file
src/main/java/com/skt/ehs/mbs/fpbuilder/BLEFPBuilder.java
View file @
bdc2aec4
...
...
@@ -71,20 +71,20 @@ public class BLEFPBuilder {
private
static
void
insertFPCellPerAP
(
List
<
FPElement
>
fp_cell_per_ap
)
{
MariaConnectionManager
mngr
=
MariaConnectionManager
.
getInstance
();
// transform list to map
// transform list to map
to insert list of object
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"
list
"
,
fp_cell_per_ap
);
map
.
put
(
"
fp_cell_per_ap
"
,
fp_cell_per_ap
);
try
(
SqlSession
session
=
mngr
.
getSqlSessionFactory
().
openSession
())
{
FPBLEBuildDAO
mapper
=
session
.
getMapper
(
FPBLEBuildDAO
.
class
);
mapper
.
insertFpBle
Data
(
map
);
mapper
.
listInsertFPBLE
Data
(
map
);
session
.
commit
();
}
}
private
static
void
deleteFPCell
PerAP
(
int
cell_id
)
{
private
static
void
deleteFPCell
(
int
cell_id
)
{
MariaConnectionManager
mngr
=
MariaConnectionManager
.
getInstance
();
try
(
SqlSession
session
=
mngr
.
getSqlSessionFactory
().
openSession
())
{
...
...
@@ -108,6 +108,62 @@ public class BLEFPBuilder {
return
ret
;
}
private
class
rssiDirBound
{
private
int
lower_rssi_dir
;
private
int
upper_rssi_dir
;
private
int
_rssi_dir
;
rssiDirBound
(
int
rssi_dir
,
int
lower
,
int
upper
)
{
_rssi_dir
=
rssi_dir
;
lower_rssi_dir
=
lower
;
upper_rssi_dir
=
upper
;
}
public
int
get_rssi_dir
()
{
return
_rssi_dir
;
}
public
int
get_lower_rssi_dir
()
{
return
lower_rssi_dir
;
}
public
int
get_upper_rssi_dir
()
{
return
upper_rssi_dir
;
}
}
private
rssiDirBound
normalizeRssiDir
(
int
rssi_dir
)
{
rssiDirBound
ret
=
null
;
switch
(
rssi_dir
)
{
case
1000000
:
// North
ret
=
new
rssiDirBound
(
rssi_dir
,
-
23
,
23
);
break
;
case
2000000
:
// North East
ret
=
new
rssiDirBound
(
rssi_dir
,
22
,
68
);
break
;
case
3000000
:
//East
ret
=
new
rssiDirBound
(
rssi_dir
,
67
,
113
);
break
;
case
4000000
:
//South East
ret
=
new
rssiDirBound
(
rssi_dir
,
112
,
158
);
break
;
case
5000000
:
//South
ret
=
new
rssiDirBound
(
rssi_dir
,
157
,
-
157
);
break
;
case
6000000
:
//South West
ret
=
new
rssiDirBound
(
rssi_dir
,-
158
,
-
112
);
break
;
case
7000000
:
// West
ret
=
new
rssiDirBound
(
rssi_dir
,-
113
,
-
67
);
break
;
case
8000000
:
// North West
ret
=
new
rssiDirBound
(
rssi_dir
,-
68
,
-
22
);
break
;
default
:
break
;
}
return
ret
;
}
public
boolean
build
()
{
// Todo read from Console or Database
...
...
@@ -122,80 +178,76 @@ public class BLEFPBuilder {
System
.
out
.
println
(
"scale_pixel : "
+
scale_pixel
);
mFloor
.
setMap_scale_pixel
(
scale_pixel
);
/*********************** Todo Loop of loop here ... *************************************/
// 수집방향 맵 준비
int
[]
temp
=
mFloor
.
loadRSSIDir
();
System
.
out
.
println
(
Arrays
.
toString
(
temp
));
/* Todo 8분위 되어 있는 기준값을 단말기에서 올려주는 값의 범위로 바꾸어 사용할 수 있도록 준비
switch case 사용
*/
int
rssi_dir
=
temp
[
0
];
System
.
out
.
println
(
"RSSI_DIR : "
+
rssi_dir
);
// location coordinate 준비
int
M
=
3
;
int
N
=
5
;
ble_cell_id
=
mFloor
.
getBLECell
(
M
,
N
).
get_id
();
System
.
out
.
printf
(
"floor_id : %d, building_id : %d, campus_id : %d, ble_cell_id : %d, rssi_dir : %d,"
,
floor_id
,
building_id
,
campus_id
,
ble_cell_id
,
rssi_dir
);
System
.
out
.
printf
(
" ble_cell_location : ("
+
mFloor
.
getBLECell
(
M
,
N
).
get_location_x
()+
", "
+
mFloor
.
getBLECell
(
M
,
N
).
get_location_y
()+
")"
);
System
.
out
.
println
();
int
coordinate_pixel_x1
=
(
mFloor
.
getBLECell
(
3
,
5
).
get_location_x
()
-
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
int
coordinate_pixel_y1
=
(
mFloor
.
getBLECell
(
3
,
5
).
get_location_y
()
-
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
int
coordinate_pixel_x2
=
(
mFloor
.
getBLECell
(
3
,
5
).
get_location_x
()
+
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
int
coordinate_pixel_y2
=
(
mFloor
.
getBLECell
(
3
,
5
).
get_location_y
()
+
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
System
.
out
.
printf
(
"Pixel Coordinate : ("
+
coordinate_pixel_x1
+
", "
+
coordinate_pixel_y1
+
") ("
+
coordinate_pixel_x2
+
", "
+
coordinate_pixel_y2
+
")"
);
System
.
out
.
println
();
List
<
_ble_indicator
>
ble_list
=
get_aplist_in_coordinate_per_rssidir
(
rssi_dir
,
rssi_dir
,
coordinate_pixel_x1
,
coordinate_pixel_y1
,
coordinate_pixel_x2
,
coordinate_pixel_y2
);
ble_list
.
forEach
(
System
.
out
::
println
);
// sample ble_list
List
<
_ble_indicator
>
sample2
=
Arrays
.
asList
(
new
_ble_indicator
(
"aaaaa"
,
1111
),
new
_ble_indicator
(
"bbbb"
,
2222
),
new
_ble_indicator
(
"aaaaa"
,
3333
),
new
_ble_indicator
(
"ccccc"
,
4444
),
new
_ble_indicator
(
"aaaaa"
,
5555
),
new
_ble_indicator
(
"cccc"
,
6666
),
new
_ble_indicator
(
"bbbb"
,
7777
));
// getting rssi_sub_list per ap_id by transform result-list to map<ap_id,rssi_sub_list>
Map
<
String
,
List
<
Integer
>>
transform
=
sample2
.
stream
().
collect
(
Collectors
.
groupingBy
(
_ble_indicator:
:
get_ap_id
,
Collectors
.
mapping
(
_ble_indicator:
:
get_rssi
,
Collectors
.
toList
())));
// prepare for insert value for storing
List
<
FPElement
>
fp_cell_per_ap
=
new
ArrayList
<>();
// map traverse using set view
Set
<
Map
.
Entry
<
String
,
List
<
Integer
>>>
entries
=
transform
.
entrySet
();
for
(
Map
.
Entry
<
String
,
List
<
Integer
>>
entry
:
entries
)
{
List
<
Integer
>
rssi_list
=
entry
.
getValue
();
// calculate statistics
final
int
count
=
rssi_list
.
size
();
final
double
rssi_min
=
rssi_list
.
stream
().
mapToDouble
(
Integer:
:
doubleValue
).
summaryStatistics
().
getMin
();
final
double
rssi_max
=
rssi_list
.
stream
().
mapToDouble
(
Integer:
:
doubleValue
).
summaryStatistics
().
getMax
();
final
double
rssi_avg
=
rssi_list
.
stream
().
mapToDouble
(
Integer:
:
doubleValue
).
summaryStatistics
().
getAverage
();
final
double
sum_of_dev
=
rssi_list
.
stream
().
mapToDouble
(
x
->
Math
.
pow
(
x
.
doubleValue
()
-
rssi_avg
,
2.0
)).
sum
();
final
double
rssi_std_dev
=
Math
.
sqrt
(
sum_of_dev
/(
count
-
1
));
// Bessel correction for sample stdev
// populate insert value
FPElement
cell_elem
=
new
FPElement
(
floor_id
,
building_id
,
campus_id
,
ble_cell_id
,
rssi_dir
,
entry
.
getKey
(),
count
,
rssi_min
,
rssi_max
,
rssi_avg
,
rssi_std_dev
);
fp_cell_per_ap
.
add
(
cell_elem
);
}
for
(
FPElement
print_elem
:
fp_cell_per_ap
)
{
System
.
out
.
println
(
print_elem
);
int
[]
rssi_dir_index
=
mFloor
.
loadRSSIDir
();
rssiDirBound
rssi_dir
;
for
(
int
i
=
0
;
i
<
rssi_dir_index
.
length
;
i
++
)
{
// 수집방향별로 세트를 구성
rssi_dir
=
normalizeRssiDir
(
rssi_dir_index
[
i
]);
for
(
int
m
=
0
;
m
<
mFloor
.
getM
();
m
++)
{
for
(
int
n
=
0
;
n
<
mFloor
.
getN
();
n
++)
{
// 격자별....
ble_cell_id
=
mFloor
.
getBLECell
(
m
,
n
).
get_id
();
System
.
out
.
printf
(
"floor_id : %d, building_id : %d, campus_id : %d, ble_cell_id : %d, lower_rssi_dir : %d, upper_rssi_dir : %d "
,
floor_id
,
building_id
,
campus_id
,
ble_cell_id
,
rssi_dir
.
get_lower_rssi_dir
(),
rssi_dir
.
get_upper_rssi_dir
()
);
System
.
out
.
printf
(
" ble_cell_location : ("
+
mFloor
.
getBLECell
(
m
,
n
).
get_location_x
()+
", "
+
mFloor
.
getBLECell
(
m
,
n
).
get_location_y
()+
")"
);
System
.
out
.
println
();
int
coordinate_pixel_x1
=
(
mFloor
.
getBLECell
(
m
,
n
).
get_location_x
()
-
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
int
coordinate_pixel_y1
=
(
mFloor
.
getBLECell
(
m
,
n
).
get_location_y
()
-
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
int
coordinate_pixel_x2
=
(
mFloor
.
getBLECell
(
m
,
n
).
get_location_x
()
+
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
int
coordinate_pixel_y2
=
(
mFloor
.
getBLECell
(
m
,
n
).
get_location_y
()
+
CELL_SIZE_BLE
/
2
)
/
(
int
)
mFloor
.
getMap_scale_pixel
();
System
.
out
.
printf
(
"Pixel Coordinate : ("
+
coordinate_pixel_x1
+
", "
+
coordinate_pixel_y1
+
") ("
+
coordinate_pixel_x2
+
", "
+
coordinate_pixel_y2
+
")"
);
System
.
out
.
println
();
List
<
_ble_indicator
>
ble_list
=
get_aplist_in_coordinate_per_rssidir
(
rssi_dir
.
get_lower_rssi_dir
(),
rssi_dir
.
get_upper_rssi_dir
(),
coordinate_pixel_x1
,
coordinate_pixel_y1
,
coordinate_pixel_x2
,
coordinate_pixel_y2
);
// getting rssi_sub_list per ap_id by transform result-list to map<ap_id,rssi_sub_list> // AP 별 ....
Map
<
String
,
List
<
Integer
>>
transform
=
ble_list
.
stream
().
collect
(
Collectors
.
groupingBy
(
_ble_indicator:
:
get_ap_id
,
Collectors
.
mapping
(
_ble_indicator:
:
get_rssi
,
Collectors
.
toList
())));
// prepare for insert value for storing
List
<
FPElement
>
fp_cell_per_ap
=
null
;
if
(
transform
.
size
()
>
0
)
{
fp_cell_per_ap
=
new
ArrayList
<>();
// map traverse using set view
Set
<
Map
.
Entry
<
String
,
List
<
Integer
>>>
entries
=
transform
.
entrySet
();
for
(
Map
.
Entry
<
String
,
List
<
Integer
>>
entry
:
entries
)
{
List
<
Integer
>
rssi_list
=
entry
.
getValue
();
// calculate statistics
final
int
count
=
rssi_list
.
size
();
final
double
rssi_min
=
rssi_list
.
stream
().
mapToDouble
(
Integer:
:
doubleValue
).
summaryStatistics
().
getMin
();
final
double
rssi_max
=
rssi_list
.
stream
().
mapToDouble
(
Integer:
:
doubleValue
).
summaryStatistics
().
getMax
();
final
double
rssi_avg
=
rssi_list
.
stream
().
mapToDouble
(
Integer:
:
doubleValue
).
summaryStatistics
().
getAverage
();
final
double
sum_of_dev
=
rssi_list
.
stream
().
mapToDouble
(
x
->
Math
.
pow
(
x
.
doubleValue
()
-
rssi_avg
,
2.0
)).
sum
();
final
double
rssi_std_dev
=
Math
.
sqrt
(
sum_of_dev
/
(
count
-
1
));
// Bessel correction for sample stdev
// populate insert value
FPElement
cell_elem
=
new
FPElement
(
floor_id
,
building_id
,
campus_id
,
ble_cell_id
,
rssi_dir
.
get_rssi_dir
(),
entry
.
getKey
(),
count
,
rssi_min
,
rssi_max
,
rssi_avg
,
rssi_std_dev
);
fp_cell_per_ap
.
add
(
cell_elem
);
}
for
(
FPElement
print_elem
:
fp_cell_per_ap
)
{
System
.
out
.
println
(
print_elem
);
}
// calculate mag_angle - 해당 cell의 각 수집방향에 대하여 수집된 지자기방향의 평균값으로 대표
// insert rows to db. (delete for to delete sample rows if there are sample raws in database)
insertFPCellPerAP
(
fp_cell_per_ap
);
//deleteFPCell(ble_cell_id);
}
else
{
System
.
out
.
printf
(
"there are no data..."
);
System
.
out
.
println
();
}
}
}
}
// calculate mag_angle - 해당 cell의 각 수집방향에 대하여 수집된 지자기방향의 평균값으로 대표
// insert rows to db. (delete for to delete sample rows if there are sample raws in database)
insertFPCellPerAP
(
fp_cell_per_ap
);
// deleteFPCellPerAP(ble_cell_id);
// Loop here ..*********************************************************************/
return
true
;
...
...
src/main/resources/db/maria/mapper/FPBLEBuildMapper.xml
View file @
bdc2aec4
...
...
@@ -13,23 +13,23 @@
SELECT
a.AP_ID, a.RSSI
FROM
( SELECT TAG_ID, COLLECTED_TIME, SEQUENCE_NUM
FROM raw_data_tag
WHERE POSITION_X
>
#{ble_cell_coordi_x1} and POSITION_X
<
#{ble_cell_coordi_x2}
AND POSITION_Y
>
#{ble_cell_coordi_y1} and POSITION_Y
<
#{ble_cell_coordi_y2}
AND RSSI_DIR
>
#{lower_rssi_dir} and RSSI_DIR
<
#{upper_rssi_dir}
) t
( SELECT TAG_ID, COLLECTED_TIME, SEQUENCE_NUM
FROM raw_data_tag
WHERE POSITION_X
>
#{ble_cell_coordi_x1} and POSITION_X
<
#{ble_cell_coordi_x2}
AND POSITION_Y
>
#{ble_cell_coordi_y1} and POSITION_Y
<
#{ble_cell_coordi_y2}
AND RSSI_DIR
>
#{lower_rssi_dir} and RSSI_DIR
<
#{upper_rssi_dir}
) t
INNER JOIN raw_data_ap AS a
ON t.tag_id = a.tag_id
AND t.collected_time = a.collected_time
AND t.sequence_num = a.sequence_num
ON t.tag_id = a.tag_id
AND t.collected_time = a.collected_time
AND t.sequence_num = a.sequence_num
</select>
<insert
id=
"
insertFpBle
Data"
parameterType=
"java.util.Map"
>
<insert
id=
"
listInsertFPBLE
Data"
parameterType=
"java.util.Map"
>
INSERT INTO fp_ble_data (floor_id,building_id,campus_id,ble_cell_id,rssi_dir,ap_id,rssi_avg,rssi_std_dev,rssi_collect_cnt,rssi_min,rssi_max)
VALUES
<foreach
collection=
"
list"
item=
"
item"
separator=
","
>
( #{
item.floor_id}, #{item.building_id}, #{item.campus_id}, #{item.ble_cell_id}, #{item.rssi_dir}, #{
item.ap_id},
#{
item.rssi_avg},#{item.rssi_std_dev},#{item.rssi_collect_cnt},#{item.rssi_min},#{
item.rssi_max})
VALUES
<foreach
collection=
"
fp_cell_per_ap"
item=
"fp_
item"
separator=
","
>
( #{
fp_item.floor_id}, #{fp_item.building_id}, #{fp_item.campus_id}, #{fp_item.ble_cell_id}, #{fp_item.rssi_dir}, #{fp_
item.ap_id},
#{
fp_item.rssi_avg},#{fp_item.rssi_std_dev},#{fp_item.rssi_collect_cnt},#{fp_item.rssi_min},#{fp_
item.rssi_max})
</foreach>
</insert>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment