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); }
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); }