diff --git a/positioning_server.iml b/positioning_server.iml
index 27dda37..f89be75 100644
--- a/positioning_server.iml
+++ b/positioning_server.iml
@@ -47,5 +47,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/core/repository/RssiRecord.java b/src/main/java/core/repository/RssiRecord.java
index 863a727..c96e09e 100644
--- a/src/main/java/core/repository/RssiRecord.java
+++ b/src/main/java/core/repository/RssiRecord.java
@@ -11,8 +11,7 @@ import java.io.Serializable;
public class RssiRecord implements Serializable {
@Id @GeneratedValue
private int id;
-
-
+
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id", nullable = false)
private Location loc;
@@ -21,17 +20,15 @@ public class RssiRecord implements Serializable {
@JoinColumn(name = "id", nullable = false)
private AccessPoint ap;
- private Double avg;
- private Double stdDev;
+ private Double val;
public RssiRecord () {
}
- public RssiRecord(Location loc, AccessPoint ap, Double avg, Double stdDev){
+ public RssiRecord(Location loc, AccessPoint ap, Double val){
this.loc = loc;
this.ap = ap;
- this.avg = avg;
- this.stdDev = stdDev;
+ this.val = val;
}
public Location getLoc () {
@@ -49,20 +46,20 @@ public class RssiRecord implements Serializable {
public void setAp (final AccessPoint ap) {
this.ap = ap;
}
-
- public Double getAvg () {
- return avg;
+
+ public int getId() {
+ return id;
}
-
- public void setAvg (final Double avg) {
- this.avg = avg;
+
+ public void setId(int id) {
+ this.id = id;
}
-
- public Double getStdDev () {
- return stdDev;
+
+ public Double getVal() {
+ return val;
}
-
- public void setStdDev (final Double stdDev) {
- this.stdDev = stdDev;
+
+ public void setVal(Double val) {
+ this.val = val;
}
}
diff --git a/src/main/java/core/repository/TempRssi.java b/src/main/java/core/repository/TempRssi.java
index 84688ed..6f648bd 100644
--- a/src/main/java/core/repository/TempRssi.java
+++ b/src/main/java/core/repository/TempRssi.java
@@ -16,18 +16,24 @@ public class TempRssi {
private AccessPoint ap;
private String client_mac_addr;
- private Double avg, stdDev;
+ private Double val;
public TempRssi () {}
- public TempRssi (final AccessPoint accessPoint, final String clientMacAddr, final double avg,
- final double stdDev) {
+ public TempRssi (final AccessPoint accessPoint, final String clientMacAddr, final double val) {
ap = accessPoint;
client_mac_addr = clientMacAddr;
- this.avg = avg;
- this.stdDev = stdDev;
+ this.val = val;
}
-
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
public AccessPoint getAp () {
return ap;
}
@@ -43,20 +49,12 @@ public class TempRssi {
public void setClient_mac_addr (final String client_mac_addr) {
this.client_mac_addr = client_mac_addr;
}
-
- public Double getAvg () {
- return avg;
- }
-
- public void setAvg (final Double avg) {
- this.avg = avg;
- }
-
- public Double getStdDev () {
- return stdDev;
+
+ public Double getVal() {
+ return val;
}
-
- public void setStdDev (final Double stdDev) {
- this.stdDev = stdDev;
+
+ public void setVal(Double val) {
+ this.val = val;
}
}
diff --git a/src/main/java/core/service/PositioningService.java b/src/main/java/core/service/PositioningService.java
index 0a599cc..fb98d73 100644
--- a/src/main/java/core/service/PositioningService.java
+++ b/src/main/java/core/service/PositioningService.java
@@ -30,18 +30,19 @@ public class PositioningService {
List clientRssi = hibDao.getTempRssi(debDao.getMacAddr(ipAddr));
if(clientRssi.size()>=3) {
+
Location bestLoc = null;
- double bestLocProbability = -1;
+ double bestLocDistance = -1;
+
for (Location loc : hibDao.getLocations()) {
//Liste des RSSISample pour une position donnée, chaque RSSISample étant
//assossié à un AccessPoint
List rssis = hibDao.getRssiRecord(loc.getId());
-
-
- double currentLocProbability = probability(clientRssi, rssis, DEFAULT_POSITIONING_PRECISION);
- if (bestLocProbability == -1 || currentLocProbability > bestLocProbability) {
+
+ double currentLocDistance = rssiDistance(clientRssi, rssis);
+ if (bestLocDistance == -1 || currentLocDistance < bestLocDistance) {
bestLoc = loc;
- bestLocProbability = currentLocProbability;
+ bestLocDistance = currentLocDistance;
}
}
return bestLoc;
@@ -49,52 +50,51 @@ public class PositioningService {
return null;
}
- private double probability(List temps, List rssis, double precision){
+ private double rssiDistance(List temps, List rssis){
try {
- double probability = 1;
+ double distance = 0;
for (TempRssi temp : temps) {
RssiRecord rssi = find(temp.getAp().getMac_addr(), rssis);
- probability*=gauss_probability(temp.getAvg(), temp.getStdDev(), rssi.getAvg(), rssi.getStdDev(), precision);
+ if(rssi!=null)
+ distance+=(temp.getVal()- rssi.getVal())*(temp.getVal()- rssi.getVal());
+ else
+ distance+=(temp.getVal()+95)*(temp.getVal()+95);
}
- return probability;
+
+ for(RssiRecord rssi : rssis){
+ if(containsMacAddr(rssi.getAp().getMac_addr(), temps))
+ distance+=(rssi.getVal()+95)*(rssi.getVal()+95);
+ }
+
+
+ return Math.sqrt(distance);
}catch(IllegalArgumentException e){
e.printStackTrace();
return -1;
}
}
- private double gauss_probability(double avg1, double std1, double avg2, double std2, double precision){
- final double
- valDebut = Math.min(avg1-3*std1, avg2-3*std2),
- valFin = Math.max(avg1+3*std1, avg2+3*std2);
- double
- rectDebut = valDebut,
- rectFin = valDebut+precision,
- probabilite = 0;
-
- do{
- probabilite+=Math.min( gauss(avg1, std1, (rectDebut+rectFin)/2), gauss(avg2, std2, (rectDebut+rectFin)/2));
- rectDebut = rectFin;
- rectFin+=precision;
- }while(rectFin rrs){
final List results = new ArrayList<>();
rrs.stream().filter(rr->rr.getAp().getMac_addr().equals(macAddr)).forEach(rr->results.add(rr));
switch(results.size()){
case 0:
- throw new IllegalArgumentException("No matching RssiRecord for mac address <"+macAddr+">");
+ return null;
case 1:
return results.get(0);
default :
throw new IllegalArgumentException("Several("+results.size()+") matching RssiRecord for mac address <"+macAddr+">");
}
}
+
+ private boolean containsMacAddr(String macAddr, List temps){
+ for(TempRssi temp : temps){
+ if(temp.getAp().getMac_addr().equals(macAddr))
+ return true;
+ }
+ return false;
+ }
public String getMacAddr (final String clientIpAddr) {
return debDao.getMacAddr(clientIpAddr);
--
libgit2 0.21.4