/// <summary> /// Loads example layer list that is used as the initial layer(s) /// </summary> /// <returns>layer list</returns> private static IEnumerable <Layer> LoadExampleLayerList() { var platform = DependencyService.Get <IPlatform>(); using var stream = platform.OpenAssetStream(DefaultLayerFilename); var parser = new OpenAirFileParser(stream); const string LayerName = "OpenAir Schutzzonen Auszug"; string czml = CzmlAirspaceWriter.WriteCzml( LayerName, parser.Airspaces, parser.FileCommentLines); string description = string.Join("\n", parser.FileCommentLines); var airspaceLayer = new Layer { Id = Guid.NewGuid().ToString("B"), Name = LayerName, Description = description, IsVisible = true, LayerType = LayerType.CzmlLayer, Data = czml }; return(new Layer[] { GetOpenStreetMapBuildingsLayer(), airspaceLayer, }); }
public void TestWriteCzmlCircle() { var airspacesList = new List <Airspace> { new Airspace(AirspaceClass.C) { Name = "MyAirspace", AirspaceType = "RMZ", CallSign = "AA", Frequency = "123.000", Floor = new Altitude(AltitudeType.GND), Ceiling = new Altitude(200.0, AltitudeType.AGL), Color = "ff0000", Geometry = new Circle { Center = new Coord { Latitude = 48.137155, Longitude = 11.575416 }, Radius = 200.0 } } }; // run string czml = CzmlAirspaceWriter.WriteCzml("my airspaces", airspacesList, Enumerable.Empty <string>()); // check Debug.WriteLine("CZML = " + czml); Assert.IsTrue(czml.Contains("MyAirspace"), "CZML must contain generated airspace"); Assert.IsTrue(czml.Contains("cylinder"), "CZML must contain a cylinder element"); }
/// <summary> /// Imports a .txt OpenAir airspace file and adds it as layer /// </summary> /// <param name="stream">stream of file to import</param> /// <param name="filename">filename of file to import</param> /// <returns>task to wait on</returns> public static async Task ImportOpenAirAirspaceFile(Stream stream, string filename) { try { var parser = new OpenAirFileParser(stream); var filteredAirspaces = await SelectAirspaceClassesToImport(parser.Airspaces); if (!filteredAirspaces.Any()) { return; } string czml = CzmlAirspaceWriter.WriteCzml( Path.GetFileNameWithoutExtension(filename), filteredAirspaces, parser.FileCommentLines); string fileComments = string.Join("\n", parser.FileCommentLines); if (parser.ParsingErrors.Any()) { fileComments += "\nParsing errors:\n"; fileComments += string.Join("\n", parser.ParsingErrors); } string description = fileComments .Replace("\n\n", "\n") .Trim(); await AddLayerFromCzml(czml, filename, description); } catch (Exception ex) { App.LogError(ex); await App.Current.MainPage.DisplayAlert( Constants.AppTitle, $"Error while loading OpenAir airspaces: {ex.Message}", "OK"); } }
public void TestConvertAirspacesToCzml() { // set up string airspacesFolder = Path.Combine(UnitTestHelper.TestAssetsPath, "airspaces"); string filename = Path.Combine(airspacesFolder, "xcontest-switzerland.txt"); Debug.WriteLine("parsing OpenAir file: " + filename); using (var stream = new FileStream(filename, FileMode.Open)) { var parser = new OpenAirFileParser(stream); // run string czml = CzmlAirspaceWriter.WriteCzml( Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(filename)), parser.Airspaces, new string[] { "Description line", "Another line" }); // check Debug.WriteLine("CZML = " + czml); Assert.IsTrue(czml.Contains("GRUYERES"), "CZML must contain Gruyeres airspace"); } }