Exemple #1
0
        private void findButton_Click(object sender, EventArgs e)
        {
            // Read Unknown
            string unknown_json = FileUtils.ReadJSON();

            if (unknown_json.Equals(""))
            {
                return;
            }

            Vector unknown = JsonConvert.DeserializeObject <Vector>(unknown_json);

            // Read Maximums
            string maximums_json = FileUtils.ReadJSON();

            if (maximums_json.Equals(""))
            {
                return;
            }

            List <Maximum2> maximums = JsonConvert.DeserializeObject <List <Maximum2> >(maximums_json);

            string[] filePaths = FileUtils.GetFilePaths(1, 9999);

            if (filePaths == null || filePaths.Length == 0)
            {
                return;
            }

            List <Candidate> candidates = new List <Candidate>();

            foreach (string filePath in filePaths)
            {
                string json = File.OpenText(filePath).ReadToEnd();

                List <Vector> mesures = JsonConvert.DeserializeObject <List <Vector> >(json);

                foreach (Vector mesure in mesures)
                {
                    List <double> pows = new List <double>();

                    bool flag = true;

                    if (unknown.Gateways.Count > mesure.Gateways.Count)
                    {
                        flag = false;
                    }

                    foreach (Gateway firstGateway in mesure.Gateways)
                    {
                        Gateway seccondGateway = unknown.Gateways.Where(i => i.Name.Equals(firstGateway.Name)).FirstOrDefault();

                        if (seccondGateway == null)
                        {
                            flag = false;
                        }
                    }

                    if (flag == false)
                    {
                        continue;
                    }

                    foreach (Gateway firstGateway in mesure.Gateways)
                    {
                        Gateway secondGateway = null;

                        foreach (dynamic gateway in unknown.Gateways)
                        {
                            if (gateway.Name == firstGateway.Name)
                            {
                                secondGateway = gateway;
                                break;
                            }
                        }

                        if (secondGateway != null)
                        {
                            double pow = Math.Pow(firstGateway.Rssi - secondGateway.Rssi, 2);

                            pows.Add(pow);
                        }
                    }

                    double result = FormulaUtils.SumSqrt(pows);

                    if (pows.Count != 0)
                    {
                        Maximum2 maximum2 = maximums.Where(i => i.Number == mesure.Number && i.Floor.Equals(mesure.Floor)).FirstOrDefault();

                        if (maximum2 != null)
                        {
                            if (result <= maximum2.MaxDistance)
                            {
                                Candidate candidate = candidates.Where(i => i.Number == mesure.Number && i.Floor.Equals(mesure.Floor)).FirstOrDefault();

                                if (candidate == null)
                                {
                                    candidate = new Candidate(mesure.Floor, mesure.Number, result);
                                    candidates.Add(candidate);
                                }
                            }
                        }
                    }
                }
            }

            var sorted = candidates.OrderBy(o => o.Result);

            FileUtils.WriteJSON(sorted);
        }
Exemple #2
0
        private void formulaButton_Click(object sender, EventArgs e)
        {
            string[] filePaths = FileUtils.GetFilePaths();

            if (filePaths == null || filePaths.Length == 0)
            {
                return;
            }

            TextReader textReader_a = File.OpenText(filePaths[0]);
            TextReader textReader_b = File.OpenText(filePaths[1]);
            TextReader textReader_c = null;

            string json_a = textReader_a.ReadToEnd();
            string json_b = textReader_b.ReadToEnd();
            string json_c = "";

            List <Vector> mesures_1 = JsonConvert.DeserializeObject <List <Vector> >(json_a);
            List <Vector> mesures_2 = JsonConvert.DeserializeObject <List <Vector> >(json_b);
            List <Vector> mesures_3 = null;

            if (filePaths.Length == 3)
            {
                textReader_c = File.OpenText(filePaths[2]);
                json_c       = textReader_c.ReadToEnd();
                mesures_3    = JsonConvert.DeserializeObject <List <Vector> >(json_c);
            }

            List <Formula> formulas = new List <Formula>();

            #region 1ère avec 2ème
            foreach (Vector mesure_1 in mesures_1)
            {
                Formula formula = formulas.Where(i => i.Number == mesure_1.Number).FirstOrDefault();

                if (formula == null)
                {
                    formula = new Formula(mesure_1.Floor, mesure_1.Number);
                    formulas.Add(formula);
                }

                Vector mesure_2 = mesures_2.Where(i => i.Number == mesure_1.Number).FirstOrDefault();

                if (mesure_2 == null)
                {
                    continue;
                }

                List <double> pows = new List <double>();

                foreach (Gateway firstGateway in mesure_1.Gateways)
                {
                    Gateway secondGateway = mesure_2.Gateways.Where(i => i.Name.Equals(firstGateway.Name)).FirstOrDefault();

                    if (secondGateway != null)
                    {
                        double pow = Math.Pow(firstGateway.Rssi - secondGateway.Rssi, 2);

                        pows.Add(pow);
                    }
                }

                double result = FormulaUtils.SumSqrt(pows);

                if (pows.Count != 0)
                {
                    formula.Distances.Add(result);
                }
            }
            #endregion

            if (mesures_3 != null)
            {
                #region 1ère avec 3ème
                foreach (Vector mesure_1 in mesures_1)
                {
                    Formula formula = formulas.Where(i => i.Number == mesure_1.Number).FirstOrDefault();

                    if (formula == null)
                    {
                        formula = new Formula(mesure_1.Floor, mesure_1.Number);
                        formulas.Add(formula);
                    }

                    Vector mesure_3 = mesures_3.Where(i => i.Number == mesure_1.Number).FirstOrDefault();

                    List <double> pows = new List <double>();

                    foreach (Gateway firstGateway in mesure_1.Gateways)
                    {
                        if (mesure_3 == null)
                        {
                            break;
                        }

                        Gateway secondGateway = mesure_3.Gateways.Where(i => i.Name.Equals(firstGateway.Name)).FirstOrDefault();

                        if (secondGateway != null)
                        {
                            double pow = Math.Pow(firstGateway.Rssi - secondGateway.Rssi, 2);

                            pows.Add(pow);
                        }
                    }

                    double result = FormulaUtils.SumSqrt(pows);

                    if (pows.Count != 0)
                    {
                        formula.Distances.Add(result);
                    }
                }
                #endregion

                #region 2ème avec 3ème
                foreach (Vector mesure_2 in mesures_2)
                {
                    Formula formula = formulas.Where(i => i.Number == mesure_2.Number).FirstOrDefault();

                    if (formula == null)
                    {
                        formula = new Formula(mesure_2.Floor, mesure_2.Number);
                        formulas.Add(formula);
                    }

                    Vector mesure_3 = mesures_3.Where(i => i.Number == mesure_2.Number).FirstOrDefault();

                    List <double> pows = new List <double>();

                    foreach (Gateway firstGateway in mesure_2.Gateways)
                    {
                        if (mesure_3 == null)
                        {
                            break;
                        }

                        Gateway secondGateway = mesure_3.Gateways.Where(i => i.Name.Equals(firstGateway.Name)).FirstOrDefault();

                        if (secondGateway != null)
                        {
                            double pow = Math.Pow(firstGateway.Rssi - secondGateway.Rssi, 2);

                            pows.Add(pow);
                        }
                    }

                    double result = FormulaUtils.SumSqrt(pows);

                    if (pows.Count != 0)
                    {
                        formula.Distances.Add(result);
                    }

                    // formulas.Add(formula);
                }
                #endregion
            }

            FileUtils.WriteJSON(formulas);
        }