Commit 37b9dc06 authored by jaehyu's avatar jaehyu

many improvements .

parent a491953f
...@@ -16,6 +16,8 @@ public interface FPBLEBuildDAO { ...@@ -16,6 +16,8 @@ public interface FPBLEBuildDAO {
public double selectScalePixel(HashMap<String, Integer> params); public double selectScalePixel(HashMap<String, Integer> params);
// List<_ble_indicator> selectAPinCoordiwDir(@Param("lower_rssi_dir")int lower_rssi_dir, @Param("upper_rssi_dir")int upper_rssi_dir, @Param("position_x1")int position_x1 , @Param("position_y1")int position_y1, @Param("position_x2")int position_x2, @Param("position_y2")int position_y2); // List<_ble_indicator> selectAPinCoordiwDir(@Param("lower_rssi_dir")int lower_rssi_dir, @Param("upper_rssi_dir")int upper_rssi_dir, @Param("position_x1")int position_x1 , @Param("position_y1")int position_y1, @Param("position_x2")int position_x2, @Param("position_y2")int position_y2);
// below is for binding-test // below is for binding-test
List<_ble_indicator> selectAPinCoordiwDir(@Param("lower_rssi_dir")int lower_rssi_dir, @Param("upper_rssi_dir")int upper_rssi_dir); List<_ble_indicator> selectAPinCoordiwDir(@Param("lower_rssi_dir")int lower_rssi_dir, @Param("upper_rssi_dir")int upper_rssi_dir,
@Param("ble_cell_coordi_x1")int ble_cell_coordi_x1, @Param("ble_cell_coordi_y1")int ble_cell_coordi_y1,
@Param("ble_cell_coordi_x2")int ble_cell_coordi_x2, @Param("ble_cell_coordi_y2")int ble_cell_coordi_y2);
} }
\ No newline at end of file
...@@ -3,12 +3,10 @@ package com.skt.ehs.mbs.fpbuilder; ...@@ -3,12 +3,10 @@ package com.skt.ehs.mbs.fpbuilder;
import com.skt.ehs.mbs.db.maria.DBManager; import com.skt.ehs.mbs.db.maria.DBManager;
import com.skt.ehs.mbs.db.maria.MariaConnectionManager; import com.skt.ehs.mbs.db.maria.MariaConnectionManager;
import com.skt.ehs.mbs.db.maria.dao.FPBLEBuildDAO; import com.skt.ehs.mbs.db.maria.dao.FPBLEBuildDAO;
import com.sun.java.swing.plaf.windows.WindowsTreeUI;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class BLEFPBuilder { public class BLEFPBuilder {
...@@ -75,30 +73,43 @@ public class BLEFPBuilder { ...@@ -75,30 +73,43 @@ public class BLEFPBuilder {
MariaConnectionManager mngr = MariaConnectionManager.getInstance(); MariaConnectionManager mngr = MariaConnectionManager.getInstance();
List<_ble_indicator> ret = Collections.emptyList(); List<_ble_indicator> ret = Collections.emptyList();
System.out.printf("( d1, d2, x1, y1, x2, y2)=( %10d, %10d, %10d, %10d, %10d, %10d )",d1,d2,x1,y1,x2, y2 );
System.out.println();
try (SqlSession session = mngr.getSqlSessionFactory().openSession()) { try (SqlSession session = mngr.getSqlSessionFactory().openSession()) {
FPBLEBuildDAO mapper = session.getMapper(FPBLEBuildDAO.class); FPBLEBuildDAO mapper = session.getMapper(FPBLEBuildDAO.class);
ret = mapper.selectAPinCoordiwDir(d1,d2,x1,y1,x2, y2);
// Todo regarding to given rssi_dir & cell_coordi, select <tagid, seq, time> records
// Todo select AP regarding to above <tagid, seq, time> records as per A record.
// below is for binding-test
int lower_rssi_dir = d1;
int upper_rssi_dir = d2;
ret = mapper.selectAPinCoordiwDir(lower_rssi_dir,upper_rssi_dir);
//ret = mapper.selectAPinCoordiwDir(d1,d2,x1,y1,x2, y2);
} }
ret.forEach(System.out::println); ret.forEach(System.out::println);
return ret; return ret;
} }
private class _fp_elem {
String _ap_id;
int _rssi_collect_cnt;
double _rssi_min;
double _rssi_max;
double _rssi_avg;
double _rssi_std_dev;
public _fp_elem(String ap_id, int count, double min, double max, double average, double stddev) {
this._ap_id = ap_id;
this._rssi_collect_cnt = count;
this._rssi_min = min;
this._rssi_max = max;
this._rssi_avg = average;
this._rssi_std_dev = stddev;
}
@Override
public String toString() {
return "_fp_elem{" +
"_ap_id='" + _ap_id + '\'' +
", _rssi_collect_cnt=" + _rssi_collect_cnt +
", _rssi_min=" + _rssi_min +
", _rssi_max=" + _rssi_max +
", _rssi_avg=" + _rssi_avg +
", _rssi_std_dev=" + _rssi_std_dev +
'}';
}
}
public boolean build() { public boolean build() {
double scale_pixel = readMapScale(); double scale_pixel = readMapScale();
...@@ -129,40 +140,51 @@ public class BLEFPBuilder { ...@@ -129,40 +140,51 @@ public class BLEFPBuilder {
System.out.println(); 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); 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 // sample ble_list
List<_ble_indicator> sample = new ArrayList<>(); List<_ble_indicator> sample2 = Arrays.asList(
_ble_indicator a = new _ble_indicator("aaaaa", 1111); new _ble_indicator("aaaaa", 1111),
sample.add(a); new _ble_indicator("bbbb", 2222),
_ble_indicator b = new _ble_indicator("bbbb", 2222); new _ble_indicator("aaaaa", 3333),
sample.add(b); new _ble_indicator("ccccc", 4444),
_ble_indicator c = new _ble_indicator("aaaaa", 3333); new _ble_indicator("aaaaa", 5555),
sample.add(c); new _ble_indicator("cccc", 6666),
_ble_indicator d = new _ble_indicator("ccccc", 4444); new _ble_indicator("bbbb", 7777));
sample.add(d);
_ble_indicator e = new _ble_indicator("aaaaa", 5555);
sample.add(e); Map<String,List<Integer>> transform = sample2.stream().collect(Collectors.groupingBy(_ble_indicator::get_ap_id,
_ble_indicator f = new _ble_indicator("cccc", 6666); Collectors.mapping(_ble_indicator::get_rssi,Collectors.toList())));
sample.add(f);
_ble_indicator g = new _ble_indicator("bbbb", 7777); // prepare for insert value for storing
sample.add(g); List<_fp_elem> fp_per_cell = new ArrayList<>();
// using collection.stream()
// calculate rssi_min, rssi_max, rssi_avg, rssi_std_dev, count per ap_id Set<Map.Entry<String, List<Integer>>> entries = transform.entrySet();
for(Map.Entry<String,List<Integer>> entry : entries ) {
// rssi_avg per ap_id List<Integer> rssi_list = entry.getValue();
sample.stream().collect(Collectors.groupingBy( ble -> ble.m_ap_id, final int count = rssi_list.size();
final double rssi_min = rssi_list.stream().mapToDouble(Integer::doubleValue).summaryStatistics().getMin();
Collectors.counting())) final double rssi_max = rssi_list.stream().mapToDouble(Integer::doubleValue).summaryStatistics().getMax();
.forEach( (x,y) -> System.out.println(x+"\t"+y)); 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
_fp_elem cell_elem = new _fp_elem(entry.getKey(),count,rssi_min,rssi_max,rssi_avg,rssi_std_dev);
fp_per_cell.add(cell_elem);
}
for (_fp_elem print_elem : fp_per_cell) {
System.out.println(print_elem);
}
// calculate mag_angle - 해당 cell의 각 수집방향에 대하여 수집된 지자기방향의 평균값으로 대표 // calculate mag_angle - 해당 cell의 각 수집방향에 대하여 수집된 지자기방향의 평균값으로 대표
// then insert into fp_ble_data table // then insert into fp_ble_data table
// Loop here ..*********************************************************************/
// Loop here ..*********************************************************************/
return true; return true;
} }
......
package com.skt.ehs.mbs.fpbuilder; package com.skt.ehs.mbs.fpbuilder;
import java.util.Arrays;
/** /**
* Created by user on 2016-12-01. * Created by user on 2016-12-01.
* 층을 가상 Matrix 로 구성하고, * 층을 가상 Matrix 로 구성하고,
......
...@@ -5,12 +5,20 @@ package com.skt.ehs.mbs.fpbuilder; ...@@ -5,12 +5,20 @@ package com.skt.ehs.mbs.fpbuilder;
*/ */
public class _ble_indicator { public class _ble_indicator {
String m_ap_id; String m_ap_id;
Integer m_rssi; int m_rssi;
_ble_indicator(String ap_id, Integer rssi) { _ble_indicator(String ap_id, int rssi) {
m_ap_id = ap_id; m_ap_id = ap_id;
m_rssi = rssi; m_rssi = rssi;
} }
public String get_ap_id() {
return m_ap_id;
}
public int get_rssi() {
return m_rssi;
}
@Override @Override
public String toString() { public String toString() {
return String.format("%s : %9d", m_ap_id, m_rssi); return String.format("%s : %9d", m_ap_id, m_rssi);
......
...@@ -12,16 +12,28 @@ ...@@ -12,16 +12,28 @@
<!-- <!--
Todo compose complex SQL here... Todo compose complex SQL here...
List<_ble_indicator> selectAPinCoordiwDir(@Param("rssi_dir1")int rssi_dir1, @Param("rssi_dir2")int rssi_dir2, @Param("position_x1")int position_x1 , @Param("position_y1")int position_y1, @Param("position_x2")int position_x2, @Param("position_y2")int position_y2); List<_ble_indicator> selectAPinCoordiwDir(
@Param("lower_rssi_dir")int lower_rssi_dir,
<select id="selectAPinCoordiwDir" parameterType="map" resultType="_ble_indicator"> @Param("upper_rssi_dir")int upper_rssi_dir,
SELECT DISTINCT ap_id, rssi FROM raw_data_ap WHERE rssi_dir &gt; #{lower_rssi_dir} and rssi_dir &lt; #{upper_rssi_dir} @Param("ble_cell_coordi_x1")int ble_cell_coordi_x1,
</select> @Param("ble_cell_coordi_y1")int ble_cell_coordi_y1,
// below is for binding-test @Param("ble_cell_coordi_x2")int ble_cell_coordi_x2,
List<_ble_indicator> selectAPinCoordiwDir(@Param("lower_rssi_dir")int lower_rssi_dir, @Param("upper_rssi_dir")int upper_rssi_dir); @Param("ble_cell_coordi_y2")int ble_cell_coordi_y2);
--> -->
<select id="selectAPinCoordiwDir" parameterType="map" resultType="_ble_indicator"> <select id="selectAPinCoordiwDir" parameterType="map" resultType="_ble_indicator">
SELECT DISTINCT ap_id, rssi FROM raw_data_ap WHERE rssi_dir &gt; #{lower_rssi_dir} and rssi_dir &lt; #{upper_rssi_dir} SELECT
a.AP_ID, a.RSSI
FROM
( SELECT TAG_ID, COLLECTED_TIME, SEQUENCE_NUM
FROM raw_data_tag
WHERE POSITION_X &gt; #{ble_cell_coordi_x1} and POSITION_X &lt; #{ble_cell_coordi_x2}
AND POSITION_Y &gt; #{ble_cell_coordi_y1} and POSITION_Y &lt; #{ble_cell_coordi_y2}
AND RSSI_DIR &gt; #{lower_rssi_dir} and RSSI_DIR &lt; #{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
</select> </select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment