[Route("rooms/{id}/point")] //?firstMacId=xxx&secondMacId=yyy&thirdMacId=zzz public IHttpActionResult GetNearestXYLocalizationPoint ([FromUri] int id, [FromUri] int firstMacId, [FromUri] int secondMacId, [FromUri] int thirdMacId, [FromUri] int fourthMacId) { var request = new FourRSSISignals { FirstMacIdRSSI = firstMacId, SecondMacIdRSSI = secondMacId, ThirdMacIdRSSI = thirdMacId, FourthMacIdRRSI = fourthMacId }; var data = _localizationServices.GetNearestXYLocalizationPoint(id, request); return(Ok(data)); }
public Point GetNearestXYLocalizationPoint(int id, FourRSSISignals threeMacIds) { using (var ctx = new WifiLocalizerContext()) { var nearestRSSIPoint = ctx.RSSIMeasurmentPoints.Where(x => x.RoomId == id) .OrderBy(CalculteVectorsDiffExpression(threeMacIds)) .FirstOrDefault(); DatabaseHandler.PrintSuccesFetchingFromDatabase(nearestRSSIPoint); return(new Point { x = nearestRSSIPoint.X, y = nearestRSSIPoint.Y }); } }
private Expression <Func <RSSIMeasurmentPoint, double> > CalculteVectorsDiffExpression(FourRSSISignals fourMacIds) { return (x => //sqare root of (Math.Pow( //second powers sum Math.Pow((x.FirstMacIdRSSI - fourMacIds.FirstMacIdRSSI), 2) + Math.Pow((x.SecondMacIdRSSI - fourMacIds.SecondMacIdRSSI), 2) + Math.Pow((x.ThirdMacIdRSSI - fourMacIds.ThirdMacIdRSSI), 2) + Math.Pow((x.FourthMacIdRSSI - fourMacIds.FourthMacIdRRSI), 2) , 0.5))); }