public void LoadTest() { var txt = @" A,ABCD,NAME1,1.0,2.0,100,18000,18000,3000,0 R,09,95,3000,150,0,0.0,0,1.0,2.0,100,3.00,50,1,0 R,27,275,3000,150,0,0.0,0,1.0,2.0,100,3.00,50,1,0 A,EFGH,NAME2,1.0,2.0,100,3000,5000,2500,0 R,36,003,2500,100,0,0.0,0,1.0,2.0,100,3.00,50,1,0 R,18,183,2500,100,0,0.0,0,1.0,2.0,100,3.00,50,1,0 "; var result = AirportDataLoader.Load(txt.Lines()); var err = result.Errors; var airports = result.Airports; Assert.IsEmpty(err); Assert.AreEqual(2, airports.Count); var ap1 = airports["ABCD"]; var rwy09 = new RwyData("09", "95", 3000, 150, true, false, "0.0", "0", 1.0, 2.0, 100, 3.0, 50, AirportDataLoader.SurfTypes[1], 0); var rwy27 = new RwyData("27", "275", 3000, 150, true, false, "0.0", "0", 1.0, 2.0, 100, 3.0, 50, AirportDataLoader.SurfTypes[1], 0); var expected1 = new Airport("ABCD", "NAME1", 1.0, 2.0, 100, true, 18000, 18000, 3000, new[] { rwy09, rwy27 }); Assert.IsTrue(expected1.Equals(ap1)); var ap2 = airports["EFGH"]; Assert.AreEqual("NAME2", ap2.Name); Assert.IsTrue(ap2.Rwys.Select(r => r.RwyIdent).SetEquals("18", "36")); }
private MultiMap <string, RwyData> LoadRwys() { string rwyFile = folderpath + @"\runways.csv"; var lines = File.ReadAllLines(rwyFile); var rwys = new MultiMap <string, RwyData>(); var surfTypes = new Dictionary <string, string>(); // Ignore first line. for (int i = 1; i < lines.Length; i++) { try { var words = lines[i].Split(','); var icao = words[2].Trim('"'); var id = words[8].Trim('"'); // Reduce memory usage by sharing these strings. var surface = words[5].Trim('"', ' '); if (surfTypes.ContainsKey(surface)) { surface = surfTypes[surface]; } else { surfTypes[surface] = surface; } if (!double.TryParse(words[3], out var len) || !double.TryParse(words[4], out var width) || !double.TryParse(words[9], out var lat) || !double.TryParse(words[10], out var lon) || !double.TryParse(words[11], out var elev) || !double.TryParse(words[13], out var heading)) { continue; } var r = new RwyData(id, RoundToInt(heading).ToString(), RoundToInt(len), RoundToInt(width), false, false, "", "", lat, lon, RoundToInt(elev), 0.0, 0, surface, -1); rwys.Add(icao, r); id = words[15].Trim('"'); if (!double.TryParse(words[16], out lat) || !double.TryParse(words[17], out lon) || !double.TryParse(words[18], out elev) || !double.TryParse(words[20], out heading)) { continue; } r = new RwyData(id, RoundToInt(heading).ToString(), RoundToInt(len), RoundToInt(width), false, false, "", "", lat, lon, RoundToInt(elev), 0.0, 0, surface, -1); rwys.Add(icao, r); } catch { } } return(rwys); }