public async Task <IHttpActionResult> GetLocation(int id)
        {
            SpacesHandler               SH      = new SpacesHandler(db);
            TrackerLocationsHandler     TLH     = new TrackerLocationsHandler(db);
            StoreysHandler              StH     = new StoreysHandler(db);
            TrackerLocation             loc     = TLH.GetTrackerLocation(id);
            Dictionary <string, double> Options = new Dictionary <string, double>();
            Stream          stream = new MemoryStream(loc.Options);
            BinaryFormatter binfor = new BinaryFormatter();

            Options = (Dictionary <string, double>)binfor.Deserialize(stream);
            List <Option> options = new List <Option>();

            foreach (KeyValuePair <string, double> kv in Options)
            {
                Space  space      = SH.GetSpace(Guid.Parse(kv.Key));
                Guid   spaceID    = space.ID;
                Guid   storeyID   = space.Storey.ID;
                Guid   buildingID = space.Storey.Building.ID;
                Option option     = new Option(spaceID, storeyID, buildingID, kv.Value);
                options.Add(option);
            }
            KeyValuePair <DateTime, List <Option> > result = new KeyValuePair <DateTime, List <Option> >(loc.TimeStamp, options);

            return(Json(result));
        }
        public async Task <IHttpActionResult> PostKnnTrainingFile()
        {
            StoreysHandler SH       = new StoreysHandler(db);
            SpacesHandler  SpH      = new SpacesHandler(db);
            KnnsHandler    KH       = new KnnsHandler(db);
            var            provider = new MultipartMemoryStreamProvider();
            await Request.Content.ReadAsMultipartAsync(provider);

            var    file     = provider.Contents[0];
            string filename = file.Headers.ContentDisposition.FileName.Trim('\"');

            //Bytes from the binary reader stored in BlobValue array
            byte[] TrainingSet = file.ReadAsByteArrayAsync().Result; //reader.ReadBytes((int)file.Length);

            string trainingString = System.Text.Encoding.UTF8.GetString(TrainingSet);

            //KVP<LabelMap, knnByte>,First label ID>
            KeyValuePair <KeyValuePair <byte[], byte[]>, string> LabelMapKnn = KnnGenerate.GenerateTemplateTrainingFile(trainingString);
            //Generate the files from the generate template method within the template method. save those 3 to db
            //Storey storey = BC.GetBeaconStorey(BeaconID);
            //Knn knn = new Knn();

            //Once trainingSets generated, Space Guid will be saved in the LabelMapKnn string.
            Guid   storeyId = SpH.GetSpaceStorey(Guid.Parse(LabelMapKnn.Value)).ID;
            Storey storey   = SH.GetStorey(storeyId);

            byte[] LabelMap = LabelMapKnn.Key.Value;
            byte[] Knn      = LabelMapKnn.Key.Key;
            Knn    knn      = new Knn(storey, TrainingSet, LabelMap, Knn);

            KH.PostKnn(knn);
            return(Ok(storey));
        }
        public async Task <IHttpActionResult> PostBIM()
        {
            //    string[] buildings = resultString.Split(new string[] { "BuildingStoreys" }, StringSplitOptions.None);
            SpacesHandler    SH       = new SpacesHandler(db);
            StoreysHandler   STH      = new StoreysHandler(db);
            BuildingsHandler BH       = new BuildingsHandler(db);
            AddressesHandler AH       = new AddressesHandler(db);
            Building         building = JsonConvert.DeserializeObject <Building>(Request.Content.ReadAsStringAsync().Result);

            Models.Building b = new Models.Building(building.ID, building.Name);
            BH.PostBuilding(b);
            double?longitude = building.Address.Longitude;
            double?latitude  = building.Address.Latitude;

            Models.Address address = new Models.Address(building.Address.Street, building.Address.Number, building.Address.Town, building.Address.PostalCode, building.Address.Region, building.Address.Country, longitude, latitude, b);
            AH.PostAddress(address);
            List <BuildingStorey> storeys = building.BuildingStoreys;

            foreach (BuildingStorey storey in storeys)
            {
                Models.Storey st = new Models.Storey(storey.ID, storey.Name, b);
                STH.PostStorey(st);
                foreach (Space space in storey.Spaces)
                {
                    Models.Space s = new Models.Space(space.ID, space.Name, st);
                    SH.PostSpace(s);
                }
            }
            List <Space> spaces = storeys[0].Spaces;

            return(Ok(building));
        }
        public async Task <IHttpActionResult> PutStorey()
        {
            StoreysHandler       SH         = new StoreysHandler(db);
            List <Models.Storey> StoreyList = JsonConvert.DeserializeObject <List <Models.Storey> >(Request.Content.ReadAsStringAsync().Result);

            foreach (Models.Storey Storey in StoreyList)
            {
                Models.Storey s = new Models.Storey(Storey.ID, Storey.Name);
                if (!SH.PutStorey(s))
                {
                    return(Content(HttpStatusCode.Conflict, Storey.ID.ToString()));
                }
            }
            return(Ok());
        }
        public async Task <IHttpActionResult> PostStoreyKnn()
        {
            Guid                       storeyID = JsonConvert.DeserializeObject <Guid>(Request.Content.ReadAsStringAsync().Result);
            StoreysHandler             SH       = new StoreysHandler(db);
            SpacesHandler              SpH      = new SpacesHandler(db);
            TrackersHandler            TH       = new TrackersHandler(db);
            TrainingValuesHandler      TVH      = new TrainingValuesHandler(db);
            KnnsHandler                KH       = new KnnsHandler(db);
            IQueryable <TrainingValue> values   = TVH.GetTrainingValuesFromStorey(storeyID);
            KeyValuePair <KeyValuePair <byte[], byte[]>, string> LabelMapKnn = KnnGenerate.GenerateTemplateTrainingValues(values);
            Storey storey = SH.GetStorey(storeyID);

            byte[] LabelMap = LabelMapKnn.Key.Value;
            byte[] Knn      = LabelMapKnn.Key.Key;
            Knn    knn      = new Knn(storey, LabelMap, Knn);

            KH.PostKnn(knn);
            return(Ok());
        }