Ejemplo n.º 1
0
        /// <summary>
        /// Returns a formatted description for given airspace
        /// </summary>
        /// <param name="airspace">airspace to use</param>
        /// <returns>description text</returns>
        private static string DescriptionFromAirspace(Airspace.Airspace airspace)
        {
            var sb = new StringBuilder();

            sb.Append("Name: " + airspace.Name + "\n");
            sb.Append("Class: " + airspace.Class.ToString());
            if (!string.IsNullOrEmpty(airspace.AirspaceType))
            {
                sb.Append($" ({airspace.AirspaceType})");
            }

            sb.Append("\n");

            sb.Append($"{airspace.Floor} -> {airspace.Ceiling}\n");

            if (!string.IsNullOrEmpty(airspace.Description))
            {
                sb.Append($"Description: {airspace.Description}\n");
            }

            if (!string.IsNullOrEmpty(airspace.Frequency))
            {
                sb.Append($"Frequency: {airspace.Frequency}");
            }

            if (!string.IsNullOrEmpty(airspace.CallSign))
            {
                sb.Append($"Call sign: {airspace.CallSign}");
            }

            sb.Replace("\n\n", "\n");
            sb.Replace("\n", "<br/>");

            return(sb.ToString());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates a Czml.Object from given airspace
        /// </summary>
        /// <param name="airspace">airspace to use</param>
        /// <returns>created CZML object</returns>
        private static Czml.Object CzmlObjectFromAirspace(Airspace.Airspace airspace)
        {
            double height = HeightFromAltitude(airspace.Ceiling) - HeightFromAltitude(airspace.Floor);

            if (airspace.Geometry is Circle circle)
            {
                return(new Czml.Object
                {
                    Name = airspace.Name,
                    Description = DescriptionFromAirspace(airspace),
                    Position = PositionFromCoord(circle.Center, airspace.Floor),
                    Cylinder = new Czml.Cylinder
                    {
                        BottomRadius = circle.Radius,
                        TopRadius = circle.Radius,
                        Length = height,
                        HeightReference = HeightReferenceFromAltitude(airspace.Floor),
                        Material = MaterialFromAirspace(airspace),
                        Outline = true,
                        OutlineColor = ColorFromAirspace(airspace, outlineColor: true),
                    },
                });
            }

            if (airspace.Geometry is Airspace.Polygon polygon)
            {
                Czml.PositionList positions = GetPolygonPointsFromAirspacePolygon(polygon, airspace.Floor);

                if (!positions.CartographicDegrees.Any())
                {
                    return(null);
                }

                return(new Czml.Object
                {
                    Name = airspace.Name,
                    Description = DescriptionFromAirspace(airspace),
                    Polygon = new Czml.Polygon
                    {
                        Positions = positions,
                        Height = HeightFromAltitude(airspace.Floor),
                        ExtrudedHeight = HeightFromAltitude(airspace.Ceiling),
                        HeightReference = HeightReferenceFromAltitude(airspace.Floor),
                        Material = MaterialFromAirspace(airspace),
                        Outline = true,
                        OutlineColor = ColorFromAirspace(airspace, outlineColor: true),
                    },
                });
            }

            throw new FormatException("invalid airspace geometry");
        }