public static VectorStyle GetRasterPointSymbolizerStyle(FeatureDataRow row)
        {
            // NB - this is for testing only.
            var rps = new RasterPointSymbolizer()
            {
                Symbol      = (Image)_boat.Clone(),
                Rotation    = (float)row[2],
                RemapColor  = Color.White,
                Scale       = (float)row[3],
                SymbolColor = Color.FromArgb((int)row[4])
            };

            return(new VectorStyle()
            {
                PointSymbolizer = rps
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Apply PolyStyle, LineStyle, and/or IconStyle elements of a KML Style to the given VectorStyle.
        /// </summary>
        /// <remarks>
        /// As per KML documentation, in cases where a style element is defined both in a
        /// shared style and in an inline style for a Feature (eg Placemark) the value of
        /// the Feature's inline style takes precedence over the value for the shared style
        /// </remarks>
        /// <param name="vectorStyle">cloned if kmlStyle is not null</param>
        /// <param name="kmlStyle">Style to apply to existing VectorStyle</param>
        private VectorStyle ApplyStyleOverrides(VectorStyle vectorStyle, Style kmlStyle)
        {
            if (kmlStyle == null)
            {
                return(vectorStyle);
            }

            if (kmlStyle.Polygon == null && kmlStyle.Line == null && kmlStyle.Icon == null)
            {
                return(vectorStyle);
            }

            vectorStyle = vectorStyle.Clone();

            if (kmlStyle.Polygon != null)
            {
                // fill
                var fill = kmlStyle.Polygon.Fill.GetValueOrDefault(((SolidBrush)vectorStyle.Fill).Color.A > 0);
                var argb = kmlStyle.Polygon.Color?.Argb ?? ((SolidBrush)vectorStyle.Fill).Color.ToArgb();

                vectorStyle.Fill =
                    fill
                        ? new SolidBrush(Color.FromArgb(argb))
                        : new SolidBrush(Color.Transparent);

                // outline
                vectorStyle.EnableOutline = kmlStyle.Polygon.Outline.GetValueOrDefault(vectorStyle.EnableOutline);

                var width = kmlStyle.Line?.Width ?? vectorStyle.Outline.Width;
                argb = kmlStyle.Line?.Color?.Argb ?? vectorStyle.Outline.Color.ToArgb();

                vectorStyle.Outline = vectorStyle.EnableOutline
                    ? new Pen(Color.FromArgb(argb), (float)width)
                    : new Pen(Color.Transparent);
            }

            if (kmlStyle.Line != null)
            {
                var width = kmlStyle.Line.Width.GetValueOrDefault(vectorStyle.Line.Width);
                var argb  = kmlStyle.Line.Color?.Argb ?? vectorStyle.Line.Color.ToArgb();
                vectorStyle.Line = new Pen(Color.FromArgb(argb), (float)width);
            }

            try
            {
                if (kmlStyle.Icon != null)
                {
                    RasterPointSymbolizer rps = null;

                    if (kmlStyle.Icon.Icon != null && kmlStyle.Icon.Icon.Href != null)
                    {
                        rps = new RasterPointSymbolizer();
                        if (_symbolDict.ContainsKey(kmlStyle.Icon.Icon.Href.ToString()))
                        {
                            rps.Symbol = _symbolDict[kmlStyle.Icon.Icon.Href.ToString()];
                        }
                        else
                        {
                            var newSymbol = GetImageFromUrl(kmlStyle.Icon.Icon.Href);
                            _symbolDict.Add(kmlStyle.Icon.Icon.Href.ToString(), newSymbol);
                            rps.Symbol = newSymbol;
                        }

                        vectorStyle.PointSymbolizer = rps;
                    }

                    if (vectorStyle.PointSymbolizer is RasterPointSymbolizer)
                    {
                        rps = (RasterPointSymbolizer)vectorStyle.PointSymbolizer;

                        var argb = kmlStyle.Icon.Color?.Argb ?? ((SolidBrush)vectorStyle.PointColor).Color.ToArgb();
                        rps.SymbolColor = Color.FromArgb(argb);
                        rps.RemapColor  = Color.White;
                        rps.Scale       = (float)kmlStyle.Icon.Scale.GetValueOrDefault(1);
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }

            return(vectorStyle);
        }