Exemple #1
0
        [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)));
 }