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 }); }
/// <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); }