Exemplo n.º 1
0
        /// <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,
            });
        }
Exemplo n.º 2
0
        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");
        }
Exemplo n.º 3
0
        /// <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");
            }
        }
Exemplo n.º 4
0
        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");
            }
        }